实用教程!使用YOLOv3训练自己数据的目标检测
点击我爱计算机视觉标星,更快获取CVML新技术
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训练”,即可收到该工程代码的百度云下载地址。
加入目标检测专业群
加入52CV-目标检测专业讨论群,扫码添加52CV君(your-word)拉你入群:
(请务必注明:目标检测)
喜欢在QQ交流的童鞋,可以加52CV官方QQ群:928997753。
(不会时时在线,如果没能及时通过验证还请见谅)
目标检测是计算机视觉研究的热点,52CV曾报道多篇相关博文,详见:
新年快乐!"我爱计算机视觉"干货集锦与新年展望
长按关注我爱计算机视觉
麻烦给我一个好看!
实用教程!使用YOLOv3训练自己数据的目标检测相关推荐
- 使用自己的数据训练MobileNet SSD v2目标检测--TensorFlow object detection
使用自己的数据训练MobileNet SSD v2目标检测--TensorFlow object detection 1. 配置 1.1 下载models-1.12.0 2. 准备数据集 3. 配置文 ...
- 大连理工IIAU Lab提出SSLSOD:自监督预训练的RGB-D显著性目标检测模型(AAAI 22)
作者丨Lart 编辑丨极市平台 导读 本文在显著性目标检测任务(SOD)中,首次引入自监督预训练.凭借提出的有效的前置任务(pretext task),在仅使用少量无标签的RGB-D数据进行预训练的情 ...
- 5. 使用PyTorch预先训练的模型执行目标检测
5. 使用PyTorch预先训练的网络执行目标检测 PyTorch是什么? 使用PyTorch训练第一个神经网络 使用PyTorch训练第一个卷积神经网络 使用预训练网络进行PyTorch图像分类 使 ...
- 使用opencv训练cascade分类器进行目标检测
文章目录 0.建立训练目录 1.建立正负样本 2.生成正负样本的txt文件 3.生成 pos.vec描述文件 4.训练cascade分类器 5.目标检测 总结 0.建立训练目录 文件夹: train/ ...
- 处理激光雷达数据实现目标检测的方法
处理激光雷达数据实现目标检测的方法 1.三维数据的精确性和匿名性 1.音乐节现场人数如何检测? 2.需要考虑哪些方面? 4.关于点云对象的壳体与边框 5.人们会怎么移动? 6.结果:以列表形式呈现 7 ...
- 文献3 基于改进型YOLOv3的SAR图像舰船目标检测
基于改进型YOLOv3的SAR图像舰船目标检测 0.概述 本文主要介绍了新提出的一种改进型YOLOv3的SAR图像船舰目标检测方法,此方法依据船舰尺寸与形状自适应采样的可变形卷积.ResNet50变体 ...
- ssd目标检测训练自己的数据_目标检测Tensorflow object detection API之训练自己的数据集...
构建自己的模型之前,推荐先跑一下Tensorflow object detection API的demo JustDoIT:目标检测Tensorflow object detection APIzh ...
- 改进YOLOv3 | IA-YOLO让恶劣天气的目标检测起飞了!!!
点击上方"3D视觉工坊",选择"星标" 干货第一时间送达 作者丨ChaucerG 来源丨 集智书童 虽然基于深度学习的目标检测方法在传统数据集上取得了良好的效果 ...
- 动动手,用TensorFlow API训练出自己的目标检测模型
TensorFlow内包含了一个强大的物体检测API,我们可以利用这API来训练自己的数据集实现特殊的目标检测. Dat Tran就分享了自己实现可爱的浣熊检测器的经历,在文章中作者把检测器的训练流程 ...
最新文章
- GraphQL的query:一个最简单的例子
- 关于元素绝对定位的父元素问题
- 一个人成就的高低,努力程度只是标配
- iOS开展-CocoaPods安装和使用教程
- 计算机网络中sep是什么意思,SEP系统介绍及实施方案介绍.ppt
- SkeyeARS 全景AR增强监视系统解决方案
- java word导出表格_Java实现word导出(表格带图片)
- NVIDIA GPU 运算能力列表
- 电脑如何长截屏截图_持续集成截屏视频-DNRTV上的Jay Flowers和I
- unity关于中文字体显示问题
- android清单文件的作用,Android 清单文件
- 为什么需要使用云计算技术?
- 关于 geodesic distance 的通俗解释
- 武汉 华为 android,【武汉华为手机大全】武汉华为手机报价及图片大全-列表版-ZOL中关村在线...
- 2022-2028全球聚乙交酯(PGA)行业调研及趋势分析报告
- 为什么要学习 Netty?
- python爬虫基础(二)
- 应届毕业生如何快速找到Java开发工作?
- unigui发布_UniGui安装(01)
- nginx 资源动静分离
热门文章
- SpringMVC简单小案例
- 在过程中要正式批准可交付成果_邛海—螺髻山风景名胜区邛海西岸详细规划》获国家林草局批准执行...
- 帆软 JAVA扩展_java报表开发工具FineReport教程之报表设计:单元格扩展
- 副本验证失败,指定域文件复制服务(FRS)复制SYSVOL共享。FRS弃用。
- 本科计算机专业学物理力学吗,力学专业
- mybaits延迟加载原理_Nginx缓存原理及机制
- android 控件宽度自适应_Android中让图片自适应控件的大小的方法
- java后台用 requset对象 存储值 前台获取不到_springmvc form表单提交后台对象获取不到值(解决)...
- mysql如何导出word_SQL导出为Word
- 球球大作战显示中国服务器较差,球球大作战延迟卡顿原因分析及解决方法