美文网首页YOLO
YOLO 训练自己的数据

YOLO 训练自己的数据

作者: Vivian_yolo | 来源:发表于2017-04-01 16:57 被阅读0次

YOU ONLY LOOK ONCE

YOU ONLY LOOK ONCE

相关链接:http://guanghan.info/blog/en/my-works/train-yolo/

本文是在宁广涵博客的基础上,添加一些自己在训练中遇到的问题及解决方式,仅供学习与参考,同时也通过这样的方式把训练过程记录下来,方便自己下次训练。

宁广涵已将Gihub上的源文件做了一些修改,可以点击下载Darknet

配置环境:Ubuntu 14.04, CPU;

1. 采集样本和注释

i. 录制一段视频,并利用Opencv对帧进行保存,这样很快就能采集上千张样本;

ii. 标记图片中目标的坐标,利用Bbox-Label-Tool比较方便;

2. 以Darknet的格式创建注释

在这一步骤,我们会产生一个darknet注释文件和一个训练列表,txt

经过BBox-Label-Tool产生的注释文件格式如下:

Class_number

Box1_x1 Box1_y1 Box1_width Box1_height

Box2_x1 Box2_y1 Box2_width Box2_height

......

经过convert.py转换之后的注释格式变为:

Class_number Box1_x1_ratio Box1_y1_ratio Box1_width_ratio Box1_height_ratio

Class_number Box2_x1_ratio Box2_y1_ratio Box2_width_ratio Box2_height_ratio

请注意,每个图片都有一个注释文件,但我们只需要一个图像的训练列表,为了方便,将images和labels两个文件夹放到darknet-master/data/下;

为了方便理解,链接是生成的文件的格式示例:

转换之前格式.txt

转换之后格式.txt

训练列表格式.txt

Q:运行convert.py的时候会遇到这样的错误

windows下运行convert.py

A:将lines = txt_file.read().split('\t\n')改成lines = txt_file.read().split('\n'),主要因为linux和windows的读取方式不同,不过windows下改成这个格式也只能在图中标记一个物体,如何更好的修改这段代码,之后有时间再做调整;

3. 修改一些代码

i. 在src/yolo.c 中改变class num 和class name,还需要修改其中的读取训练列表的路径等等;

如果想要训练新的类别,为了显示正确的png标签文件,我们还需要运行data/labels/make_l abels.py 以生成新的标签,并加入到labels文件夹下;

ii. 在 ctg/yolo.cfg 文件,改变output为(5x2+number of classes)x7x7,例如,一个类别的话改为539,并且修改222行的classes为1(要训练的类别)

iii. 还需要一个pre-trained weights文件

4. 可以开始训练了,

进入darknet-master根目录,先sudo make编译一下,然后运行:

./darknet yolo train cfg/yolo.cfg extraction.conv.weights

如果幸运,你就可以开始训练了!

不过,我还是遇到了一些些问题:

cannot load image

深陷在这个bug里找不到出路,最后终于在vim 训练列表文件的时候发现了:

要了命的bug

咦,什么时候后面多了一个^M?真是其他编辑器都没有发现这个问题,只有vim显示出来了,怪不得图片加载不了...

vim下 :%s/^M//g 或者 :1,$s/^M//g 均可

补充一点: ^M是使用 "CTRL-V CTRL-M" 而不是字面上的 ^M

最后,可以开始训练了,因为刚刚训练上就敲了这篇文档,只是中间个效果成截图:

训练过程

我也很紧张,不知道最后能不能训练出模型,不过听说没有GPU的情况下要训练很久,不过就当是熟悉一下配置训练过程啦...把训练过程及时记录下来,方便下次的训练...小编是菜鸟,一周的努力才调通这个训练过程...不过

相关文章

网友评论

    本文标题:YOLO 训练自己的数据

    本文链接:https://www.haomeiwen.com/subject/mcbiottx.html