【圖文教學】YOLOV7 教學 手把手帶你做 訓練自己的物件偵測模型 訓練自己的資料集

人工智慧好好玩||物件偵測不簡單||想學就要趁現在||還不趕快看過來

XUAN
10 min readJul 9, 2022
YOLOV7 👉教學 手把手帶你做 用GPU訓練自己的物件偵測模型 訓練自己的資料集

💣本篇主要介紹如何訓練 Yolov7 ,由於近期剛嘗試寫教學文,所以有寫得不完整或者過於簡易省略步驟的話,再麻煩有問題的讀者們在底下留言啦💣
另外針對排版不美麗這件事,就看在人家長的超正又火辣的份上鞭小力點啦,畢竟人家需要時間摸索與學習嘛 🥺🥺

前半部會先小小補充 Yolov7的介紹,若沒有興趣閱讀者,可直接跳至
💎💎💎💎橫線區,感謝~

⌚我的顯卡為 NVDIA GeForce 2080,batch = 4,epoch = 300,耗時約 900 分鐘,2100張圖片訓練,3個類別,準確度 76%,給各位參考一下。由於訓練集屬於病患資料,極具隱私的考量,所以不進一步做分享。

⌨版本一覽:CUDA = 11.2;Python = 3.9;torchvision = 0.8.2+cu110;torch = 1.7.1+cu110

❌另外,本文提供的程式碼含有參數調整,所以你要記得改掉!!!此外,橫槓(—)在這邊出現是錯的,你要改成兩個小橫槓(--),不然你直接複製去執行會出錯,我有說哦,沒看到的話,就....自己debug囉

📒小補充一下,這次的作者你們知道是誰嗎?!!是Yolov4原本的團隊啦
Chien-Yao Wang, Alexey Bochkovskiy, Hong-Yuan Mark Liao。
其中一定要提一下,當中兩位前輩是台灣人呢,WOOW
Chien-Yao Wang和Hong-Yuan Mark Liao先生他們也是YOLOR的作者呢!!
是不是很光榮呀🎊🎊🎊

yolov7 搜尋

本文將介紹YOLO官方2022年7月登場的YOLOV7,其連結為以下Wonkiyui|Github 的那個優~~第二個連結Jinfagang|Github 的YOLOV7並非官方釋出,此外文章內也說明yolov7的7單純只是幸運數字,不是真正的YOLOV7。所以請有興趣的朋友,稍微留意一下拉~

到底是哪個yolov7呢

在今年 2022 的 7 月,YOLOV7 (原論文請 點我 ) 正是閃亮登場啦~,它在5 FPS - 160 FPS 的範圍內,速度(speed)跟準確度(accuracy)是目前即時物件偵測(Real-time Object Detection)相關技術中的第一名,意即我最快也最準

【XUANㄟ教學文章】YOLOV7 與其他新穎技術相比,又快又準確
YOLOV7 與其他新穎技術相比,不論是速度還是準確度都大幅提升

而 YOLOv7 一文的主要貢獻有以下四點:

1. 藉由設計幾種 bag-of-freebies(一種優化物件偵測的技巧,2019年由李沐大神所提出,論文請點我) 的方法,在不增加推理成本(inference cost)的前提下,來提升物件偵測的準確度。

2. 解決兩個物件偵測演進的問題:
(一)如何重新參數化取代原始模組;
(二)動態標籤分配如何處理分配給不同輸出層的問題

3. 利用 “extend” , “compound scaling” 的方式,有效地使用參數和計算

4. YOLOV7 可以有效減少 SOTA (State-of-the art,最先進的) 即時物件偵測 約40%的參數及50%的計算量,來提高速度與準確度。

💎💎💎💎💎💎💎💎💎💎💎💎💎💎💎💎💎💎💎💎💎💎💎💎

💎 ㅤ ㅤ ㅤ ㅤ ㅤ ㅤ ㅤ ㅤ 那以下我們開始訓練教學吧 ㅤㅤ ㅤ ㅤㅤ ㅤ ㅤ 💎

💎💎💎💎💎💎💎💎💎💎💎💎💎💎💎💎💎💎💎💎💎💎💎💎

🌱首先,請先至github下載檔案
如果直接在 Google 上搜尋,排行第一個可能是 jinfagang (有興趣點我),
我起初是使用他的版本,但後面遇到不少問題後,才跑回去看論文內原作所 提供的網址,操作起來就流暢多了,這邊沒有要戰誰好,只是單純依個人在操作上的偏好,有興趣者可以點擊上方的超連結,而下方的連結為原作王建饒博士的Github。若要跟著以下的步驟進行訓練,請下載下面連結的程式碼

👉 https://github.com/WongKinYiu/yolov7

【XUANㄟ教學文章】yolov7 github 下載
如果你有下載Github Desktop 當然可以不用這樣下載

🌱下滑找到 Performance下載任一模型的預訓練檔,要挑哪一個就根據自己的需求啦(檔名為 .pt),之後會用在訓練上

【XUANㄟ教學文章】yolov7 預訓練檔下載

🌱再來,打開Anaconda Prompt,並且新建一個環境,這邊就省略教學啦~
如果不知道要怎麼建立的話,可以看我的Github 👇 https://github.com/huchi00057/YOLOX

【XUANㄟ教學文章】yolov7Anaconada Prompt 建立環境

而本次我是建立一個Python 版本為3.9的環境,名為yolov7。

🌱Anaconda Prompt 切到 最一開始創的yolov7環境
並且切到 yolov7資料夾

【XUANㄟ教學文章】yolov7 Anaconda yolov7 environmet create

🌱接著安裝套件:

pip install requirement.txt

