[net] # [xxx]开始的行表示网络的一层,其后的内容为该层的参数配置,[net]为特殊的层,配置整个网络
# Testing # 测试模式,batch 和 subdivisions 一般都为1
#batch=1
#subdivisions=1
# Training # 训练模式,batch 和 subdivisions 需要自己选取。
# batch=32 # batch 为每一次迭代送到网络的图片数量,也叫批数量。
# 增大 batch 可以让网络在较少的迭代次数内完成一个 epoch。
# 1个 epoch 就是使用训练集中的全部样本训练一次。
# 在固定最大迭代次数的前提下,增加 batch 会延长训练时间,但会更好的寻找到梯度下降的方向。
# 显存允许的情况下,可以适当增大 batch 来提高内存利用率和训练效果,通常 batch 越大越好。
# 这个值是需要大家不断尝试选取的,过小的话会让训练不够收敛,过大会陷入局部最优。
# subdivisions=16 # 表示将一个 batch 的图片分 subdivisions 份放进网络里,
# 一份一份的跑完后,再一起打包算作完成一次 iteration。
# 1个 iteration 就是使用 batch 个样本训练一次。
# 注意 batch 要是 subdivisions 的整数倍
# subdivisions 越大,可以减轻 CPU/GPU 的压力。
# (分组数目越多,每组样本数量则会更少,显卡压力也会相应减少)
----------------------------------------------------------------------------------------------------------------
width=416 # 输入图像的宽
height=416 # 输入图像的高
# 如显存允许,width 和 height 的值越大,对于小目标的识别效果越好。
# width 和 height 影响网络对输入图像的分辨率,从而影响precision,只可以设置成32的倍数,
# 因下采样参数是32,故不同尺寸的图像也选择为 32 的倍数(320,352…608),最小320,最大608。
# width 和 height 可以不相等。
channels=3 # 输入图像的通道数,3为RGB彩色图片,1为灰度图,4为RGBA图,A通道表示透明度
----------------------------------------------------------------------------------------------------------------
momentum=0.9 # DeepLearning1中最优化方法中的动量参数,这个值影响着梯度下降到最优值得速度
# 注:SGD方法的一个缺点是其更新方向完全依赖于当前 batch 计算出的梯度,因而十分不稳定。
# momentum 算法借用了物理中的动量概念,它模拟的是物体运动时的惯性,
# 即更新的时候在一定程度上保留之前更新的方向,同时利用当前batch的梯度微调最终的更新方向。
# 这样一来,可以在一定程度上增加稳定性,从而学习地更快,并且还有一定摆脱局部最优的能力。
decay=0.0005 # 权重衰减正则项,防止过拟合。大的权值会使得系统出现overfitting,降低其泛化性能。
# 因此,为了避免出现 overfitting,会给误差函数添加一个惩罚项,
# 常用的惩罚项是所有权重的平方乘以一个衰减常量之和。用来惩罚大的权值。
# 权值衰减惩罚项使得权值收敛到较小的绝对值,从而惩罚大的权值。
# decay参数越大对过拟合的抑制能力越强
----------------------------------------------------------------------------------------------------------------
angle=0 # 数据增强参数,通过随机旋转[-angle,angle]度来生成更多训练样本
saturation = 1.5 # 数据增强参数,通过调整饱和度来生成更多训练样本
exposure = 1.5 # 数据增强参数,通过调整曝光度来生成更多训练样本
hue=.1 # 数据增强参数,通过调整色调来生成更多训练样本
# 每次迭代中,会基于角度、饱和度、曝光度、色调产生新的训练样本,可以防止过拟合。
----------------------------------------------------------------------------------------------------------------
learning_rate=0.001 # 学习率,决定着权值更新的速度,设置得太大会使结果超过最优值,太小会使下降速度过慢。
# 学习率决定了参数移动到最优值的速度快慢,如果学习率过大,
# 很可能会越过最优值导致函数无法收敛,甚至发散;反之,如果学习率过小,优化的效率可能过低,
# 算法长时间无法收敛,也易使算法陷入局部最优(非凸函数不能保证达到全局最优)。
# 合适的学习率应该是在保证收敛的前提下,能尽快收敛。
# 设置较好的learning rate,需要不断尝试。在一开始的时候,可以将其设大一点,
# 这样可以使weights快一点发生改变,在迭代一定的epochs之后人工减小学习率,
# 一般根据训练轮数设置动态变化的学习率。在yolo训练中,网络训练160epoches,
# 初始学习率为0.001,在60和90epochs时将学习率除以10。
# 接近训练结束:学习速率的衰减应该在100倍以上。
# 学习率调整不要太死,实际训练过程中根据loss的变化和其他指标动态调整,手动ctrl+c结束此次训练后,
# 修改学习率,再加载刚才保存的模型继续训练即可完成手动调参,调整的依据是根据训练日志来,
# 如果loss波动太大,说明学习率过大,适当减小,变为1/5,1/10均可,如果loss几乎不变,
# 可能网络已经收敛或者陷入了局部极小,此时可以适当增大学习率,注意每次调整学习率后一定要训练久一点,
# 充分观察,调参是个细活,多次实践体会,慢慢琢磨。
# 实际学习率与GPU的个数有关,例如你的学习率设置为0.001,如果你有4块GPU,那真实学习率为0.001/4。
burn_in=1000 # 在迭代次数小于burn_in时,其学习率的更新有一种方式,大于burn_in时,采用policy的更新方式
#***这里之前的更新方式不知道什么*****************************************
max_batches = 50200 # 训练次数达到max_batches后停止学习,一次为跑完一个batch
policy=steps # 学习率调整的策略:constant, steps, exp, poly, step, sig, RANDOM,constant等方式
steps=40000,45000
scales=.1,.1 # steps和scale是设置学习率的变化,比如迭代到40000次时,学习率衰减10倍,
# 45000次迭代时,学习率又会在前一个学习率的基础上衰减10倍。
----------------------------------------------------------------------------------------------------------------
[convolutional] # 一层卷积层的配置说明,直到下一个[XXX],都是该层的配置
batch_normalize=1 # 是否进行BN处理,关于BN,https://www.cnblogs.com/eilearn/p/9780696.html
filters=32 # 卷积核个数,也是输出通道数,输出特征图数量
size=3 # 卷积核尺寸,这里是3*3
stride=1 # 卷积步长
pad=1 # 如果 pad 为0,padding由 padding 参数指定。
# 如果 pad 为1,padding大小为size/2向下取整,如3/2=1。
activation=leaky # 网络层激活函数,常见激活函数如下:
# logistic,loggy,relu,elu,relie,plse,
# hardtan,lhtan,linear,ramp,leaky,tanh,stair
[convolutional]
batch_normalize=1
filters=64
size=3
stride=2
pad=1
activation=leaky
[convolutional]
batch_normalize=1
filters=32
size=1
stride=1
pad=1
activation=leaky
[convolutional]
batch_normalize=1
filters=64
size=3
stride=1
pad=1
activation=leaky
----------------------------------------------------------------------------------------------------------------
[shortcut] # shotcut 层配置说明
# shortcut 部分是卷积的跨层连接,就像 Resnet 中使用的一样,
# 本层的输入与输出一般保持一致,并且不进行其他操作,只是求差。
from=-3 # 参数 from 是 −3,意思是 shortcut 层前面倒数第3层网络的输出作为本层的输入。
activation=linear # 层次激活函数
# 关于 shortcut,https://cloud.tencent.com/developer/article/1148375
----------------------------------------------------------------------------------------------------------------
...... # 这里还有若干层,参数一样,不赘述
......
......
----------------------------------------------------------------------------------------------------------------
[convolutional] # YOLO层前面一层卷积层配置说明
size=1
stride=1
pad=1
filters=75 # 这一层的filters需要根据公式设置
# filters = (classes + 5) * anchors_num
# classes 为类别数,与下面yolo层的classes一致,
# 5 的意义是4个坐标加一个置信率,论文中的tx,ty,tw,th,to
# anchors_num 表示YOLO中每个cell预测框的个数,YOLOV3中为3
# 此处 filters = (20 + 5) * 3 = 75
activation=linear
----------------------------------------------------------------------------------------------------------------
[yolo] # [yolo/region]层配置说明,在yoloV2中yolo层叫region层
mask = 6,7,8 # 使用 anchor 的索引,从0开始,6,7,8表示使用下面定义的anchors中的最后三个 anchor
anchors = 10,13, 16,30, 33,23, 30,61, 62,45, 59,119, 116,90, 156,198, 373,326 # 预测框的初始宽高,
# 第一个是w,第二个是h
classes=20 # 类别数目
num=9 # 每个grid cell总共预测几个box,和anchors的数量一致。当想要使用更多anchors时需要调大num
jitter=.3 # 利用抖动产生更多训练样本,YOLOv2中使用的是crop,filp,以及net层的angle
ignore_thresh = .5 # ignore_thresh 指得是参与计算的IOU的阈值大小。
# 当IOU大于ignore_thresh,不会参与loss的计算,否则,检测框将会参与损失计算。
# 关于 IOU,https://www.cnblogs.com/darkknightzh/p/9043395.html
# 参数目的和理解:目的是控制参与loss计算的检测框的规模,当ignore_thresh过大,
# 接近于1的时候,那么参与检测框回归loss的个数就会比较少,同时也容易造成过拟合;
# 而如果ignore_thresh设置的过小,那么参与计算的检测框回归loss数量规模就会很大。
# 同时也容易在进行检测框回归的时候造成欠拟合。
# 参数设置:一般选取0.5-0.7之间的一个值
truth_thresh = 1
random=1 # 为1打开随机多尺度训练,为 0 则关闭
# 提示:当打开随机多尺度训练时,前面设置的网络输入尺寸width和height其实就不起作用了,
# width会在320到608之间随机取值,且width=height,
# 每10轮随机改变一次,可以根据自己需要修改随机尺度训练的范围,这样可以增大batch
----------------------------------------------------------------------------------------------------------------
[route] # 看到有人讲这一层是融合层,就是把层进行合并,然后输出到下一层
layers = -4 # 将本层前面倒数第4层的输出作为本层的输出
# 如果layers = -1, 61 则表示将本层的上一层与整个网络的第61层的输出相作为本层输出
# 相加规则为:如上一层的输出为52 x 52 x 128,第61层的输出为52 x 52 x 256
# 则本层输出为52 x 52 x (128+256),所以route的两层的 weight 和 height 必须相等
# 若不相等,则本层输出为 0 x 0 x 0,下一层得不到有效输入,
# 就会报 Layer before convolutional must output image. 然后停止
**********************************************************
[upsample] # 上采样层
stride=2 # 卷积步长
yolov3: cfg/yolov3-voc.cfg参数解释
最新推荐文章于 2024-03-06 13:06:19 发布