yolov3-voc.cfg 参数超详细说明

[net]                   #   [xxx]开始的行表示网络的一层,其后的内容为该层的参数配置,[net]为特殊的层,配置整个网络
# Testing               #   测试模式,batch 和 subdivisions 通常都为1
batch=1                 
subdivisions=1

# Training              #   训练模式,batch 和 subdivisions 须要本身选取。
# batch=64 # 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 的倍数(320352608),最小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,在6090epochs时将学习率除以10。
                        #   接近训练结束:学习速率的衰减应该在100倍以上。
                        
                        #   学习率调整不要太死,实际训练过程当中根据loss的变化和其余指标动态调整,手动ctrl+c结束这次训练后,
                        #   修改学习率,再加载刚才保存的模型继续训练便可完成手动调参,调整的依据是根据训练日志来,
                        #   若是loss波动太大,说明学习率过大,适当减少,变为1/51/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                #   卷积步长

# 参考:
# https://www.cnblogs.com/hls91/p/10911997.html
# https://blog.csdn.net/qq_35872456/article/details/84216129
# https://blog.csdn.net/phinoo/article/details/83022101
复制代码
相关文章
相关标签/搜索