点击我爱计算机视觉标星,更快获取CVML新技术


YOLOv3是当前计算机视觉中最为流行的实时目标检测算法之一。

实用教程!使用YOLOv3训练自己数据的目标检测

昨天LearnOpenCV网站博主又发福利,post了一个清晰明了的教程,一步一步示例,如何使用快速实时的YOLOv3算法,训练某种特定类别目标的检测器。

作者收集了将近1000张雪人的图片,训练了一个雪人检测器,先来看看效果吧

全部代码可在文末下载。

该教程主要步骤如下:

1. 准备数据

作者在网络上收集了雪人的图像并将每幅图像链接存储在snowmanDataLinks.cvs。

1.1 下载数据

在代码文件夹里使用下述命令即可自动下载作者收集的雪人图片:

python3 downloadSnowmanData.py

作者总共收集了922幅图像,如果因为网络原因你只能下载到700幅图像也能训练出mAP达到0.9的检测器。

作者提供了这些图像的包围框标签,存放于labels文件夹下。

下载结束后要检查一下文件,保证把那些没有成功下载的错误文件删除。

1.2 训练集测试集数据切分

调用splitTrainAndTest.py脚本会自动把数据集按照训练集比测试集合9:1的比例切分,并生成snowman_train.txt和snowman_test.txt两个文件。

2. 准备Darknet

2.1 下载与编译Darknet

cd ~

git clone https://github.com/pjreddie/darknet

cd darknet

make

2.2 修改代码使得正常保存模型

为了更好的监控训练过程,打开文件examples/detector.c,将第135行

if(i%10000==0 || (i < 1000 && i%100 == 0)){ 

改为

if(i%1000==0 || (i < 2000 && i%200 == 0)){

并再次make编译。

3. 数据标注

下载的数据已经提供了雪人的标注,每个标注的格式如下:

<object-class-id> <center-x> <center-y> <width> <height> 

object-class-id是类别id,这里只有雪人一类,故这里统一为1,

center-x是目标的中心x坐标并除以图像宽度归一化了,

center-y是目标的中心y坐标并除以图像高度归一化了,

width为目标的宽度并除以图像宽度归一化了,

height为目标的宽度并除以图像高度归一化了。

4. 下载预训练模型

为了使训练过程网络能更快收敛,使用ImageNet数据集上的预训练模型。

使用以下命令下载:

cd ~/darknet

wget https://pjreddie.com/media/files/darknet53.conv.74 -O ~/darknet/darknet53.conv.74

5. 指定训练所需数据文件路径

实用教程!使用YOLOv3训练自己数据的目标检测

在darknet.data文件中指定classes类别数1,

训练集路径train指向snowman_train.txt、

验证集路径valid指向snowman_test.txt、

包含类名‘snowman’的类名文件classes.names、

权重文件存储路径backup。

6. YOLOv3参数配置

6.1 batch size:每次训练加载一批数据的个数

batch=64

6.2 subdivisions:当GPU内存不能训练一批数据时,将一批数据平均分成几部分

subdivisions=16

6.3 width,height,channels:训练图像要归一化为的宽高和通道数。

width=416

height=416

channels=3

6.4 momentum,decay:防止权重更新过程中过拟合的参数,一般不要改动。

momentum=0.9

decay=0.0005

6.5 learning rate,steps,scales,burn in:训练中控制学习率变化的参数。

learning_rate=0.001

policy=steps

steps=3800

scales=.1

burn_in=400

6.6 data augmentation:对训练数据进行多种变换。

angle=0

saturation = 1.5

exposure = 1.5

hue=.1

6.7 number of iterations:迭代次数

max_batches=5200

7. 训练YOLOv3

cd ~/darknet

./darknet detector train /path/to/snowman/darknet.data  /path/to/snowman/darknet-yolov3.cfg ./darknet53.conv.74 > /path/to/snowman/train.log

7.1 何时停止训练?

我们可以根据随着batch次数增多loss下降到某一阈值而停止训练,下图为训练过程中loss变换。

经过5200次迭代,最终得到的模型文件darknet-yolov3_final.weights达到90.91%的mAP。

8. 测试模型

调用object_detection_yolo.py测试模型。

python3 object_detection_yolo.py --image=snowmanImage.jpg

实用教程!使用YOLOv3训练自己数据的目标检测

原博文地址

Training YOLOV3: Deep Learning Based Custom Object Detection

代码下载

在“我爱计算机视觉”微信公众号对话界面回复“YOLO训练”,即可收到该工程代码的百度云下载地址。

加入目标检测专业群

加入52CV-目标检测专业讨论群,扫码添加52CV君(your-word)拉你入群:

请务必注明:目标检测

实用教程!使用YOLOv3训练自己数据的目标检测

喜欢在QQ交流的童鞋,可以加52CV官方QQ群:928997753。

(不会时时在线,如果没能及时通过验证还请见谅)

目标检测是计算机视觉研究的热点,52CV曾报道多篇相关博文,详见:

新年快乐!"我爱计算机视觉"干货集锦与新年展望


长按关注我爱计算机视觉

实用教程!使用YOLOv3训练自己数据的目标检测

麻烦给我一个好看