如果你在安裝時還缺其他套件的話,再另外搜尋下載嚕~~
😙 如果你要用GPU去訓練,要特別去下載Pytorch套件優,不會就 點我

🌱基本上安裝到這裡就差不多了,我們可以來測試安裝行不行啦~~

python detect.py — weights ✍️yolo7.pt(前面下載的預訓練檔) — source inference/images/horses.jpg(你資料夾一定有)

跑完後的結果會存在 yolov7/runs/detect/exp? 內,如下圖。
長這樣,代表你裝好了,棒棒很棒超棒👏👏

【XUANㄟ教學文章】yolov7 測試輸出結果
YOLOV7 測試 detect.py 輸出結果

一切待續後,準備來訓練模型囉~~
🌱首先,先準備好資料集,目前我只會用YOLO格式(.txt)的資料集去做訓練,如果你本來已經有資料集了(Pascal VOC 或 COCO格式),請自行轉檔。

【XUANㄟ教學文章】yolov7Pascal VOC .xml COCO .json YOLO .txt

我本來就有以上兩種格式,但在訓練yolor的時候碰壁,找了好久,總算找到一篇有用的文章:https://hackmd.io/@jim93073/r1laqq0jF
(我只有改CLASS,然後再執行main.py,
像這樣:python main.py — path D:\yolox\data\1\test.txt — output test.json)

【XUANㄟ教學文章】yolov7 圖片資料擺放位置
資料集內包含圖片檔(.jpg)以及標記檔(.txt)
【XUANㄟ教學文章】yolov7 train.txt val.txt 內容
.cache檔是跑訓練生出來的東西

這邊給大家參考一下,我的資料擺放~

總結資料集的準備,你需要以下
image資料夾:圖片檔(.jpg)、標記檔(.txt)
兩個.txt檔案:所有訓練圖片的記事本還有驗證檔的(train.txt , valid.txt)

你一定會問,我就不會才要看你文章,你還不教我怎麼標記圖片,這樣對嗎 All right. 我大概說明一下齁,很簡單

#下載標記圖片的工具叫做 labelim
pip install labelimg
#開啟它
labelimg

【XUANㄟ教學文章】yolov7 安裝標記工具 Labelimg
安裝labelimg的畫面
【XUANㄟ教學文章】yolov7 標記工具 Labelimg 介面
打開的介面樣貌

開啟充滿要拿來訓練圖片的資料夾

【XUANㄟ教學文章】yolov7 Labelimg 使用教學
開啟資料夾
【XUANㄟ教學文章】yolov7 標記工具 Labelimg 使用教學
labelimg操作

先點右邊倒數第四個按鈕(YOLO),按個兩下,讓它圖案保持跟一開始一樣,再點擊右邊的 Create RectBox 將物件框選起來,並輸入類別名稱,最後按save進行儲存(儲存格是要是.txt,如果不是就按倒數第四個按鈕),以此類推其他圖片(Next Image 鈕跳到下一張圖片)。全部完成後關掉即可。

❌類別可不可以用中文,我不知道,你試試看吧,我不想冒debug的風險,所以沒有嘗試哈哈

🌱在跑模型前的最後一個步驟就是修改參數

到 cfg 資料夾找你適合想要的 .yaml 複製到...你記得的地方,並更改文件名稱

【XUANㄟ教學文章】yolov7 修改參數 coco.yaml

我個人是放在cfg資料夾裡,並更名為 colon.yaml,另外更改 nc :3,因為我分成三類別。

【XUANㄟ教學文章】yolov7 修改參數 your.yaml

🌱接著複製 data 資料夾的colon.yaml檔,修改訓練集(train)與驗證集(val)的路徑與類別名稱(names)及數量(nc)。

【XUANㄟ教學文章】yolov7 修改參數 yours.yaml

一切待續後,真的要來訓練囉~~

🌱輸入訓練指令

python train.py — device 0 — batch-size 4 — data data/colon.yaml — cfg cfg/colon.yaml

(因為我有用 gpu 去跑,所以有加 — device 0, — epoch 可以根據自己的需求做調整,預設是300)

開始訓練後會出現

【XUANㄟ教學文章】yolov7 train yolov7 looks like

跑完長這樣

【XUANㄟ教學文章】yolov7 訓練完的介面顯示

🌱歷經15小時的訓練,總算可以來收割啦~

以下指令是用來跑圖片或影片的
python detect.py — weights D:\desktop\yolov7\runs\train\exp8\weights\best.pt — source test(我充滿圖片的資料夾)

在runs/detect資料夾中會出現你try的圖片上附加預測框框。

🌱另外,在輸出的資料夾中(runs/runs/exp),內容物包含權重檔,f1.pr.r.p曲線圖,cmd 的紀錄以及訓練過程輸出的預測樣子(被我擋住的圖片)。

【XUANㄟ教學文章】yolov7 訓練完的輸出資料夾

🌱假如訓練到一半斷掉了想要接續訓練,只需更改預訓練檔即可
python train.py — device 0 — batch-size 4 — data data/colon.yaml — cfg cfg/colon.yaml — weights 跑到一半的權重.pt

🤓🤓以上是YOLOV7的訓練教學,由於圖片涉及隱私,所以很多小細節就不另外放圖片展示。若遇到任何問題,可進一步再底下留言⌨⌨討論

👏👏感謝閱讀完這篇文章,如果覺得這篇文章對你有幫助請在底下幫我拍個手(長按最多可以拍50下手)(給我長按><)

🔗資料參考:https://www.youtube.com/watch?v=ag88beS_fvM
(如果有些步驟還是不曉得怎麼弄,可以參考這個影片)

--

--

XUAN

我是 Xuan,紀錄物件偵測(Object Detection)學習日常https://github.com/huchi00057|huchi00057@gmail.com