zoukankan      html  css  js  c++  java
  • yolo---参数解释之cfg文件参数

    **********************cfg文件,细节上,以yolo v3为例,参数细说明**********************
    #为注释符号

    [net]
    # Testing #测试模式 #初始batch参数要分为两类,分别为训练集和测试集,不同模式相应放开参数
    batch=1
    subdivisions=1

    # Training #训练模式 每次前向图片的数目=batch/subdivisions
    # batch=64 #batch:一批训练样本的样本数量. 每batch个样本更新一次参数
    #关于batch与subdivision:
    #在训练输出中,训练迭代包括8组,这些batch样本又被平均分成subdivision=8次送入网络参与训练,以减轻内存占用的压力
    # subdivisions=16 #batch越大,训练效果越好,subdivision越大,占用内存压力越小
    #batch/subdivisions作为一次性送入训练器的样本数量
    #如果内存不够大,将batch分割为subdivisions个子batch
    #(subdivisions相当于分组个数,相除结果作为一次送入训练器的样本数量)
    #注意:上面这两个参数如果电脑内存小,则把batch改小一点,batch越大,训练效果越好
    #Subdivisions越大,可以减轻显卡压力(分组数目越多,每组样本数量则会更少,显卡压力也会相应减少)

    width=416 #网络输入的宽、高、通道数
    height=416
    channels=3 #这三个参数中,要求width==height, 并且为32的倍数,大分辨率可以检测到更加细小的物体,从而影响precision
    #以上三个参数为输入图像的参数信息 width和height 影响网络对输入图像的分辨率,从而影响precision,只可以设置成32的倍数
    #(为什么是32?由于使用了下采样参数是32,所以不同的尺寸大小也选择为32的倍数{320,352…..608},最小320*320,最大608*608,网络会自动改变尺寸,并继续训练的过程。)


    momentum=0.9 #动量,影响梯度下降到最优的速度,一般默认0.9
    #DeepLearning1中最优化方法中的动量参数,这个值影响着梯度下降到最优值得速度
    #注:SGD方法的一个缺点是其更新方向完全依赖于当前batch计算出的梯度,因而十分不稳定。Momentum算法借用了物理中的动量概念,它模拟的是物体运动时的惯性,即更新的时候在一定程度上保留之前更新的方向,同时利用当前batch的梯度微调最终的更新方向。这样一来,可以在一定程度上增加稳定性,从而学习地更快,并且还有一定摆脱局部最优的能力

    decay=0.0005 #权重衰减正则系数,防止过拟合, 正则项往往有重要意义
    #增加样本的数量,改变基础样本的状态. 增加样本整体的数量,增加样本量减少过拟合

    angle=0 #旋转角度,从而生成更多训练样本
    saturation = 1.5 #调整饱和度,从而生成更多训练样本
    exposure = 1.5 #调整曝光度,从而生成更多训练样本
    hue=.1 #调整色调,从而生成更多训练样本

    learning_rate=0.001 #学习率 ,决定了权值更新的速度. 学习率大,更新的就快,但太快容易越过最优值; 而学习率太小又更新的慢,效率低.
    #一般学习率随着训练的进行不断更改,先高一点,然后慢慢降低,一般在0.01--0.001
    #学习率决定着权值更新的速度,设置得太大会使结果超过最优值,直接错过最优值,震荡回去,太小会使下降速度过慢,导致收敛过慢。
    #如果仅靠人为干预调整参数,需要不断修改学习率。刚开始训练时可以将学习率设置的高一点,而一定轮数之后,将其减小。
    #在训练过程中,一般根据训练轮数设置动态变化的学习率。
    #[基本训练守则]
    #刚开始训练时:学习率以 0.01 ~ 0.001 为宜。
    #一定轮数过后:逐渐减缓。
    #接近训练结束:学习速率的衰减应该在100倍以上。
    #提供参考资料学习率的调整参考https://blog.csdn.net/qq_33485434/article/details/80452941

    burn_in=1000 #学习率控制的参数,在迭代次数小于burn_in时,其学习率的更新有一种方式,大于burn_in时,才采用policy的更新方式
    max_batches = 50200 #迭代次数,1000次以内,每训练100次保存一次权重; 1000次以上,每训练10000次保存一次权重; 训练达到max_batches后停止学习
    policy=steps #学习率策略,学习率下降的方式
    #这个是学习率调整的策略,有policy:constant, steps, exp, poly, step, sig, RANDOM,constant等方式
    #constant: 保持学习率为常量,caffe里为fixed
    #steps: 比较好理解,按照steps来改变学习率
    steps=40000,45000 #学习率变动步长 #Steps和scales相互一一对应, 这两个参数是设置学习率的变化, 根据batch_num调整学习率
    scales=.1,.1 #学习率变动因子
    #如迭代到40000次时,学习率衰减十倍; 45000次迭代时,学习率又会在前一个学习率的基础上衰减十倍


    [convolutional]
    batch_normalize=1 #BN, 是否做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

    # Downsample #以下为训练网络结构

    [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 #借鉴了resnet网络的shortcut方式可以加深网络
    #输入与输出:输入与输出一般保持一致,并且不进行其他操作,只是求差。
    #处理操作:res层来源于resnet,为了解决网络的梯度弥散或者梯度爆炸的现象,提出将深层神经网络的逐层训练改为逐阶段训练,
    #将深层神经网络分为若干个子段,每个小段包含比较浅的网络层数,然后用shortcut的连接方式使得每个小段对于残差进行训练,
    #每一个小段学习总差(总的损失)的一部分,最终达到总体较小的loss,同时,很好的控制梯度的传播,
    #避免出现梯度消失或者爆炸等不利于训练的情形。


    # Downsample

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

    [convolutional]
    batch_normalize=1
    filters=64
    size=1
    stride=1
    pad=1
    activation=leaky

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

    [shortcut]
    from=-3
    activation=linear

    [convolutional]
    batch_normalize=1
    filters=64
    size=1
    stride=1
    pad=1
    activation=leaky

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

    [shortcut]
    from=-3
    activation=linear

    # Downsample

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

    [convolutional]
    batch_normalize=1
    filters=128
    size=1
    stride=1
    pad=1
    activation=leaky

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

    [shortcut]
    from=-3
    activation=linear

    [convolutional]
    batch_normalize=1
    filters=128
    size=1
    stride=1
    pad=1
    activation=leaky

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

    [shortcut]
    from=-3
    activation=linear

    [convolutional]
    batch_normalize=1
    filters=128
    size=1
    stride=1
    pad=1
    activation=leaky

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

    [shortcut]
    from=-3
    activation=linear

    [convolutional]
    batch_normalize=1
    filters=128
    size=1
    stride=1
    pad=1
    activation=leaky

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

    [shortcut]
    from=-3
    activation=linear


    [convolutional]
    batch_normalize=1
    filters=128
    size=1
    stride=1
    pad=1
    activation=leaky

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

    [shortcut]
    from=-3
    activation=linear

    [convolutional]
    batch_normalize=1
    filters=128
    size=1
    stride=1
    pad=1
    activation=leaky

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

    [shortcut]
    from=-3
    activation=linear

    [convolutional]
    batch_normalize=1
    filters=128
    size=1
    stride=1
    pad=1
    activation=leaky

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

    [shortcut]
    from=-3
    activation=linear

    [convolutional]
    batch_normalize=1
    filters=128
    size=1
    stride=1
    pad=1
    activation=leaky

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

    [shortcut]
    from=-3
    activation=linear

    # Downsample

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

    [convolutional]
    batch_normalize=1
    filters=256
    size=1
    stride=1
    pad=1
    activation=leaky

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

    [shortcut]
    from=-3
    activation=linear


    [convolutional]
    batch_normalize=1
    filters=256
    size=1
    stride=1
    pad=1
    activation=leaky

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

    [shortcut]
    from=-3
    activation=linear


    [convolutional]
    batch_normalize=1
    filters=256
    size=1
    stride=1
    pad=1
    activation=leaky

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

    [shortcut]
    from=-3
    activation=linear


    [convolutional]
    batch_normalize=1
    filters=256
    size=1
    stride=1
    pad=1
    activation=leaky

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

    [shortcut]
    from=-3
    activation=linear

    [convolutional]
    batch_normalize=1
    filters=256
    size=1
    stride=1
    pad=1
    activation=leaky

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

    [shortcut]
    from=-3
    activation=linear


    [convolutional]
    batch_normalize=1
    filters=256
    size=1
    stride=1
    pad=1
    activation=leaky

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

    [shortcut]
    from=-3
    activation=linear


    [convolutional]
    batch_normalize=1
    filters=256
    size=1
    stride=1
    pad=1
    activation=leaky

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

    [shortcut]
    from=-3
    activation=linear

    [convolutional]
    batch_normalize=1
    filters=256
    size=1
    stride=1
    pad=1
    activation=leaky

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

    [shortcut]
    from=-3
    activation=linear

    # Downsample

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

    [convolutional]
    batch_normalize=1
    filters=512
    size=1
    stride=1
    pad=1
    activation=leaky

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

    [shortcut]
    from=-3
    activation=linear

    [convolutional]
    batch_normalize=1
    filters=512
    size=1
    stride=1
    pad=1
    activation=leaky

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

    [shortcut]
    from=-3
    activation=linear

    [convolutional]
    batch_normalize=1
    filters=512
    size=1
    stride=1
    pad=1
    activation=leaky

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

    [shortcut]
    from=-3
    activation=linear

    [convolutional]
    batch_normalize=1
    filters=512
    size=1
    stride=1
    pad=1
    activation=leaky

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

    [shortcut]
    from=-3
    activation=linear

    ######################

    [convolutional]
    batch_normalize=1
    filters=512
    size=1
    stride=1
    pad=1
    activation=leaky

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

    [convolutional]
    batch_normalize=1
    filters=512
    size=1
    stride=1
    pad=1
    activation=leaky

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

    [convolutional]
    batch_normalize=1
    filters=512
    size=1
    stride=1
    pad=1
    activation=leaky

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

    ################################ 重点 #####################
    [convolutional] # YOLO层前面一层卷积层配置说明
    size=1
    stride=1
    pad=1
    filters=75 #每一层前的最后一个卷积层中的 filters=num(yolo层个数)*(classes+5) ,5的意义是5个坐标,论文中的tx,ty,tw,th,to
    #每一个[region/yolo]层前的最后一个卷积层中的 filters=num(yolo层个数)*(classes+5), 5的意义是5个坐标,论文中的tx,ty,tw,th,po
    #filters=num(预测框个数)*(classes+5),5的意义是4个坐标加一个置信率,论文中的tx,ty,tw,th,
    #自己使用时,此处的值一定要根据自己的数据集进行更改,例如你识别4个类,则:filters=3*(4+5)=27,三个fileters都需要修改,切记
    activation=linear


    [yolo] # YOLO层配置说明。在yoloV2中yolo层叫region层,yolo2,3各自叫法不同
    mask = 6,7,8 #训练框
    #如果mask的值是0,1,2,这意味着使用第一,第二和第三个anchor。 这是有道理的,因为检测层的每个单元预测3个box。
    #总共有三个检测层,共计9个anchor。
    anchors = 10,13, 16,30, 33,23, 30,61, 62,45, 59,119, 116,90, 156,198, 373,326
    #1.anchors是可以事先通过cmd指令计算出来的,是和图片数量,width,height以及cluster
    #(应该就是下面的num的值,即想要使用的anchors的数量)相关的预选框,可以手工挑选,也可以通过k-means算法从训练样本中学出。聚类。
    #2.预测框的初始宽高,第一个是w,第二个是h,总数量是num*2

    classes=20 #类别数目 #ctrl+f搜 yolo, 总共会搜出3个含有yolo的地方。
    num=9 #每个grid cell预测几个box,和anchors的数量一致。
    #当想要使用更多anchors时需要调大num,且如果调大num后训练时Obj趋近0的话可以尝试调大object_scale
    #每个grid预测的BoundingBox num/yolo层个数
    jitter=.3 #通过抖动来防止过拟合,jitter就是crop的参数
    #利用数据抖动产生更多数据,YOLOv2中使用的是crop,filp,以及net层的angle,flip是随机的,crop就是jitter的参数,
    #tiny-yolo-voc.cfg中jitter=.2,就是在0~0.2中进行cr
    ignore_thresh = .5
    #ignore_thresh 指得是参与计算的IOU阈值大小。当预测的检测框与ground true的IOU大于ignore_thresh的时候,参与loss的计算,否则,检测框的不参与损失计算。
    #目的是控制参与loss计算的检测框的规模,当ignore_thresh过于大,接近于1的时候,那么参与检测框回归loss的个数就会比较少,同时也容易造成过拟合;
    #而如果ignore_thresh设置的过于小,那么参与计算的会数量规模就会很大。同时也容易在进行检测框回归的时候造成欠拟合。
    #参数设置:一般选取0.5-0.7之间的一个值,之前的计算基础都是小尺度(13*13)用的是0.7,(26*26)用的是0.5。这次先将0.5更改为0.7。


    truth_thresh = 1
    #参与计算的IOU阈值大小.当预测的检测框与ground true的IOU大于ignore_thresh的时候,参与loss的计算,否则,检测框的不参与损失计算。
    #理解:目的是控制参与loss计算的检测框的规模,当ignore_thresh过于大,接近于1的时候,那么参与检测框回归loss的个数就会比较少,同时也容易造成过拟合;而如果ignore_thresh设置的过于小,那么参与计算的会数量规模就会很大。同时也容易在进行检测框回归的时候造成欠拟合。
    #参数设置:一般选取0.5-0.7之间的一个值,之前的计算基础都是小尺度(13*13)用的是0.7,(26*26)用的是0.5。这次先将0.5更改为0.7。
    #参考:https://www.e-learn.cn/content/qita/804953

    random=1 #多尺度训练:如果显存小,设置random=0,关闭多尺度训练。
    #random设置成1,可以增加检测精度precision,每次迭代图片大小随机从320到608,步长为32,如果为0,每次训练大小与输入大小一致
    #提示:当打开随机多尺度训练时,前面设置的网络输入尺寸width和height其实就不起作用了,width会在320到608之间随机取值,且width=height,
    #每10轮随机改变一次,一般建议可以根据自己需要修改随机尺度训练的范围,这样可以增大batch,可以自行尝试!


    [route] #路由层 进行多尺度训练
    layers = -4 #当属性只有一个值时,它会输出由该值索引的网络层的特征图。
    #在我们的示例中,它是−4,所以层级将输出路由层之前第四个层的特征图。
    #当图层有两个值时,它会返回由其值所索引的图层的连接特征图。
    #在我们的例子中,它是−1,61,并且该图层将输出来自上一层(-1)和第61层的特征图,并沿深度的维度连接。

    [convolutional] #一层卷积层的配置说明
    batch_normalize=1 #是否进行BN处理,什么是BN此处不赘述,1为是,0为不是
    filters=256 #卷积核个数,也是输出通道数
    size=1 #卷积核尺寸
    stride=1 #卷积步长
    pad=1 #卷积时是否进行0 padding,padding的个数与卷积核尺寸有关,为size/2向下取整,如3/2=1
    activation=leaky #网络层激活函数
    #size=3 卷积核尺寸3*3配合padding且步长为1时,不改变feature map的大小
    #size=3 卷积核尺寸为3*3,配合padding且步长为2时,feature map变为原来的一半大小

    [upsample]
    stride=2

    [route]
    layers = -1, 61

    [convolutional]
    batch_normalize=1
    filters=256
    size=1
    stride=1
    pad=1
    activation=leaky

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

    [convolutional]
    batch_normalize=1
    filters=256
    size=1
    stride=1
    pad=1
    activation=leaky

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

    [convolutional]
    batch_normalize=1
    filters=256
    size=1
    stride=1
    pad=1
    activation=leaky

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

    [convolutional]
    size=1
    stride=1
    pad=1
    filters=75
    activation=linear

    [yolo] # YOLO层配置说明
    mask = 3,4,5
    anchors = 10,13, 16,30, 33,23, 30,61, 62,45, 59,119, 116,90, 156,198, 373,326
    classes=20
    num=9 #每个grid cell预测几个box,和anchors的数量一致。
    #当想要使用更多anchors时需要调大num,且如果调大num后训练时Obj趋近0的话可以尝试调大object_scale

    jitter=.3 #利用数据抖动产生更多数据,YOLOv2中使用的是crop,filp,以及net层的angle,
    #flip是随机的, jitter就是crop的参数,tiny-yolo-voc.cfg中jitter=.3,就是在0~0.3中进行crop
    ignore_thresh = .5 #决定是否需要计算IOU误差的参数,大于thresh,IOU误差不会夹在cost function中
    truth_thresh = 1
    random=1 #多尺度。如果为1,每次迭代图片大小随机从320到608,步长为32,如果为0,每次训练大小与输入大小一致

    [route]
    layers = -4

    [convolutional]
    batch_normalize=1
    filters=128
    size=1
    stride=1
    pad=1
    activation=leaky

    [upsample]
    stride=2

    [route]
    layers = -1, 36

    [convolutional]
    batch_normalize=1
    filters=128
    size=1
    stride=1
    pad=1
    activation=leaky

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

    [convolutional]
    batch_normalize=1
    filters=128
    size=1
    stride=1
    pad=1
    activation=leaky

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

    [convolutional]
    batch_normalize=1
    filters=128
    size=1
    stride=1
    pad=1
    activation=leaky

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

    [convolutional]
    size=1
    stride=1
    pad=1
    filters=75
    activation=linear

    [yolo]
    mask = 0,1,2
    anchors = 10,13, 16,30, 33,23, 30,61, 62,45, 59,119, 116,90, 156,198, 373,326
    classes=20
    num=9
    jitter=.3
    ignore_thresh = .5
    truth_thresh = 1
    random=1
    ***************************************************************************************
    @https://blog.csdn.net/qq_43211132/article/details/88679979

  • 相关阅读:
    kafka 以windows服务的方式在windows下安装并自启动
    Zookeeper以Windows服务安装运行
    SpringMVC统一转换null值为空字符串的方法
    Java 常见异常种类
    svnkit https 忽略证书认证
    Java svnkit check update commit
    替换句子中的多个不同的词—— python 实现
    word2vec 构建中文词向量
    Eureka 源码编译安装部署
    面试总结
  • 原文地址:https://www.cnblogs.com/wszme/p/13994044.html
Copyright © 2011-2022 走看看