yolov4論文解讀和訓練自己數據集

前天YOLOv4終於問世——

YOLO v4 論文:https://arxiv.org/abs/2004.10934

YOLO v4 開源代碼:https://github.com/AlexeyAB/darknet

效果相比YOLOv3和去年的EfficientDet系列提升明顯。這裏使用tensorflow model的測試圖片對官方給出的COCO數據集訓練的模型測試對比:

分別是YOLOv3和YOLOv4的測試結果,可以看到提升還是很明顯的,特別是小目標的識別效果,不枉論文吹B的:

Improves YOLOv3’s AP and FPS by 10% and 12%, respectively

論文細節還在研究中,後面有空更新。我也第一時間使用YOLOv4訓練了自己數據集。

具體的步驟和YOLOv3一模一樣,需要下載backbone的權重:https://github.com/AlexeyAB/darknet#how-to-compile-on-linux-using-make中for yolov4.cfgyolov4-custom.cfg (162 MB)。

因爲我沒有梯子,能下載的兄弟請傳個百度網盤分享交流。這裏在網上只能找到別人分享的yolov4.weights文件,於是提取了yolov4.weights模型的backbone參數作爲backbone部分的預訓練模型。

訓練自己數據集只需要修改yolov4-custom.cfg中三處的:

[convolutional]
size=1
stride=1
pad=1
filters=${3×(自己數據集類別+5)}  #例如COCO是3×(80+5)=255
activation=linear


[yolo]
mask = 3,4,5
anchors = 12, 16, 19, 36, 40, 28, 36, 75, 76, 55, 72, 146, 142, 110, 192, 243, 459, 401
classes=${自己數據集類別}  #例如COCO是80
num=9
jitter=.3
ignore_thresh = .7
truth_thresh = 1
scale_x_y = 1.1
iou_thresh=0.213
cls_normalizer=1.0
iou_normalizer=0.07
iou_loss=ciou
nms_kind=greedynms
beta_nms=0.6

詳細準備工作參考https://pjreddie.com/darknet/yolo/中Training YOLO on VOC章節。

準備好後既可以開始訓練:

訓練過程:

這裏使用車輪識別數據集對比YOLOv3和YOLOv4:

Model AP for Body AP for Wheel mAP time
YOLOv3 0.999322235707 0.88200726583 0.940664750768 12.47s/532images
YOLOv4 0.998358289307 0.948024870726 0.973191580016 12.00s/532images
YOLOv3 with Mosaic 0.99807091697 0.888338772271 0.943204844621 13.00s /532 imags

可以看到,在完全相同的訓練數據和測試數據集上,YOLOv4提升效果非常明顯!更短的時間,到達好的識別效果,特別是小目標識別效果。對YOLOv3使用YOLOv4中的馬賽克增強處理,對識別也有0.3%的提升,特別是小目標的識別上。

對惡劣條件下的車輪測試對比:

可以看到,YOLOv4相比YOLOv3提升非常明顯,特別是小目標的識別效果。

YOLOv4網絡結構

TensorRT模型對比

這裏對比YOLOv3和YOLOv4在darknet和tensorrt模型下的實驗:

model framework time GPU Mem
YOLOv3 darknet 27.575 1809MiB
YOLOv3 - pruned 99% darknet 6.446 685MiB
YOLOv4 darknet 27.572000 ms 1333MiB
YOLOv4 tensorrt-fp32 25 ms 1145MiB
YOLOv4 tensorrt-fp16 10 ms 721MiB

 

可以看到YOLOv4和YOLOv3的推理速度相差不大,實際顯存消耗降低明顯,tensorrt可以有效降低顯存消耗和推理時間。

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章