yolov3目标检测android,目标检测 | YOLOv3训练自己的数据全流程
1.构建YOLOv3网络的cfg文件
该文件表示的是你的检测网络的结构,类似caffe的prototxt文件。
YOLOv3的cfg文件
上篇介绍YOLOv3网络中提到的去掉上采样操作的YOLOv3cfg文件
2.准备hs.data文件
如下文件中规定了当前目标检测网络中的类别数量为4。训练数据的路径train.txt的位置,hs.names的路径的位置,以及最终训练得到的网络模型保存的位置。
classes = 4
train = /home/yuanlei/darknet_yolov3/backup/yolov3_initial/4_cls/train.txt
names = /home/yuanlei/darknet_yolov3/backup/yolov3_initial/4_cls/hs.names
backup = /home/yuanlei/darknet_yolov3/backup/yolov3_initial/4_cls
train.txt文件
train.txt文件中的内容如下图所示,保存的是训练数据集图片的保存路径。
/home/yuanlei/traindata_4cls/0.jpg
/home/yuanlei/traindata_4cls/1.jpg
/home/yuanlei/traindata_4cls/2.jpg
/home/yuanlei/traindata_4cls/3.jpg
...
...
/home/yuanlei/traindata_4cls/1000.jpg
/home/yuanlei/traindata_4cls/1001.jpg
...
hs.names文件
hs.names中的内容如下图所示,保存的是当前检测网络中需要检测的类别名称,用于后续显示。
people
car
bicycle
truck
3.训练数据准备
训练数据的保存位置要和步骤2中的train.txt文件中的路径对应起来,当然除了train.txt中的图片数据,我们还需要准备基于对应图片的目标位置和类别数据,也就是图片对应的标签文件,具体存放方式如下。
而上图中的txt文件中的格式如下:
每一行代表了当前图片中的一个目标,每一行数据由5个字段组成,第一个字段表示了当前目标的类别,0:people, 1:car, 2:bicycly, 3.truck和上述的hs.names文件相对应。而第二,三字段表示了在全图中当前目标的中心点位置,第四,五字段表示了在全图中当前目标的宽,高。我们可以看到这四个字段都是小于1的,因为都是以全图的宽高的百分比来表示的(回归网络训练时会更加容易收敛)。
如下所示的代码可以用来解析jpg,txt文件,从大图中根据标签数据把小图抠出来,这段代码对YOLOv3网络的训练没有用处,把这段代码放在这里就是让大家对txt文件中的字段有更清晰的理解。
from PIL import Image
img = Image.open("0.jpg")
width = img.size[0]
height = img.size[1]
with open("0.txt") as f:
lines = f.readlines()
for line in lines:
center_width = int(width * float(line.split(" ")[1]))
center_height = int(height * float(line.split(" ")[2]))
patch_width = int(width * float(line.split(" ")[3]))
patch_height = int(height * float(line.split(" ")[4]))
left_top_width = center_width - patch_width/2
left_top_height = center_height - patch_width/2
right_down_width = center_width + patch_width/2
right_down_height = center_height + patch_width/2
pic = img.crop(box=(left_top_width,left_top_height,right_down_width,right_down_height))
pic.show()
4.若有预训练权重,准备预训练权重
如果需要预训练权重,就重网上下载和cfg文件相对应的权重文件,并保存到/home/yuanlei/darknet_yolov3/backup/yolov3_initial/pretrain/yolov3.weights路径下边即可。
5.构建train.sh批处理脚本
批处理脚本如下所示,要训练检测网络,主要使用的两个字段为detetor,train,以及一些必须的路径,如cfg,weights等路径。darknet中的主函数会解析给定的字段,进行训练,本文不展开讲,后续会专门这对这个过程写一篇文章。
cfg_dir = /home/yuanlei/darknet_yolov3 \
root_dir = /home/yuanlei/darknet_yolov3 \
$root_dir/darknet \
detector \
train \
$cfg_dir/backup/yolov3_initial/4_cls/hs.data \
$cfg_dir/backup/yolov3_initial/4_cls/yolov3_initial.cfg \
$cfg_dir/backup/yolov3_initial/pretrain/yolov3.weights
8.在命令行运行sh train.sh开始训练YOLOv3网络
在命令行输入sh train.sh,就可以开始训练了,至此利用YOLOv3训练自己的数据集全部完成~
9.训练过程中打印出的log的含义
如下的代码所示,网络训练过程中,每一个batch都会打印如下所示的信息。需要注意的是原始的基于darknet框架的YOLOv3网络并不会打印出l.batch 16, l.h 11, l.w 20, l.n 3此类信息,这是我为了便于理解,在源码中添加后让其打印出来的。
Loaded: 0.000045 seconds
l.batch 16, l.h 11, l.w 20, l.n 3
Region 71 Avg IOU: 0.1578377, Class:0.329731, Obj: 0.614276, No Obj: 0.497656, .5R: 0.090909, .75R: 0.000000, count: 11
l.batch 16, l.h 22, l.w 40, l.n 3
Region 79 Avg IOU: 0.172776, Class:0.443888, Obj: 0.514122, No Obj: 0.489635, .5R: 0.052632, .75R: 0.000000, count: 19
l.batch 16, l.h 44, l.w 80, l.n 3
Region 87 Avg IOU: 0.169250, Class:0.485123, Obj: 0.664770, No Obj: 0.4577785, .5R: 0.102564, .75R: 0.000000, count: 39
l.batch 16, l.h 11, l.w 20, l.n 3
Region 71 Avg IOU: 0.159549, Class:0.464980, Obj: 0.487730, No Obj: 0.496075, .5R: 0.000000, .75R: 0.000000, count: 10
l.batch 16, l.h 22, l.w 40, l.n 3
Region 79 Avg IOU: 0.210336, Class:0.425438, Obj: 0.47328, No Obj: 0.489249, .5R: 0.095238, .75R: 0.000000, count: 21
l.batch 16, l.h 44, l.w 80, l.n 3
Region 87 Avg IOU: 0.144593, Class:0.413408, Obj: 0.617854, No Obj: 0.4457386, .5R: 0.000000, .75R: 0.000000, count: 53
8666434: 1440.400757, 1468.966187 avg, 0.000050 rate, 3.923887 seconds, 27725888 images
输出log中,分为两部分,这主要基于cfg文件中的batch=32,subdivisions=2,所以第一部分用到了16张图,第二部分用到了另外16张图。而任意部分中输出了三块,其中每一块代表了一种特征图上的detection结果,利用我打印出来的l.batch 16, l.h 11, l.w 20, l.n 3语句能更好的区分每一小块代表的是哪种尺度的detection。
10.cfg参数介绍
简单介绍下cfg文件中的一些参数:
实际batchsize为16
batch=32
subdivisions=2
相关增强操作
angle=0
saturation = 1.5
exposure = 1.5
hue=.1
优化策略
利用step策略,分为三个阶段下降,用steps参数控制何时下降,由scales参数控制每次学习率变化时相乘的系数。
policy=steps
steps=866633,876633,896633
scales=10,.5,.2
特殊参数burn_in
当update_num小于burn_in时,不是使用配置的学习速率更新策略,而是按照公式lr = base_lr * power(batch_num/burn_in,pwr)更新。其背后的假设是:全局最优点就在网络初始位置附近,所以训练开始后的burn_in次更新,学习速率从小到大变化。update次数超过burn_in后,采用配置的学习速率更新策略从大到小变化,显然在finetune时可以尝试使用该参数。
burn_in=200
yolo层中的参数
[yolo]
mask = 6,7,8
anchors = 10,13, 16,30, 33,23, 30,61, 62,45, 59,119, 116,90, 156,198, 373,326
classes=4
num=9
jitter=.3
ignore_thresh = .5
truth_thresh = 1
random=0
mask
该参数用于确定当前尺度的detection使用哪三个anchor,6,7,8表示使用最后三组尺度大的anchor,其余类推。
anchors = 10,13, 16,30, 33,23, 30,61, 62,45, 59,119, 116,90, 156,198, 373,326
mask = 6,7,8
mask = 4,5,6
mask = 1,2,3
random
random为1时会启用Multi-Scale Training,随机使用不同尺寸的图片进行训练,如果为0,每次训练大小与输入大小一致;
jitter
通过抖动增加噪声来抑制过拟合
add:批量测试数据
在detector.c函数中新增如下所示函数:
批量测试源码
并用如下所示的脚本进行测试,其中text中是文件的绝对路径,results是检测结果保存位置。
cfg_dir = /home/yuanlei/darknet_yolov3 \
root_dir = /home/yuanlei/darknet_yolov3 \
$root_dir/darknet \
detector \
test \
$cfg_dir/backup/yolov3_initial/4_cls/hs.data \
$cfg_dir/backup/yolov3_initial/4_cls/yolov3_initial.cfg \
$cfg_dir/backup/yolov3_initial/pretrain/yolov3.weights \
$cfg_dir/backup/yolov3_initial/test.txt \
-out $cfg_dir/backup/yolov3_initial/results\
yolov3目标检测android,目标检测 | YOLOv3训练自己的数据全流程相关推荐
- android 自动重启测试,检测Android系统重启并生成测试用例的方法与流程
本发明涉及软件技术领域,特别是一种检测Android系统重启并生成测试用例的方法. 背景技术: 目前安卓智能设备的功能越来越多,例如安卓智能电视或安卓智能盒子等,而在不同功能间交叉操作有概率触发And ...
- android跌倒检测,Android跌倒检测
我正在使用加速度传感器实现跌倒检测,并创建以下代码. public void onSensorChanged(SensorEvent foEvent) { if (foEvent.sensor.get ...
- alexeyab darknet 编译_【目标检测实战】Darknet—yolov3模型训练(VOC数据集)
原文发表在:语雀文档 0.前言 本文为Darknet框架下,利用官方VOC数据集的yolov3模型训练,训练环境为:Ubuntu18.04下的GPU训练,cuda版本10.0:cudnn版本7.6.5 ...
- yolov3为什么对大目标检测不好_基于改进Yolov3的目标检测的研究
晏世武 罗金良 严庆 摘要:目标检测在视频监控.无人驾驶系统.机械自动化等领域起着重要作用.在如今大数据的背景下,为进一步提高Yolov3在不同数据集下的性能,本文以KITTI数据集为基础,利用重新調 ...
- 目标检测-基于Pytorch实现Yolov3(1)- 搭建模型
原文地址:https://www.cnblogs.com/jacklu/p/9853599.html 本人前段时间在T厂做了目标检测的项目,对一些目标检测框架也有了一定理解.其中Yolov3速度非常快 ...
- DL之Yolov3:基于深度学习Yolov3算法实现视频目标检测之对《我要打篮球》视频段进行实时目标检测
DL之Yolov3:基于深度学习Yolov3算法实现视频目标检测之对<我要打篮球>视频段进行实时目标检测 目录 输出结果 设计思路 核心代码 相关文章 成功解决AttributeError ...
- yolov3为什么对大目标检测不好_从YOLOv1到YOLOv3,目标检测的进化之路
引言:如今基于深度学习的目标检测已经逐渐成为自动驾驶,视频监控,机械加工,智能机器人等领域的核心技术,而现存的大多数精度高的目标检测算法,速度较慢,无法适应工业界对于目标检测实时性的需求,这时YOLO ...
- yolov3为什么对大目标检测不好_【目标检测简史】进击的YOLOv3,目标检测网络的巅峰之作...
YOLOv3的前世今生 2013年,R-CNN横空出世,目标检测DL世代大幕拉开. 各路豪杰快速迭代,陆续有了SPP,fast,faster版本,至R-FCN,速度与精度齐飞,区域推荐类网络大放异彩. ...
- 深度学习之目标检测(九)--YOLOv3 SPP理论介绍
深度学习之目标检测(九)-- YOLOv3 SPP理论介绍 深度学习之目标检测(九)YOLOv3 SPP理论介绍 1. Mosaic 图像增强 2. SPP 模块 3. CIoU Loss 3.1 I ...
最新文章
- java中匿名内部类详解_java 中匿名内部类的实例详解
- Spring发展历程总结
- 数据库查询字段为空时,返回0
- 【Mac】mac 安装 prometheus 报错 prometheus: prometheus: cannot execute binary file
- 利用UIScrollView和UIPageControl实现图片切换
- (翻译)Entity Framework技巧系列之一 - Tip 1 - 5
- SpringSecurity入门到入土教程_1
- TCP的几个状态对于我们分析所起的作用SYN, FIN, ACK, PSH,
- 网格法对随机森林调参
- 各个平台下 Perl 源码安装教程
- ACCESS-入门思维导图
- 进击ReactNative-疾如风
- 计算机应用基础IE浏览器设置,计算机应用基础IE浏览器设置学习笔记.docx
- QoS服务质量二令牌桶算法及QoS业务分类
- 小程序--时间处理(显示几分钟前,,几小时前,,几天前...)
- 【程序设计训练】3-15 公交系统
- 互联网协议 — TCP — 报文格式
- #高级语言 各种开发软件介绍
- oracle怎么赋予系统权限,讲解Oracle系统中用户权限的赋予和查看
- 浙江医改破题看病难 省市级医院高峰排队时间缩至4分钟