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

时间:2024-04-03 14:11:38

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

52CV君 我爱计算机视觉 今天

点击我爱计算机视觉标星,更快获取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训练自己数据的目标检测

 

原博文地址

https://www.learnopencv.com/training-yolov3-deep-learning-based-custom-object-detector/

 

代码下载

链接:https://pan.baidu.com/s/1rnSVDeHQg_DTpRcuUe5JZw  密码:3rit