已yolov3中cfg参数文件为例
batch=64 :每一次迭代(iteration)送到网络的图片数量,也叫做批数量。增大这个参数可以让网络在较少的迭代次数内完成一个轮次(epoch)。在固定最大迭代次数的前提(一般如此)下,增加batch的数量会延长训练时间,但是会更好的寻找到梯度下降的方向。如果GPU(显存)够大,可以增大这个值来提高内存利用率。这个值是不断的尝试选取,过小的话可能会让训练不够收敛,过大的话会陷入局部最优。
subdivison=32:这个参数会让每一个batch不是一下子都丢到网络中,而是会分成subdivision对应数字的份数,一份一份的都丢到网络里,最后一起打包算一次iteration。这样会降低对显存的占用情况。如果把这个参数设置为1的话,就是将一个batch扔到网络中喂数据。如果是2,一次仍一半。
batch_size:批大小。深度学习中,一般采用SGD(随机梯度下降)训练,每次训练在训练集中取batch_size样本训练,我理解为和batch一样的大小数量。
iteration:迭代,1个iteration等同于使用batch_size大小的样本训练一次。
epoch:轮次,1个epoach等于使用训练集中全部样本训练一次。
width=32,height=32,channels=3:输入input图像的宽,高,为32dimentions。channels是信道(通道)数,3代表RGB彩色图片,1代表灰度图(0代表黑,暗,255代表白,亮)4为RGBA图,其中A是透明度,也就是一般的输入(W,H,C),还有一种表示方式,一般用cvtColor将RGB换为另一种色彩空间,饱和度,色调,亮度,CV_BGR2HSV
angle=180 图片的角度变化,单位是度,代表生成新图片的时候随机旋转-180到180度
saturation=1.5,exposure=1.5:饱和度和曝光度变化大小,tiny-yolo-voc.cfg中1到1.5倍以及1/1.5到1倍
hue=.1:色调变化范围,tiny-yolo-voc.cfg中-0.1到0.1
每次迭代中,会基于角度,饱和度,曝光度,色调产生新的训练图片
momentum=0.9:冲量,深度学习中最优化方法中的动量参数,这个值影响着梯度下降 到最优值的速度,这个参数代表建议冲量配置为0.9
decay=0.0005:衰减率,权值衰减,目的是为了防止过拟合,当网络逐渐过拟合的时候网络权重往往会变大,因此,为了防止过拟合,在每次迭代过程中以某个小因子,也就是衰减率降低权重,decay参数,这是给误差函数增加一个惩罚项,常用的惩罚项是所有权重的平方乘以一个decay的和,权值衰减惩罚项使得权值收敛到较小的绝对值,减少不重要参数对结果的影响。decay参数越大对过拟合的抑制能力越强.
learning_rate=0.001:初始的学习率。训练发散的话可以降低学习率,学习遇到瓶颈,loss不变的话也可以降低学习率。学习率决定了参数移动到最优值的速度快慢,如果学习率过大,可能会越过最优值无法收敛,甚至发散,反之,如果学习率过小,优化的效率可能过低,算法长时间无法收敛,也容易使算法陷入局部最优(非凸函数不能保证达到全局最优)。合适的学习率是在保证收敛的前提下,能尽快的收敛。learning_rate的设置需要不断尝试,一开始的时候可以设置的大一点,这可以使得weights快一点发生改变,在迭代一定的epoch之后人工减小学习率。在yolo网络中,网络训练160epoches,初始学习率0.001,在60和90epoches时将学习率缩小0.1倍
steps=100,25000,35000:学习率变化时的迭代次数
scales=10,.1,.1:学习率变化的比率。这是和之前的learn_rate,steps组合在一起的,举个例子:learn_rate:0.001,step:100,25000,35000 scales:10,.1,.1 这组数据的意思是在0到100次的迭代(iteration)期间learning rate是原始的0.001,在100到25000次iteration期间,learning_rate变为原来的10倍,也就是0.01,在25000-35000次迭代期间,learning_rate为上一个学习率的0.1倍,就是0.001,在35000到最大迭代次数(max_batches)期间,learing_rate为上一个值的0.1倍,也就是0.0001,。随着iteration的增加,降低学习率可以使得模型更有效学习,也可以更好的降低train loss.
burn_in=1000:在迭代次数小于burn_in时候,学习率的更新有一种方式,大于burn_in时,才采用policy的更新方式
policy=steps:学习策略,一般都是step这种步进式。policy一般有:constant,steps,exp,poly,step,RANDOM,等方式。
max_batches=50000:最大迭代次数,训练达到max_batches后停止学习
[convolutional]
batch_normalize=1:是否做BN
filters=32:输出多少个特征图,每一个[region/yolo]层前最后一个卷积层中的filters=(classes+1+coords)*anchors_num,其中anchors_num是该层mask的一个值,如果没有mask,则anchors_num=num,这层的anchor5的意义是5个坐标,论文中的tx,ty,tw,th,to。3×(5+len(classes))
sizes=3:卷积核的尺寸
stride=1:卷积运算时的步长
pad=1:如果pad=1,padding大小为size/2,如果pad=0,padding由padding参数指定
activation=leaky:激活函数,leaky Relu,包括logistic,loggy,relu,elu,relie,plse,hardtan,lhtan,linear,ramp,leaky,tanh,stair
[yolo]:在yolov2中yolo层叫region层
mask=6,7,8:当前属于第几个预选框,这一层预测了第7,8,9个anchor boxes,每个yolo层实际上只预测3个由mask定义的anchors。
anchors=10,13 16,30 ,33,23 30,61 62,45 59,119 ,116,90 156,198 373,326 :预测框的初始宽高,第一个是w,第二个是h,总数量是num*2,YOLOV2作者说anchors是使用K-Means获得,其实就是计算出那种类型的框比较多,可以增加收敛速度,如果不设置anchors,默认是0.5
classes=4:网络需要识别的物体种类数
num=9:每隔grid cell预测几个box,和anchors的数量一致。当想使用更多anchors需要调用更大num,如果调大num后训练obj时趋进0的话,可以尝试调大object_scale
jitter=.3:通过抖动增加噪声来抑制过拟合
ignore_thresh =.5 :决定是否需要计算IOU误差的参数,若大于阈值(thresh),IOU误差不会差在cost function中
truth_thresh=1
random=1:为1时会启动Multi-Scale Traing,随机使用不同尺寸的图片进行训练,如果为0,每次训练大小与输入大小一致,是否随机确定最后的预测框,GPU小可设置为0
Region Avg IOU:平均的IOU,代表预测的bounding box和ground truth 的交集和并集之比,期望该值趋近于1.