前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >实用教程!使用YOLOv3训练自己数据的目标检测

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

作者头像
CV君
发布2019-12-27 10:42:18
2.3K0
发布2019-12-27 10:42:18
举报

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. 指定训练所需数据文件路径

在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

原博文地址

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

代码下载

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

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-01-15,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 我爱计算机视觉 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
图像识别
腾讯云图像识别基于深度学习等人工智能技术,提供车辆,物体及场景等检测和识别服务, 已上线产品子功能包含车辆识别,商品识别,宠物识别,文件封识别等,更多功能接口敬请期待。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档