相比於Yolov4 ,v5的模型更多,適用配置的設備更廣泛。
window環境下,首先安裝anaconda,便於創建pytorch環境。安裝直接百度。
第一步:從github下載壓縮包
https://github.com/ultralytics/yolov5
如果英語看着費勁,可以參考這個博主的漢化版 :https://github.com/wudashuo/yolov5
下載好zip壓縮包,解壓之后放入一個工程目錄,准備開始第二步。
第二步:下載依賴
首先,在anaconda中創建環境。
打開anaconda的命令行
創建環境名 比如叫yolov5
conda create -n yolov5
進入環境
activate yolov5
然后cd到工程目錄下面
開始下載環境所需的依賴了。
然后輸入命令
pip install -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple,
等待pip自動下載所需要的依賴。-i 參數是從清華鏡像中下載依賴包,如果不加,則從國外源下載,不僅速度慢,還容易下載失敗。
當所有依賴下載完成,可以開始第三步了。
第三步:下載權重文件
在https://github.com/ultralytics/yolov5/releases中下載4個權重文件,放到工程路徑下的weights文件夾中。
一般這四個就夠用了,s是最小的,速度最快,但是精度不高。
第四步 測試detect.py
在工程文件在運行cmd。
然后輸入python detect.py --source 0 --weights=“weights/yolov5s.pt” (如果設備有攝像頭)
或者python detect.py --source=“data/images/bus.jpg” --weights=“weights/yolov5s.pt”(設備沒有攝像頭)
前者會打開攝像頭並實時探測物品,后者將用工程自帶的一張測試圖片進行測試。運行結束后,會打印結果文件的位置。在這個位置中可以找到測試結果。
結束攝像頭進程 按ctrl+c即可,runs文件夾下有檢測的結果。、
如果檢測時的幀率只有幾幀,也就是時間時0點幾秒一張,多半時GPU沒有使用。
檢查自己的GPU是否可用
In [1]: import torch
In [2]: torch.cuda.current_device() Out[2]: 0 In [3]: torch.cuda.device(0) Out[3]: <torch.cuda.device at 0x7efce0b03be0> In [4]: torch.cuda.device_count() Out[4]: 1 In [5]: torch.cuda.get_device_name(0) Out[5]: 'GeForce GTX 950M' In [6]: torch.cuda.is_available() Out[6]: True
可以檢測到就行。如果檢測不到GPU,可能是安裝的cpu版本的pytorch..這時候需要手動安裝pytorch的GPU版本
官網https://pytorch.org/get-started/locally/
復制下面的安裝命令行就行。找適合自己設備的cuda版本
conda install pytorch torchvision torchaudio cudatoolkit=10.2 -c pytorch
之后檢測可用GPU之后,會發現幀率提升很大,幾十幀。這也是比yolov4好一點的地方,可用選小模型,速度會快一些。
第五步 制作自己的數據集–下載LabelImg
任意位置運行cmd,然后 pip install LabelImg -i https://pypi.tuna.tsinghua.edu.cn/simple
下載安裝完成后運行cmd,輸入LabelImg,打開程序。
第六步 制作自己的數據集–打標簽
把准備好的圖片放到一個文件夾中,在LabelImg中打開這個文件夾。然后設置標簽文件輸出位置(change save Dir)。不要放在與圖片相同的位置就行。然后對每張圖片畫框打標簽。按w鍵可以畫框,畫完框后,就會彈出對話框,然后在對話框上寫上標簽名就行(這步工作就是說明圖片上這個位置是什么東西)。打完標簽后,你就得到兩個文件夾。圖片和標簽。在標簽文件夾中,你還得到了一個classes.txt文件。這個文件記錄了數據集中所有類別。標簽文件中記錄的是引索。需要通過這個classes.txt文件才能知道對應的物品名稱。圖片和標簽兩個文件夾中的文件一一對應,它們名字相同,后綴名不同。然后你需要把數據分為訓練集和測試集,比例要適中。
此時,你擁有4個文件夾和一個class.txt文件。
- train圖片
- train標簽(與train 圖片一一對應,名字相同,后綴不同)
- test圖片
- test標簽 (與test 圖片一一對應,名字相同,后綴不同)
第七步 把自己的數據集轉移到yolov5工程目錄
在工程目錄下找到data文件夾,在這個文件夾里新建一個文件夾。可以任意命名(為方便說明,這里用命名為mydataset。在mydataset下新建兩個文件夾。一個命名為images,另一個命名為labels。這兩個文件夾名字是規定的,不能隨意。然后分別在這兩個文件夾下都新建兩個文件夾,命名為train,test。
然后把第六步得到的4個文件夾中的文件轉移到對應目錄中
- train圖片->images/train
- train標簽->labels/train
- test圖片->images/test
- test標簽->labels/test
-
第七步 調整配置文件
1. 打開工程目錄/models/yolov5s.yaml文件(如果訓練的是其他模型則打開其他模型的yaml文件),然后把nc改為第六步中classes.txt中類別的數量。(你數據集中標簽了多少樣東西,這個數字就是幾)
2. 打開工程目錄/data/coco128.yaml文件。
把train:設置為第六步的train圖片的存放位置
把val:設置為第六步的test圖片的存放位置
程序會自動搜索labels文件的位置。這也就是第六步為什么要規定圖片與標簽文件夾名字的原因。這個搜索是通過簡單字符串替換實現的
把nc:改為數據集的類別數目(1中的一樣)
把names改為類別名稱,順序要和第六步得到的classes.txt中的一樣。
第七步 訓練權重
命令行切換到工程目錄下。運行命令(運行之前確保修改的配置文件都保存好了)
python train.py --img 640 --data data/coco128.yaml --cfg models/yolov5s.yaml --weights weights/yolov5s.pt --batch-size 8 --epochs 50
這些參數根據實際情況進行調整。–cfg 指示用到的模型的配置文件的位置。–weights 指示對應模型權重文件的位置。
在開始訓練前。會打印輸出的位置。我們會得到訓練指標,訓練后的兩個權重文件(一個是最佳權重,一個是最后一輪訓練得到的權重)。
訓練完成后,就可以去那個目錄查看結果。
第八步 用訓練得到的權重進行預測
與第四步一樣,不同的是權重文件的位置變了
python detect.py --source 0 --weights=“weights/yolov5s.pt”。改一下權重路徑就行。
=>python detect.py --source 0 --weights=“runs\train\exp3\weights\best.pt”
source 參數說明
如果是0,則打開攝像頭
如果是圖片路徑,則對圖片進行預測。結果路徑會打印
如果是文件夾,則對文件夾中的圖片和視頻進行預測。
如果是視頻,則對視頻進行預測。
有什么疑問歡迎留言區討論