在YOLO2中增加自己的物体识别(二)

在上一篇在YOLO2中增加自己的物体识别(一)中我们已经得到了一个图像集,在你的Images/myobject目录下, 一个对该图像集的标注信息,在你的outpath目录下, 现在把这2个目录下的jpeg和txt文件合并到一个文件夹,我这里是放到darkne目录下的data\myobject目录下, 下一步我们就要配置YOLO来进行训练了。

二、配置YOLO

YOLO的配置主要为3个文件myobj.data, myobj.name, myobj.cfg.

1. myobj.data

我的myobj.data内容如下
classes= 1
train = data/myobject/train.txt
valid = data/myobject/test.txt
names = data/myobject/myobj.names
backup = backup
classes为你要detect的目标种类个数, 检测一种的话就是1。 train指向一个txt文件,用于描述训练时用哪些图片进行训练。 valid用于描述测试时用哪些图片进行测试。这两个文件可以使用如下脚本生成

import glob, os

# Current directory
current_dir = os.path.dirname(os.path.abspath(__file__))

# 图片的存储目录
path_data = 'data/myobject/'

# Percentage of images to be used for the test set
percentage_test = 10;

# Create and/or truncate train.txt and test.txt
file_train = open('train.txt', 'w')
file_test = open('test.txt', 'w')

# Populate train.txt and test.txt
counter = 1
index_test = round(100 / percentage_test)
for pathAndFilename in glob.iglob(os.path.join(current_dir, "*.jpg")):
    title, ext = os.path.splitext(os.path.basename(pathAndFilename))
    #file = open(title + '.txt', 'w')
    #file.write('0 0.5 0.5 1 1')
    #file.close()

    if counter == index_test:
        counter = 1
        file_test.write(path_data + title + '.jpg' + "\n")
    else:
        file_train.write(path_data + title + '.jpg' + "\n")
        counter = counter + 1

把该脚本放到data/myobject目录下,然后执行,就会在该目录生成2个txt文件。

2.myobj.names

这个文件只有一行,也就是你要检测物体的名称, 他会在检测完后显示在图片上,每行对应一种物体。我们这里是myobj

3.myobj.cfg

这个文件用于描述网络结构, 我们可以直接拿cfg/yolo-voc.cfg来使用, 不过要改几个地方.
1) batch改为合适值, 一般64,如果你内存不够的话跑起来发现内存分配失败,可以改下点,比如32,16
2)subdivisions, 与上面类似,可以试试8,4,2,越小需要内存越大。
3)classes=1
4)倒数的第一个filters=(classes + 5)*5,这里我们就是30

三、 训练YOLO

训练前我们先去YOLO官网下载已经训练好的权值文件darknet19_448.conv.23(76M)
然后运行命令./darknet detector train data/myobject/myobj.data data/myobject/myobj.cfg darknet19_448.conv.23
默认情况下,每1000次会将训练好的权值存放到backup/myobj_1000.weights文件里, 所以下次开始训练时,可以从上一次训练结果中继续训练,命令如下
./darknet detector train data/myobject/myobj.data data/myobject/myobj.cfg backup/myobj_2000.weights, 这里我们从第2000次开始继续进行训练。

四、何时停止训练

请戳这里搬运工, 一般来讲2000次左右基本就够了, 当然如果你要更好的精度,那么需要观察avg这个值的变化, 如果这个值基本不再变小,那么训练就可以停止了。此时,你需要观察前几次的avg的值,选出几个最小的,然后根据avg最前面的数字,找到对应backup目录下的权值文件,之后执行如下命令
darknet detector recall data/myobject/myobj.data data/myobject/myobj.cfg backup\yolo-obj_XXXX.weights
根据输出IOU和Recall 值, 找到最好的weight文件。一般IOU越大越好,Recall也是越大越好。

五、小结

到这里我们已经可以使用YOLO对某一类物体进行检测了, 在此感谢国外友人Nils Tijtgat
的文章, 另:CPU跑慢的要死,一次要10分钟, 我看国外那哥们的贴图,只要2s, 喵生灰暗。想把darknet在GPU上运行,请戳这里。除了Bbox-lable-tool外,这里还有个YoloMark也可以用于bbox的生成,大家有兴趣可以看看。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值