文档章节

YOLO 训练

KyJason
 KyJason
发布于 2016/12/06 22:49
字数 721
阅读 447
收藏 1

官网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

© 著作权归作者所有

共有 人打赏支持
KyJason
粉丝 11
博文 66
码字总数 46289
作品 0
杭州
程序员
私信 提问
目标检测:YOLO

1.官网教程的翻译,重点是微调和继续训练部分 http://www.jianshu.com/p/ebce76db119b 2.使用YOLO训练自己的数据样本经验总结,重点是训练输出参数的介绍以及如何跟踪查看代码 http://blog....

lilai619
2017/04/21
0
0
Yolo系列其二:Yolo_v2

介绍 相信SSD的横空出世委实给了Yolo许多压力。在目标检测准确性上Yolo本来就弱于Faster-RCNN,它的提出之初就主打其能保持一定检测准确性的同时实现更快乃至实时的速度。可同一年SSD的出现表...

manofmountain
2018/07/28
0
0
YOLO升级版:YOLOv2和YOLO9000解析

论文笔记:YOLO9000: Better, Faster, Stronger;官方网站 评论:YOLO是基于深度学习方法的端到端实时目标检测系统(YOLO:实时快速目标检测)。YOLO的升级版有两种:YOLOv2和YOLO9000。作者...

狗头山人七
2017/01/31
0
0
YOLO论文翻译——中文版

文章作者:Tyan 博客:noahsnail.com | CSDN | 简书 声明:作者翻译论文仅为学习,如有侵权请联系作者删除博文,谢谢! You Only Look Once: Unified, Real-Time Object Detection 摘要 我们...

Quincuntial
2017/11/29
0
0
【目标检测】yolo论文详解(You Only Look Once: Unified, Real-Time Object Detection)

论文原文:https://arxiv.org/abs/1506.02640 一、简介 YOLO(you only look once)是继RCNN、faster-RCNN之后,又一里程碑式的目标检测算法。yolo在保持不错的准确度的情况下,解决了当时基...

李文豪
2018/11/30
0
0

没有更多内容

加载失败,请刷新页面

加载更多

多命令链命令参数

Commands: --install <link> <name> <path> <priority> [--slave <link> <name> <path>] ... 在系统中加入一组替换项. --remove <name> <path> 从 <名......

Pulsar-V
26分钟前
0
0
【转】go get命令使用socket代理

由于某些不可描述的原因,国内使用go get命令安装某些包的时候会超时导致失败,比如net包、sys包、tools包等。第一种解决办法就是自己从git上下载后添加链接到GOPATH中,比如: 1234...

yiduwangkai
27分钟前
0
0
Windows同步对象Event和Linux的条件变量

最近在看一些同步对象模拟的东东,特别对在Windows下如何模拟条件变量折腾了很久。 1 Windows同步对象Event 微软有一个很有意思的同步对象,某种程度上和Linux的条件变量很相似。但秉承微软一...

shzwork
35分钟前
1
0
从上往下打印出二叉树的每个节点,同层节点从左至右打印。

//第一种做法 public class Solution { public ArrayList<Integer> PrintFromTopToBottom(TreeNode root) { ArrayList <Integer> li=new ArrayList<Integer>(); ArrayList <TreeN......

南桥北木
45分钟前
1
0
linux 服务管理 Crontba、Ntpdate、Logrotate、Supervisor

crond linux 系统则是由 cron (crond) 这个系统服务来控制的。Linux 系统上面原本就有非常多的计划性工作,因此这个系统服务是默认启动的。 另外, 由于使用者自己也可以设置计划任务,所以,...

狼王黄师傅
今天
3
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部