天天看點

目标檢測-yolov3内容整理

本文針對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

目标檢測-yolov3内容整理

注:

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。

目标檢測-yolov3内容整理

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的注釋打開。

目标檢測-yolov3内容整理

根據自己訓練的類别修改filters,filters=(classes+5)*3

目标檢測-yolov3内容整理

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進行測試。這方面内容根據自己需求自己建工程實作。

繼續閱讀