YOLO 训练

本文详细介绍YOLOv1-v2目标检测模型的训练流程,包括数据集准备、模型配置修改、训练启动等步骤,并提供关键参数计算方法。

官网yolov1:http://pjreddie.com/darknet/yolov1/

官网yolov2:http://pjreddie.com/darknet/yolo/

github yolo:https://github.com/pjreddie/darknet


yolo训练要有自己的一套方式,先说说label要怎么弄。

1 标签和数据的格式

首先看看标签和数据的格式

输入图片说明

数据放在images中,这个文件夹名字可以随便起,但是注意,labels这个文件夹一定不能改。这个yolo会自动找到这个文件夹里面标好的数据的。

然后进入labels这个文件夹

输入图片说明

我们分析一下这个文件夹里面的内容

输入图片说明

标签的格式是:

类别    框的中心点X方向/图像宽    框的中心点Y方向/图像高    框宽/图像宽    框高/图像高
class_number    box2_x1_ratio    box2_y1_ratio    box2_width_ratio    box2_height_ratio

具体计算看一看scripts/voc_label.py的源码

# size :width height     box: xmin xmax ymin ymax
def convert(size, box):
    dw = 1./size[0]
    dh = 1./size[1]
    x = (box[0] + box[1])/2.0
    y = (box[2] + box[3])/2.0
    w = box[1] - box[0]
    h = box[3] - box[2]
    x = x*dw
    w = w*dw
    y = y*dh
    h = h*dh
    return (x,y,w,h)

2 修改yolo.c

然后要改yolo.c文件中的类别数目,修改train.txt路径到自己的train.txt,**注意下,train.txt里面只需要写图片的路径就可以了,每行一张图片路径,用的是绝对路径,相对路径还没有用过,不知道行不行。

char *train_images = "/data/voc/train.txt";
char *backup_directory = "/home/pjreddie/backup/";

然后找到这个函数

    draw_detections(im, l.side*l.side*l.n, thresh, boxes, probs, voc_names, alphabet, CLASSNUM);

最后的classnum改成自己的类型数目。

3 修改yolo_kernels.cu

yolo_kernels.cu文件中 找到这个函数

    draw_detections(det, l.side*l.side*l.n, demo_thresh, boxes, probs, voc_names, voc_labels, CLS_NUM);

改变最后的cls_num为自己的类型数目。

4 修改cfg

最后要改的就是yolo2.cfg 或者是yolo.cfg,看你用哪个,不过这个都是yolov1的。

切记一点,在两个文件的最末端

[connected]
output= 931
activation=linear

[detection]
classes=4
coords=4
rescore=1
side=7
num=3
softmax=0
sqrt=1
jitter=.2

output 是需要重新计算的,如果不重新计算会报一个问题

Assertion `side*side*((1 + l.coords)*l.n + l.classes) == inputs' failed.

而这个output值的计算如上面这个错误

  • side=7
  • l.coords = coords
  • l.n = num
  • l.classes = classes

output = 7*7*((1+coords)*num+classes)

这个classes需要改成自己的类别数目。

如果要用yolov2的进行训练的话,那么需要重新计算最后一层的filter

[convolutional]
size=1
stride=1
pad=1
filters=425
activation=linear

[region]
anchors = 0.738768,0.874946,  2.42204,2.65704,  4.30971,7.04493,  10.246,4.59428,  12.6868,11.8741
bias_match=1
classes=80
coords=4
num=5
softmax=1
jitter=.2
rescore=1

object_scale=5
noobject_scale=1
class_scale=1
coord_scale=1

filter的计算公式为

    filters = num*(classes+coords+1)

5 训练

去官网下载extraction.conv.weights,当然也可以自己重新计算extraction.conv.weights, 过程就不详细叙述了,可以去官网自己看看。最后就可以愉快的运行训练了。

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

截图留念

输入图片说明

最后给出一个不错的blog,YOLO2 如何fine tunning

转载于:https://my.oschina.net/u/1046919/blog/801132

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值