yolov参数详解

前言

yolo是一个物品检测的网络,至今有3个版本,
这里备注一些yolov2和v3网络配置文件中各变量的含义

总结

v2

大分类 项目 含义
batch 一个step中参数求导时参与计算的图片数量
subdivisions 为避免内存不足,将batch分为subdivisions份
width,height,channels 输入图片的大小
momentum 动量?
decay 权重衰减正则项,用来防止过拟合?
angle,saturation,exposure,hue 图像增强:角度,饱和度,曝光,色调
learning~rate~ 学习率
burn~in~ 学习率策略变换点?
max~batches~ 最大step数
policy 调整学习率的方法,constant,step,exp,poly,steps,sig,random
steps 调整学习率的时机
scales 调整学习率的程度,乘以当前学习率
batch~normalize~ 是否做batch~normalize~
filters 卷积核数量
size 卷积核大小
stride 卷积核滚动步长
pad 卷积核滚动时是否保存边界信息
activation 包括logistic,loggy,relu,elu,relie,plse,hardtan,lhtan,linear,ramp,leaky,tanh,stair.
maxpool size 池化核大小
stride 池化核滚动步长
route layers -
reorg stride
anchors 锚框的初始大小,宽和高数对
bias~match~ 仅用于训练,计算best~iou时~,如果为1则网络给出的预测框强制与锚框相同,如果为0则网络自行计算一些
classes 类别数量
coords 输出向量中的boundingbox的特征维度(这里有tx,ty,tw,th共4个)
num 识别框滑动到一个点后在该点附近生成的boundingbox的个数
region softmax 是否使用softmax
jitter 进行crop操作继续做数据增强防止过拟合
rescore 计算iou误差的方式,为1时使用best~ious~,为0时使用1
object~scale~,noobject~scale~ cost function的权重的更新比例
class~scale~,coord~scale~ cost function的权重的更新比例
absolute 没有被使用
thresh 用于设置忽略计算iou的阈值
random 是否将输入图片的大小调整为随机值以更好地适应多尺度对象的检测

v3

大分类 项目 含义
shortcut 用于跳过连接
upsample stride 上采样,即放大图像,据说yolov3使用的是双精度插值,边长放大stride倍
yolo 即v2中的region层
mask 用于决定该层中使用哪些anchors
ignore~thresh~ 高于该阈值的预测结果在训练中不计入cost函数,即认为该阈值以上为预测准确
truth~thresh~ ?

注释

grid cell

yolo会将图像分为SxS个小格,
若标签中物体的中心落在某个小格中,
则训练中该小格负责物体的检测.
yolov2沿用的该称呼和使用.
只不过yolo使用该小格子进行物体的分类,
yolov2将物体分类任务交给了anchor box.

width,height

输入网络的图片的大小,
程序会resize图片到该大小,然后进行预训练.(预训练时训练的是分类网络.)
据说边长13的卷积特征图已经足够代表高分辨率的图像,因此输入的图像没必要太大.
例如输入的608不是很大,但缩小32倍后有19,应该足够.
输入图片时还有意使用特定的宽高(比如是32的奇数倍).
使得卷积特征图边长成为奇数,
便于在判断物体位置的过程中可以使用物体中心的一个点(而不是四个)来预测物体的位置,
提高效率.

momentum

CNN-梯度下降法中一种常用的加速技术?
动量,
可以理解为当梯度的方向与之前方向一致时,
大概这个方向不会是异常点,
可以加速向前走,
如果方向改变,则适当减速.
在训练时加入动量可以帮助走出local minimal 以及saddle point.

decay

貌似是发现权重越来越大,需要使用一个衰减项来使权重不要出现太大的值

burn~in~

网上说是在burn~in步数前~,学习率从0增大到设定值,
防止一开始学习率过大产生梯度爆炸.
(初始状态梯度大,权重也大,则改变得太多,
极端时反复得到绝对值大于1的梯度,最终网络参数成为NaN)
因此用warm up策略来改变学习率.
ReLU函数也能在一定程度上减少梯度爆炸的几率.

reorg和route

https://blog.csdn.net/hrsstudy/article/details/65447947
不能明白含义,
具体作用是将高分辨率特征和低分辨率特征结合,提高对小物体的识别能力.

batch~normalize~

又简记为BN
以一个batch为单位,在每一层网络之间加入平均化的操作,
避免激活函数饱和问题,
比如100和1000在激活前相差很多,激活后都接近1.
能够加快模型收敛并提供一定的正则化防止过拟合.
有时甚至可以舍弃dropout

softmax

softmax指归一化指数函数,用于将K维向量压缩到K维向量,
每个元素都在(0, 1)之前并且元素和为1.
而yolov2貌似指的是softmax分类器,
将对x类别是A(B,C…)的得分(有高有低,差别大)
转换成概率,并让他们的和为1.
使用该方法的假设为类别不互相包含.

anchors

锚框,用于辅助机器选择最好的boundingbox.
yolov2中anchors的范围为(0x0,width/32,height/32]
yolov3中anchors的范围为(0x0,width,height]
v3使用多种类别的anchor对图像进行过滤和检测,适应更多尺度的目标.
v3将anchors分为3组,每组设计的anchor相同但使用masks来控制使用哪些anchors.
yolo层前的filters数为count(mask)*classes*(4+1)
yolov3在判断每一个尺度的图像时往往会对图像进行放大.

coords

输出中关于维度的字段长.
比如classes*5实际上是classes*(coord+1),
yolov2最后一层输出的含义:
x,y(相对与grid cell的偏移),
w,h(anchor box相对于图片全体的大小),
confidence(是物体的概率乘以IoU),
classes个条件概率(是物体的情况下是类别i的概率)
因此如果每个grid cell提出5个anchor box, 则输出为
5*(4+1+classes)

shortcut

?

参考

  1. https://www.cnblogs.com/MY0213/p/9821381.html
  2. https://blog.csdn.net/z5217632/article/details/83995387
  3. https://stackoverflow.com/questions/50390836/understanding-darknets-yolo-cfg-config-files
  4. yolo网络结构图
  5. yolov3网络结构彩图
  6. 训练结果说明
  7. burn~in解释~