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训练自己的数据全流程相关推荐

  1. android 自动重启测试,检测Android系统重启并生成测试用例的方法与流程

    本发明涉及软件技术领域,特别是一种检测Android系统重启并生成测试用例的方法. 背景技术: 目前安卓智能设备的功能越来越多,例如安卓智能电视或安卓智能盒子等,而在不同功能间交叉操作有概率触发And ...

  2. android跌倒检测,Android跌倒检测

    我正在使用加速度传感器实现跌倒检测,并创建以下代码. public void onSensorChanged(SensorEvent foEvent) { if (foEvent.sensor.get ...

  3. alexeyab darknet 编译_【目标检测实战】Darknet—yolov3模型训练(VOC数据集)

    原文发表在:语雀文档 0.前言 本文为Darknet框架下,利用官方VOC数据集的yolov3模型训练,训练环境为:Ubuntu18.04下的GPU训练,cuda版本10.0:cudnn版本7.6.5 ...

  4. yolov3为什么对大目标检测不好_基于改进Yolov3的目标检测的研究

    晏世武 罗金良 严庆 摘要:目标检测在视频监控.无人驾驶系统.机械自动化等领域起着重要作用.在如今大数据的背景下,为进一步提高Yolov3在不同数据集下的性能,本文以KITTI数据集为基础,利用重新調 ...

  5. 目标检测-基于Pytorch实现Yolov3(1)- 搭建模型

    原文地址:https://www.cnblogs.com/jacklu/p/9853599.html 本人前段时间在T厂做了目标检测的项目,对一些目标检测框架也有了一定理解.其中Yolov3速度非常快 ...

  6. DL之Yolov3:基于深度学习Yolov3算法实现视频目标检测之对《我要打篮球》视频段进行实时目标检测

    DL之Yolov3:基于深度学习Yolov3算法实现视频目标检测之对<我要打篮球>视频段进行实时目标检测 目录 输出结果 设计思路 核心代码 相关文章 成功解决AttributeError ...

  7. yolov3为什么对大目标检测不好_从YOLOv1到YOLOv3,目标检测的进化之路

    引言:如今基于深度学习的目标检测已经逐渐成为自动驾驶,视频监控,机械加工,智能机器人等领域的核心技术,而现存的大多数精度高的目标检测算法,速度较慢,无法适应工业界对于目标检测实时性的需求,这时YOLO ...

  8. yolov3为什么对大目标检测不好_【目标检测简史】进击的YOLOv3,目标检测网络的巅峰之作...

    YOLOv3的前世今生 2013年,R-CNN横空出世,目标检测DL世代大幕拉开. 各路豪杰快速迭代,陆续有了SPP,fast,faster版本,至R-FCN,速度与精度齐飞,区域推荐类网络大放异彩. ...

  9. 深度学习之目标检测(九)--YOLOv3 SPP理论介绍

    深度学习之目标检测(九)-- YOLOv3 SPP理论介绍 深度学习之目标检测(九)YOLOv3 SPP理论介绍 1. Mosaic 图像增强 2. SPP 模块 3. CIoU Loss 3.1 I ...

最新文章

  1. java中匿名内部类详解_java 中匿名内部类的实例详解
  2. Spring发展历程总结
  3. 数据库查询字段为空时,返回0
  4. 【Mac】mac 安装 prometheus 报错 prometheus: prometheus: cannot execute binary file
  5. 利用UIScrollView和UIPageControl实现图片切换
  6. (翻译)Entity Framework技巧系列之一 - Tip 1 - 5
  7. SpringSecurity入门到入土教程_1
  8. TCP的几个状态对于我们分析所起的作用SYN, FIN, ACK, PSH,
  9. 网格法对随机森林调参
  10. 各个平台下 Perl 源码安装教程
  11. ACCESS-入门思维导图
  12. 进击ReactNative-疾如风
  13. 计算机应用基础IE浏览器设置,计算机应用基础IE浏览器设置学习笔记.docx
  14. QoS服务质量二令牌桶算法及QoS业务分类
  15. 小程序--时间处理(显示几分钟前,,几小时前,,几天前...)
  16. 【程序设计训练】3-15 公交系统
  17. 互联网协议 — TCP — 报文格式
  18. #高级语言 各种开发软件介绍
  19. oracle怎么赋予系统权限,讲解Oracle系统中用户权限的赋予和查看
  20. 浙江医改破题看病难 省市级医院高峰排队时间缩至4分钟

热门文章

  1. 中信国健临床通讯2011年1月第1期目录
  2. 信息系统工程监理服务及营销策略
  3. 完全清除一个带包的项目文件的方法
  4. C语言——判断是该年的第几天
  5. OJ1065: 统计数字字符的个数(C语言)
  6. 借教室(洛谷-P1083)
  7. C++语言基础 —— STL —— 容器与迭代器 —— list 与 deque
  8. Linux 日志系统
  9. 矩阵加法(信息学奥赛一本通-T1124)
  10. 信息学奥赛一本通C++语言——1020: 打印ASCII码