yolov3模型微調(fine-tune)備忘


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. 參考

建立自己的YOLO辨識模型 – 以柑橘辨識為例

(完)


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM