1. 前言
項目需要用目標檢測模型,由於yolov3精度和性能突出,成為最后選擇的模型。但是因為在實際場景中會有誤檢測和漏檢測的情況,還需要采集實際場景的數據進行微調。思路是直接調整由ImageNet+coco數據集訓練出來的權重yolov3.weights,凍結前面的層數,只微調后面n層。
系統:Ubuntu 18.04
2. 過程
2.1. 數據准備
采集好圖片,篩選,標注,轉換。
其中標注工具我們使用的是labelImg,可以搜索安裝。但是一般標注的時候選的是PascalVoc格式,最后保存的是xml文件,而yolov3的模型需要讀取yolo格式的標簽文件,因此需要手動轉換,可參考voc_label.py。
然后是各種配置文件,參考:建立自己的YOLO辨識模型 – 以柑橘辨識為例
包括根據種類調整網絡結構等,注意因為是fine tune,需要將LR調整低一點,我是直接調為原來的1/2,后面如果不太好再繼續調整。
2.2. 提取凍結層
主要是為了凍結已經訓練好的網絡中的前n層的權重,命令:
# 凍結前81層 darknet partial cfg/yolov3.cfg yolov3.weights yolov3.conv.81 81
這個時候會在本路徑提取出名為yolov3.conv.81的預訓練模型。
2.3. 訓練
命令:
# 使用多gpu進行訓練 darknet detector train cfg/coco.data cfg/yolov3.cfg yolov3.conv.81 -gpus 0,1
2.4. 繼續訓練
訓練期間因為各種原因終止,需要接着訓練,則在原來的weights上繼續訓練:
darknet detector train cfg/coco.data cfg/yolov3.cfg weights/yolov3_500000.weights -gpus 0,1
weights/yolov3_500000.weights是上次訓練最后保存的權重。
3. 權威詳細教程
之前是因為官網放出來的訓練教程實在太簡陋了,才在網上找到一些零零散散的教程,拼湊在一起解決問題。
直到找到AlexeyAB 放在github的教程,基本上你想知道的細節都在里面了,作者寫得實在詳細,包括如何修改配置,多GPU應該怎么修改,map怎么畫,等等。所以如果你看到這里,還有其他疑問,應該直接進入這篇教程看看了:https://github.com/AlexeyAB/darknet。
4. 參考
(完)