YOLO fastest cfg文件理解及注释

YOLO fastest cfg文件注释分析,大体上跟其他版本的YOLO配置文件一致,此处主要是记录一下,针对自己不熟悉的地方额外添加一点说明。

1.[net]层

[net]
batch=64
subdivisions=1
width=320
height=320
channels=3
momentum=0.949 #动量参数影响着梯度下降到最优值的速度。
decay=0.0005 #权重衰减正则项,防止过拟合。
angle=0 #数据增强,设置旋转角度。
saturation=1.5 #饱和度
exposure=1.5 #曝光量
hue=.1 #色调
这里的batch与普遍意义上的batch不是一致的。训练的过程中将一次性加载16张图片进内存,然后分4次完成前向传播,每次4张。经过16张图片的前向传播以后,进行一次反向传播。在网上的其他博客中,测试的时候需要如下设置
#Testing
#batch=1
#subdivisions=1
在YOLO fastest的cfg文件中不需要更改,因为在测试的时候,parse_network_cfg_custom函数内根据train和test进行了区分设置。
网络的宽、高和通道个数设置,由于YOLOv3的下采样一般是32倍,所以宽高必须能被32整除。多尺度训练选择为32的倍数最小320*320,最大608*608。长和宽越大,对小目标越好,但是占用显存也会高,需要权衡。
learning_rate=0.001 #学习率:刚开始训练时可以将学习率设置的高一点,而一定轮数之后,将其减小。在训练过程中,										#一般根据训练轮数设置动态变化的学习率。
burn_in=4000 # 在迭代次数小于burn_in时,其学习率的更新有一种方式,大于burn_in时,才采用下面的policy的更新方式。网上查到的都是这么一句描述,小于burn_in的时候是怎么更新的,我在看代码的时候没有看到yolo fastest内具体的一个计算方式,只在void update_network_gpu(network net)函数内,看到if (l.burnin_update && (l.burnin_update*net.burn_in > iteration_num)) continue;这一句,后面有时间再研究下这块。
max_batches=250000 #训练过程中最大batch
policy=steps #学习率调整的策略:constant, steps, exp, poly, step, sig, RANDOM,constant等方式。
steps=150000,180000
scales=.1,.1 #steps和scale是设置学习率的变化,比如迭代到400000次时,学习率衰减十倍,45000次迭代时,学习率又会在前一个学习率的基础上衰减十倍。

2.[convolutional]

[convolutional]
batch_normalize=1    		#是否做BN操作
filters=32              #输出特征图的数量
size=3               		#卷积核的尺寸
stride=1                #做卷积运算的步长
pad=1               		#如果pad为0,padding由padding参数指定。如果pad为1,padding大小为size/2,													#padding应该是对输入图像左边缘拓展的像素数量
activation=leaky     		#激活函数的类型:logistic,loggy,relu,elu,relie,plse,hardtan,															#lhtan,linear,ramp,leaky,tanh,stair
# alexeyAB版添加了mish, swish, nrom_chan等新的激活函数

3.下采样都是通过调整卷积层参数进行的,不存在maxpooling下采样方式:

[convolutional]
filters=8
size=3
pad=1
stride=2
batch_normalize=1
activation=leaky

4.上采样 只有一个upsample层

[upsample]
stride = 2 #上采样通过线性插值实现

5.shortcut和route层 cfg中有18个shortcut层,2个route层

[shortcut]
from=-5
activation=linear 
#shortcut操作是类似ResNet的跨层连接,参数from是−5,意思是shortcut的输出是当前层与先前的倒数第三层相加而得到。一般就是add操作
[route]
layers = -7 #当属性只有一个值时,它会输出由该值索引的网络层的特征图。 此处就是提取从当前倒数第7个层输出

[route]
layers=-1,81 # 当属性有两个值,就是将上一层和第81层进行concate,即沿深度的维度连接,feature map大小一致

6.yolo层

[convolutional]
size=1
stride=1
pad=1
filters=21 #每一个[region/yolo]层前的最后一个卷积层中的filters=num(每yolo层个数)*(classes+5) ,5的意义是5个坐标,代表论文中的tx,ty,tw,th,po 这里类别个数为2,(1+5)*3=21
activation=linear


[yolo]
# 该层预测哪个规模的框,0,1,2用于预测小物体的anchor
# 使用anchor的索引,0,1,2表示使用下面定义的anchors中的前三个anchor
mask = 0,1,2
# anchors = 26, 48,  67, 84,  72,175, 189,126, 137,236, 265,259
# own data anchors
anchors = 20, 24,  27, 36,  38, 52,  52, 35,  61, 66,  105, 94 # 有2个yolo层,所以6个anchor
classes=2
num=6 # anchor数量,每个grid cell预测的bounding box个数是anchor总数/yolo层个数,此处是6/2=3
jitter=.15
ignore_thresh = .5 # ignore_thresh 指得是参与计算的IOU阈值大小。当预测的检测框与ground true的IOU大于ignore_thresh的时候,不会参与loss的计算,否则,检测框将会参与损失计算。目的是控制参与loss计算的检测框的规模,当ignore_thresh过于大,接近于1的时候,那么参与检测框回								归loss的个数就会比较少,同时也容易造成过拟合;而如果ignore_thresh设置的过于小,那										 # 么参与计算的会数量规模就会很大。同时也容易在进行检测框回归的时候造成欠拟合。				               										# ignore_thresh一般选取0.5-0.7之间的一个值
# 小尺度(10*10)和大尺度(20*20)用的都是0.5,
truth_thresh = 1
random=0
scale_x_y = 1.00
iou_thresh=0.213
cls_normalizer=1.0
iou_normalizer=0.07
iou_loss=ciou
nms_kind=greedynms
beta_nms=0.6

7.dropout层 cfg中有18个dropout层,均在shortcut层前,probability的设置都为0.15

[dropout]
probability=.15 

 

  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值