本文針對yolov3檢測原理、模型測試、訓練步驟以及用到的工具進行總結。
yolov3檢測原理
參考部落格
https://blog.csdn.net/chandanyan8568/article/details/81089083
https://blog.csdn.net/weixin_38241876/article/details/94618405
https://blog.csdn.net/leviopku/article/details/82660381
https://www.cnblogs.com/wangxinzhe/p/10648465.html
https://www.cnblogs.com/ywheunji/p/10761239.html
https://blog.csdn.net/qq_34199326/article/details/84109828
yolov3檢測結構架構關注三點backbone、loss函數的設計、不同尺度上的檢測。backbone主要是通過resnet結構增加網絡深度,更好的提取特征。
模型訓練
C++版本,可以使用https://github.com/AlexeyAB/darknet版本,可在windows和linux系統上使用。
Linux 下代碼編譯步驟:
1、安裝好cuda 環境。我的是cuda10.0+cudnn7.0
2、安裝好opencv。sudo apt-get install libopencv-dev
注:
CUDNN_HALF=1
to build for Tensor Cores (on Titan V / Tesla V100 / DGX-2 and later) speedup Detection 3x, Training 2x
OPENMP=1
to build with OpenMP support to accelerate Yolo by using multi-core CPU
安裝過程中會出現找不到nvcc的錯誤,找自己目錄下的nvcc。
3、開始編譯 make -j8。每次加sudo 總會出現 cannot find lcuda的錯誤, 到usr/local/cuda/lib64以及usr/local/cuda-10.0/lib64 下去找也找不到lidcuda.so ,是以編譯的時候去掉 sudo ,不知道為啥,希望路過的大神給指點下。
準備資料
1、準備兩個檔案夾分别存放自己的訓練資料和訓練驗證資料,資料制作用的是labelImg.
2、每個檔案夾裡分别存放圖檔資料以及相應名稱的label檔案。
3、修改cfg檔案。
模型訓練
訓練的時候把training下的batch和sundivisions的注釋打開。
根據自己訓練的類别修改filters,filters=(classes+5)*3
anchors 需要根據自己标注好的資料集計算,代碼提供了計算的接口。
以linux系統為例:
./darknet detector calc_anchors -num_of_clusters 9 -width 416 -height 416 , 9代表聚類出的框的對數。
其他疊代次數,學習率等參數根據自己需求調節。
利用程式自帶的接口就可以進行模型訓練了。
./darknet detector train yov3.data yov.cfg darknet53.conv.74 -gpus 0 -map。
darknet53.conv.74 預訓練模型下載下傳位址 https://pjreddie.com/media/files/darknet53.conv.74 。
-gpus 0 可以指定gpu 進行模型訓練。
-map 是否開啟map計算。
開源訓練好的模型連結
yolov3.weights 連結: https://pan.baidu.com/s/1kWxv8kAY_f6ssF6DKnVotw 提取碼: jj8s
yolov2.weights 連結: https://pan.baidu.com/s/1xE70fWo1-j6qM_PfRJoCzg 提取碼: c8yc
vgg-conv.weights 連結: https://pan.baidu.com/s/1dV8eVzUZRsTRI-Mopx7JMQ 提取碼: m54m
yolov3-tiny.weights 連結: https://pan.baidu.com/s/1tAB3AkFD0MC9lGvAL475dg 提取碼: qwdb
yolov3-spp.weights 連結: https://pan.baidu.com/s/1aqUU5qFsYXajmGFy1A1tjw 提取碼: 6fda
yolov3-spp 模型是在yolov3的基礎之上加上空間金字塔結構,據說可以提高速度并且提高精度。slim-yolov3是在yolov3-spp的基礎之上對模型進行減枝,進而提高檢測速度。以下是代碼連結和論文連結。
https://github.com/PengyiZhang/SlimYOLOv3
https://arxiv.org/pdf/1907.11093v1.pdf
yolov3 的loss函數設計方面已有新的改進,現提供了GIOU loss 的接口。新的loss函數的設計,我自己試驗後覺得框的回歸位置感覺更加精确。
模型測試
有關測試方面的内容可以使用自帶的接口測試,也可以利用yolov3封裝好的dll進行測試。這方面内容根據自己需求自己建工程實作。