YOLOV2参数详解

来源:互联网 发布:mysql与sqlserver区别 编辑:程序博客网 时间:2024/06/05 15:07

原博客:http://blog.csdn.net/fate_fjh/article/details/70598510

前言

You Only Look Once (YOLO) 是一个基于GoogleNet的物体检测深度网络,Real-time(实时)与Efficient(有效)一定是YOLO最大的特点与优势。YOLO与其他物体检测的深度网络思路基本相同,学习物体分类以及BoundingBox位置与大小。 
参考:https://pjreddie.com/darknet/yolo/ 
Darknet是基于C语言写的深度网络框架,好处就是相比C++简单易懂,不过对于工程化来说就显得很不友好,所以才会有很多人把YOLO移植到其他深度网络框架去。

在个人的理解下,图像语意分割深度网络当然是最好的解决方法,但是其效果与时效性一直没有很好的表现,因此在规则的物体选用物体检测,不规则的物体采用语意分割可能是目前比较好的解决方法。

YOLOv2 参数详解

对于YOLOv2的深度网络原理以及解释在网上已经有很多人给出,因此作者就对在YOLOv2中的参数进行总结,使得大家可以更好地理解与学习YOLOv2。
以tiny-yolo-voc.cfg为例子进行解释,主要讲解YOLOv2的参数,普通CNN具有的网络层参数,并不解释。

[net]batch=64subdivisions=8width=416height=416channels=3momentum=0.9decay=0.0005angle=0saturation = 1.5exposure = 1.5hue=.1learning_rate=0.001max_batches = 40100policy=stepssteps=-1,100,20000,30000scales=.1,10,.1,.1
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18

batch:每次迭代要进行训练的图片数量 
subdivisions:batch中的图片再产生子集,源码中的图片数量int imgs = net.batch * net.subdivisions * ngpus 
width:输入图片宽度, height:输入图片高度,channels :输入图片通道数

对于每次迭代训练,YOLOv2会基于角度(angle),饱和度(saturation),曝光(exposure),色调(hue)产生新的训练图片 
angle:图片角度变化,单位为度,假如angle=5,就是生成新图片的时候随机旋转-5~5度 
saturation & exposure: 饱和度与曝光变化大小,tiny-yolo-voc.cfg中1到1.5倍,以及1/1.5~1倍 
hue:色调变化范围,tiny-yolo-voc.cfg中-0.1~0.1 
max_batches:最大迭代次数 
其余的为CNN学习参数,不予解释

[region]anchors = 1.08,1.19,  3.42,4.41,  6.63,11.38,  9.42,5.11,  16.62,10.52bias_match=1classes=20coords=4num=5softmax=1jitter=.2rescore=1object_scale=5noobject_scale=1class_scale=1coord_scale=1absolute=1thresh = .6random=1
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18

虽然region(YOLOv1的detection)在最后一层,但是很多参数都是一开始就载入使用的,尤其是对于图片数据处理的参数 
classes:类别数量 
coords:BoundingBox的tx,ty,tw,th,tx与ty是相对于左上角的gird,同时是当前grid的比例,tw与th是宽度与高度取对数 
num:每个grid预测的BoundingBox个数 
jitter:利用数据抖动产生更多数据,YOLOv2中使用的是crop,filp,以及net层的angle,flip是随机的,crop就是jitter的参数,tiny-yolo-voc.cfg中jitter=.2,就是在0~0.2中进行crop 
anchors:预测框的初始宽高,第一个是w,第二个是h,总数量是num*2,YOLOv2作者说anchors是使用K-MEANS获得,其实就是计算出哪种类型的框比较多,可以增加收敛速度,如果不设置anchors,默认是0.5,还有就是anchors读入参数中名字是biases 
这里有一个计算样本anchors的Python脚本,anchors生成脚本 
bias_match:如果为1,计算best iou时,预测宽高强制与anchors一致 
softmax:如果为1,使用softmax 
rescore:决定使用哪种方式计算IOU的误差,为1时,使用当前best iou计算,为0时,使用1计算 
object_scale & noobject_scale & class_scale & coord_scale:YOLOv1论文中cost function的权重,哪一个更大,每一次更新权重的时候,对应方面的权重更新相对比重更大 
thresh:决定是否需要计算IOU误差的参数,大于thresh,IOU误差不会夹在cost function中 
random:如果为1每次迭代图片大小随机从320到608,步长为32,如果为0,每次训练大小与输入大小一致