前言
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=64
subdivisions=8
width=416
height=416
channels=3
momentum=0.9
decay=0.0005
angle=0
saturation = 1.5
exposure = 1.5
hue=.1
learning_rate=0.001
max_batches = 40100
policy=steps
steps=-1,100,20000,30000
scales=.1,10,.1,.1
batch:每次迭代要进行训练的图片数量
subdivisions:源码中的图片数量int imgs = net.batch * net.subdivisions * ngpus,按subdivisions大小分批进行训练
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.52
bias_match=1
classes=20
coords=4
num=5
softmax=1
jitter=.2
rescore=1
object_scale=5
noobject_scale=1
class_scale=1
coord_scale=1
absolute=1
thresh = .6
random=1
虽然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,每次训练大小与输入大小一致