YoloV4自己样本制作和训练
1 引言
上一篇文章《Windows下VS2015编译YOLOv4的两种方法,以及__func__未定义问题的解决》记录了Windows下YoloV4编译涉及到的问题。
YOLO作者附带了几个权重文件可供下载,包含了日常常见的物体,可以直接用来测试和识别,但如果希望识别我们所指定的物体,那就需要自己制作样本和训练了,本文记录自己制作样本、标注样本、训练样本的过程。
2 下载
标注和训练前,需要下载几个文件:
样本标注软件:yolo_mark,下载源码后自己用VS编译。
预训练权重文件:yolov4.conv.137
3 需要准备的目录和文件
3.1 目录
YOLO作者建议放在…build\darknet\x64下,但实际上可以放在任意目录,因为这个darknet\x64目录文件太多了,所以我建了个d:\YoloV4\My目录用于放所有工作文件。
再在此目录下建立如下目录:
d:\YoloV4\My\data目录,用于放训练的数据文件。
d:\YoloV4\My\data\obj目录,用于存放训练样本图片。
d:\YoloV4\My\Backup目录,用于训练时存放临时权重文件。
3.2 CFG文件
作用:网络配置文件,训练时和识别时都需要用到
从源码附带的yolov4-custom.cfg,拷贝一份到d:\YoloV4\My目录,然后重命名为自己的文件名,比如yolov4-my.cfg。
进行下一修改前先要确定自己要识别的物体种类个数,因为以下几个参数与此有关,我们假设classes=4类。
用文本编辑器打开yolov4-my.cfg,进行如下修改:
batch=64
subdivisions=16,作者建议,但后面发现这个值不行,我改为了subdivisions=64
max_batches=8000,这个值=classes*2000,但这个值不能小于训练图片数,也不能小于6000
steps=6400,7200,这两个值是max_batches的80%和90%。
width=416 height=416,网络尺寸,这两个值必须是32的倍数。
classes=4,文件中一共有3处需要修改,搜索classes后修改即可
filters=27, 公式filters=(classes + 5)x3,这个对应classes也一共3处,注意一定是搜索到classes后的紧邻上一个[convolutional]节的filters需要如此修改
3.3 obj.names文件
作用:物体名称文件,训练时和识别时都需要用到
在d:\YoloV4\My\data下,新建一个文本文件,重命名为obj.names(可以取自己喜欢的名字,包括扩展名,以下所有文件均可自行取名,下同),按确定的classes个数,每行写一个物体名称,例如
plane
car
bus
pizza
...
网络识别物体时的结果是物体序号,本文件序号对应行的文字即为识别物体名称。
3.4 obj.data文件
作用:训练数据文件,训练时用
在d:\YoloV4\My\data下,新建一个文本文件,重命名为obj.data,其内容为
classes = 4
train = data/train.txt
valid = data/test.txt
names = data/obj.names
backup = backup/
文件中每行的作用为:
classes:指定要训练和识别的物体种类数
train:指定训练样本描述文件的路径和文件名,见后述
valid:validation_dataset文件路径和文件名,本例未使用,这里知道这是为了减少过拟合情况的发生而提出的即可。
names:指定物体名称文件的路径和文件名
backup:用于训练时存放临时权重文件的目录
4 样本准备、标注
4.1 样本准备
准备用于标注和训练用的图片,JPG格式,统一放到d:\YoloV4\My\data\obj目录。
4.2 train.txt文件
作用:训练样本描述文件,标注和训练时用
在d:\YoloV4\My\data下,新建一个文本文件,重命名为train.txt,按以上准备好的样本,在这个文件中每行写一个图片文件的路径和名称,类似如下:
data/obj/img1.jpg
data/obj/imga.jpg
data/obj/img2.jpg
...
4.3 样本标注
以上样本和文件都准备好后,这时就要用到前面下载的yolo_mark样本标注软件了,为了方便,我们把yolo_mark.exe拷贝到d:\YoloV4\My下,然后命令行运行(或者最方便的方法:在此目录建一个mark.cmd文件,把以下文字拷贝进去,然后双击此cmd即可运行):
yolo_mark.exe data/obj data/train.txt data/obj.names
然后就可以一帧一帧图片,指定物体名,用鼠标框选了,如下图所示,这里不赘述。
标注完成后,我们会看到在样本图像保存目录下,每个图片都出现了一个同名的txt文件,里面记录的就是样本标注的结果,打开看内容大概如下:
3 0.849609 0.839583 0.111719 0.120833
3 0.130859 0.591667 0.177344 0.058333
0 0.692578 0.313889 0.042969 0.016667
1 0.685547 0.568056 0.035156 0.036111
每行对应一个标注框,含义是:
< object-class> < x_center> <y_center> < width> < height>
object-class:即物体类别序号,从0开始
<x_center><y_center>:标注框中心X和Y坐标,分别占图像宽和高的比例
< width>< height>:标注框宽高,分别占图像宽和高的比例
知道这个原理,必要时可以自己编写程序生成样本标注结果。
5 训练
以上全部准备好后,就可以开始训练了。
此时还要用到之前下载下来的yolov4.conv.137,预训练权重文件,拷贝到d:\YoloV4\My下,并在此路径下,运行以下命令(由于我们的目录不在darknet.exe所在目录,所以写全路径名)(同上最方便是建立一个cmd文件后双击运行)
D:\YoloV4\darknet-master\build\darknet\x64\darknet.exe detector train data/obj.data yolov4-my.cfg yolov4.conv.137
正常的话,就会出现如下界面,训练过程开始。
图形显示的是损失函数变化曲线,横轴为迭代次数,纵轴为损失率。平均损失率会从一千多开始,逐渐下降,开始下降的很快,如下图为我训练一个多小时后的曲线,但越往后下降越慢。
训练过程中,训练出的权重文件会生成于d:\YoloV4\My\Backup目录,训练软件每100次迭代会自动保存一次权重文件,每1000次迭代会产生一个新的权重文件,便于训练后比较最优。
训练结束的判断:通常每个类别对应2000次迭代,一般平均损失率在0.xxx,且多次迭代后基本不再变化,就差不多可以停止训练了。
训练结束后,生成的权重文件*.weights,与前述的yolov4-my.cfg、obj.names就可以用于识别了。
训练过程是一个漫长的过程,一般都需要十几甚至几十个小时,我为了测试,用200多张样本,训练4个目标,大概训练了3个多小时,迭代了1200次,Avg loss大约降到0.8,就中途停止训练了,测试了一下,已经识别的非常好了。
YoloV4自己样本制作和训练相关推荐
- 人脸检测(二)--人脸识别样本制作及训练测试
闲得没事,折腾下opencv 人脸识别,从样本制作到评估. 1.直接copy opencv里的源码,创建工程,添加opencv库,可以直接cmake源码,但我之所以自己创建工程,是想多学习,并且降低与 ...
- 人脸识别之人脸检测(二)--人脸识别样本制作及训练测试
原文:https://blog.csdn.net/app_12062011/article/details/51422604 闲得没事,折腾下opencv 人脸识别,从样本制作到评估. 1.直接cop ...
- 开篇-HOG提取训练检测+样本制作
[原文:http://www.cnblogs.com/miracled/archive/2012/05/12/2497271.html] 整体框架: 样本制作+训练+检测 - (vs2008 + op ...
- caffe安装使用、样本制作、网络修改、错误重新训练!
总的参考博客: 1.安装: 转 Windows+VS2013爆详细Caffe编译安装教程 [caffe-Windows]caffe+VS2013+Windows无GPU快速配置教程 Caffe初试(一 ...
- HOG提取训练检测+样本制作
转自 http://www.cnblogs.com/miracled/archive/2012/05/12/2497271.html 利用HOG特征训练分类器说明文档-By miracled 整体框架 ...
- 基于DRL的针对NIDS流级别对抗样本制作方法和对抗训练
Deep Reinforcement Adversarial Learning Against Botnet Evasion Attacks 摘要简介: 在针对基于ML的网络入侵检测系统(NIDS)的 ...
- 初学入门YOLOv5手势识别之制作并训练自己的数据集
随着短视频vlog时代的到来,自动驾驶技术.人脸识别门禁系统.智慧视频监控.AI机器人等贴近人们日常生活的视频信息量的暴增,视频目标检测的研究具有无比的现实研究意义与未来行业潜力.视频是由一系列具有时 ...
- 【DOTA】制作Efficientdet训练数据
[DOTA]制作Efficientdet训练数据 记录一下用Efficientdet训练DOTA数据集前的数据准备工作 文章目录 [DOTA]制作Efficientdet训练数据 1.图片整理 2.生 ...
- [caffe] 数据制作和训练
[caffe] 数据制作和训练 在使用caffe时,我们希望使用自己的数据进行训练,以下给出如何制作自己的数据.所有的数据制作都是基于imagenet的. 1.数据准备,我们需要一个train和val ...
最新文章
- 【GDAL】聊聊GDAL的数据模型(二)——Band对象
- 万豪旅享家官方商城携手神策数据,数字化礼遇更高质量的用户体验
- word2vec 构建中文词向量
- 微信小程序获取用户唯一openid,包含java
- Debugview调试视图
- 使用at任务定点执行
- 深刻揭露步态识别的“谎言”(篇一)
- MySQL下载和安装教程
- xshell 6安装教程
- flashfxp中文破解版|flashfxp v5.4绿色破解版下载免注册码(强大的fxp/ftp客户端)
- Theano安装与测试过程
- 网络工程师证书难考吗?
- 小米和联想的“骁龙”之争,首发第一,友谊第二...
- day21、3 - 防火墙HA
- 快递鸟智选物流API对接流程
- 使用UE4制作简单的局域网对战小游戏
- iOS保存视频、图片到相册
- 解决SQL Server报错:229、262、5123
- vue中beforeupdate意思_vue2 mounted,beforeUpdate,updated问题
- 微信小程序:长按复制、一键复制
热门文章
- 弹性模量、刚度、强度、硬度_51CAE_新浪博客
- Python replace() 方法
- 看新晋数字化宠儿“RPA”,如何助力人力资源业务流程自动化
- 2021 如何自学 Android,一位 5 年中大厂的 Android 老哥跟你聊聊
- 霍夫圈变换——Hough circle
- 清华郑莉C++语言程序设计学习笔记(1)- 绪论、C++简单程序设计、函数
- C++虚函数表解析 (Lawliet 修改+注释版)(附有部分网友的重要评论)
- android中如果在手机显示logo不清楚的问题
- 2021 HZNU Winter Training Day 18
- 会计学期末题库 含WORD版