💣本篇主要介紹如何訓練 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的作者呢!! 是不是很光榮呀🎊🎊🎊
在今年 2022 的 7 月,YOLOV7 正式閃亮登場啦~,它在5 FPS - 160 FPS 的範圍內,速度(speed)跟準確度(accuracy)是目前即時物件偵測(Real-time Object Detection)相關技術中的第一名,意即我最快也最準。
而 YOLOv7 一文的主要貢獻有以下四點:
- 藉由設計幾種 bag-of-freebies(一種優化物件偵測的技巧,2019年由李沐大神所提出,論文請點我) 的方法,在不增加推理成本(inference cost)的前提下,來提升物件偵測的準確度。
- 解決兩個物件偵測演進的問題: (一)如何重新參數化取代原始模組; (二)動態標籤分配如何處理分配給不同輸出層的問題
- 利用 “extend” , “compound scaling” 的方式,有效地使用參數和計算
- YOLOV7 可以有效減少 SOTA (State-of-the art,最先進的) 即時物件偵測 約40%的參數及50%的計算量,來提高速度與準確度。
如果直接在 Google 上搜尋,排行第一個可能是 jinfagang (有興趣點我), 我起初是使用他的版本,但後面遇到不少問題後,才跑回去看論文內原作所 提供的網址,操作起來就流暢多了,這邊沒有要戰誰好,只是單純依個人在操作上的偏好,有興趣者可以點擊上方的超連結,而下方的連結為原作王建饒博士的Github。若要跟著以下的步驟進行訓練,請下載下面連結的程式碼
##🌱下滑找到 Performance下載任一模型的預訓練檔,要挑哪一個就根據自己的需求啦(檔名為 .pt),之後會用在訓練上
##🌱再來,打開Anaconda Prompt,並且新建一個環境,這邊就省略教學啦~ 如果不知道要怎麼建立的話,可以看我的Github 👇 https://github.com/huchi00057/YOLOX
而本次我是建立一個Python 版本為3.9的環境,名為yolov7。
##🌱Anaconda Prompt 切到 最一開始創的yolov7環境 並且切到 yolov7資料夾
##🌱接著安裝套件:
pip install requirement.txt
如果你在安裝時還缺其他套件的話,再另外搜尋下載嚕~~ 😙 如果你要用GPU去訓練,要特別去下載Pytorch套件優,不會就 點我
##🌱基本上安裝到這裡就差不多了,我們可以來測試安裝行不行啦~~
python detect.py — weights ✍️yolo7.pt(前面下載的預訓練檔) — source inference/images/horses.jpg(你資料夾一定有)
跑完後的結果會存在 yolov7/runs/detect/exp? 內,如下圖。 長這樣,代表你裝好了,棒棒很棒超棒👏👏
一切待續後,準備來訓練模型囉~~ ##🌱首先,先準備好資料集,目前我只會用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)
這邊給大家參考一下,我的資料擺放~
總結資料集的準備,你需要以下:
image資料夾:圖片檔(.jpg)、標記檔(.txt) 兩個.txt檔案:所有訓練圖片的記事本還有驗證檔的(train.txt , valid.txt)
你一定會問,我就不會才要看你文章,你還不教我怎麼標記圖片,這樣對嗎 All right. 我大概說明一下齁,很簡單
#下載標記圖片的工具叫做 labelim
pip install labelimg
#開啟它
labelimg
先點右邊倒數第四個按鈕(YOLO),按個兩下,讓它圖案保持跟一開始一樣,再點擊右邊的 Create RectBox 將物件框選起來,並輸入類別名稱,最後按save進行儲存(儲存格是要是.txt,如果不是就按倒數第四個按鈕),以此類推其他圖片(Next Image 鈕跳到下一張圖片)。全部完成後關掉即可。
❌類別可不可以用中文,我不知道,你試試看吧,我不想冒debug的風險,所以沒有嘗試哈哈
到 cfg 資料夾找你適合想要的 .yaml 複製到...你記得的地方,並更改文件名稱
我個人是放在cfg資料夾裡,並更名為 colon.yaml,另外更改 nc :3,因為我分成三類別。
一切待續後,真的要來訓練囉~~
python train.py — device 0 — batch-size 4 — data data/colon.yaml — cfg cfg/colon.yaml
(因為我有用 gpu 去跑,所以有加 — device 0, — epoch 可以根據自己的需求做調整,預設是300)
以下指令是用來跑圖片或影片的 python detect.py — weights D:\desktop\yolov7\runs\train\exp8\weights\best.pt — source test(我充滿圖片的資料夾)
在runs/detect資料夾中會出現你try的圖片上附加預測框框。
python train.py — device 0 — batch-size 4 — data data/colon.yaml — cfg cfg/colon.yaml — weights 跑到一半的權重.pt
🤓🤓以上是YOLOV7的訓練教學,由於圖片涉及隱私,所以很多小細節就不另外放圖片展示。若遇到任何問題,可進一步再底下留言⌨⌨討論
🔗資料參考:(https://www.youtube.com/watch?v=ag88beS_fvM) (如果有些步驟還是不曉得怎麼弄,可以參考這個影片)