本文针对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进行测试。这方面内容根据自己需求自己建工程实现。