Python影像辨識筆記(十九):WongKinYiu/PyTorch_YOLOv4使用教學及注意事項
1 min readSep 11, 2020
注意事項:
[1] 使用u3版本的原因在於u5版本是參考yolov5的repo而寫成的,使用的模型參數是yaml格式,與以往cfg格式完全不同,為了與官方darknet一致,故採用u3版本。[2] 目前原作者尚未開發出from pre-trained weight yolov4-tiny.conv.29檔案的訓練方式,仍在等待原作者回覆中
2020/12/01更新,已解決:
在models.py中的load_darknet_weights()中加入下列程式即可解決:
elif file == 'yolov4-tiny.conv.29':
cutoff = 29[3] 訓練時遇到No module named mish_cuda的問題,解決方法可參考這裡進行安裝,步驟7需要將檔案複製到site_package所在資料夾。可以透過以下指令顯示路徑位置:
python -c 'import site; print(site.getsitepackages())'
['/opt/conda/lib/python3.6/site-packages']
或是使用
pip install git+https://github.com/thomasbrandon/mish-cuda/安裝[4]2020/11/19更新
目前原作者已經將程式碼更新,大多問題都已經解決,master branch的repo[5]darknet和pytorch yolov4的learning rate scheduler差異
darknet用multi-steps decay, learning rate整個過程中只改變兩次, 大概會在 270 epochs左右開始over fitting, 但因為訓練快結束了 所以幾乎看不出來.
pytorch這用cosine annealing, learning rate一直在變, 大概在150~250間會開始發生over fitting, 愈大的model愈晚發生.[6]train2017.txt/val2017.txt相對路徑的BUG
https://github.com/WongKinYiu/PyTorch_YOLOv4/pull/32[7]如何透過u5版本的yaml檔案進行backbone修改?
Yolov4 with Efficientnet b0-b7 Backbone
Yolov4 with MobileNet V2/V3 Backbone
Yolov4 with Resnext50/ SE-Resnet50 Backbones
Yolov4 with Resnet Backbone
Yolov4 with VGG Backbone[8]解決test.py執行時遇到numpy必須要1.17版本及No module named 'pycocotools'的方法:
https://github.com/e96031413/PyTorch_YOLOv4-tiny/blob/main/README.md#0208%E6%9B%B4%E6%96%B0
環境建置
wget https://github.com/WongKinYiu/PyTorch_YOLOv4/archive/u3_preview.zip && unzip u3_preview.zip && cd PyTorch_YOLOv4-u3_previewpip install -r requirements.txt
pip install git+https://github.com/thomasbrandon/mish-cuda/# 安裝前請先檢查requirements.txt中的套件在自己的電腦裡面是否已經安裝了,建議只安裝沒有的#aiForge只需安裝pycocotools # pip install pycocotools# yolov4-tiny-conv.29
# wget https://github.com/AlexeyAB/darknet/releases/download/darknet_yolo_v4_pre/yolov4-tiny.conv.29# yolov4.conv.137.pth
wget --load-cookies /tmp/cookies.txt "https://docs.google.com/uc?export=download&confirm=$(wget --quiet --save-cookies /tmp/cookies.txt --keep-session-cookies --no-check-certificate 'https://docs.google.com/uc?export=download&id=1fcbR0bWzYfIEdLJPzOsn4R5mlvR6IQyA' -O- | sed -rn 's/.*confirm=([0-9A-Za-z_]+).*/\1\n/p')&id=1fcbR0bWzYfIEdLJPzOsn4R5mlvR6IQyA" -O FILENAME && rm -rf /tmp/cookies.txt# 在utils/parse_config.py的第40行supported(data type: list)加入'resize','group_id'# train.py修改第68行(64改成32)
這樣才能訓練以32為倍數的image size(如:416)
使用
CUDA_VISIBLE_DEVICES=0 python3 train.py --data coco2014.data --batch 16 --epochs 300 --img 416 --cfg yolov4.cfg --weights '' --name v4-from-scratchCUDA_VISIBLE_DEVICES=0 python test_half.py --data coco2014.data --cfg yolov4-twin-head.cfg --weights weights/best.pt --img 416 --augment