1.CUDA Error: out of memory
cfg文件参数修改 batch: 每一次迭代送到网络的图片数量,也叫批数量。增大这个可以让网络在较少的迭代次数内完成一个epoch。在固定最大迭代次数的前提下,增加batch会延长训练时间,但会更好的寻找到梯度下降的方向。如果你显存够大,可以适当增大这个值来提高内存利用率。这个值是需要大家不断尝试选取的,过小的话会让训练不够收敛,过大会陷入局部最优。 subdivision:这个参数很有意思的,它会让你的每一个batch不是一下子都丢到网络里。而是分成subdivision对应数字的份数,一份一份的跑完后,在一起打包算作完成一次iteration。这样会降低对显存的占用情况。如果设置这个参数为1的话就是一次性把所有batch的图片都丢到网络里,如果为2的话就是一次丢一半。 max_batches: 最大迭代次数。 steps: max_batches的0.8-0.9 width=352 height=352 图片大小可以减少内存 注意yolo的class预测的目标 要和names一直 复制代码
防丢失
[net] ### Net 层 # Testing ### 测试模式,测试的时候,去掉注释 # Training ### 训练模式 # batch=64 # subdivisions=16 --------------------------------------------------------------------------------------------------------- batch=64 ### 每一次迭代送到网络的图片数量,也叫批数量。增大这个可以让 ### 网络在较少的迭代次数内完成一个epoch。在固定最大迭代次数的 ### 前提下,增加batch会延长训练时间,但会更好的寻找到梯度下降的 ### 方向。如果你显存够大,可以适当增大这个值来提高内存利用率。 ### 这个值是需要大家不断尝试选取的,过小的话会让训练不够收敛, ### 过大会陷入局部最优。 subdivisions=32 ### 这个参数很有意思的,它会让你的每一个batch不是一下子都丢到 ### 网络里。而是分成subdivision对应数字的份数,一份一份的跑 ### 完后,在一起打包算作完成一次iteration。这样会降低对显存的 ### 占用情况。如果设置这个参数为1的话就是一次性把所有batch的 ### 图片都丢到网络里,如果为2的话就是一次丢一半。 ### batch/subdivisions作为一次性送入训练器的样本数量, ### 如果内存不够大,则会将batch分割为subdivisions个子batch --------------------------------------------------------------------------------------------------------- width=416 ### 输入图像的宽 height=416 ### 输入图像的高 channels=3 ### 输入图像的通道数 3为RGB彩色图片,1为灰度图,4为RGBA图,A通道表示透明度 ### 以上三个参数为输入图像的参数信息width和height影响网络 ### 对输入图像的分辨率,从而影响precision,必须设置为32的倍数 --------------------------------------------------------------------------------------------------------- momentum=0.9 ### 冲量。DeepLearning1中最优化方法中的动量参数,这个值影响着梯 ### 度下降 到最优值得速度,冲量的建议配置为0.9。 decay=0.0005 ### 权值衰减。使用的目的是防止过拟合,当网络逐渐过拟合时网络权值往往会变 ### 大,因此,为了避免过拟合,在每次迭代过程中以某个小因子降低 ### 每,decay参数越大对过拟合的抑制能力越强 ### 个权值,也等效于给误差函数添加一个惩罚项,常用的惩罚项是所有 ### 权重的平方乘以一个衰减常量之和。权值衰减惩罚项使得权值收敛到较小的绝对值。 angle=180 ### 图片角度变化,单位为度,假如angle=5, ### 就是生成新图片的时候随机旋转-5~5度 --------------------------------------------------------------------------------------------------------- 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 ### 在每次迭代中,会基于角度、饱和度、曝光、色调产生新的训练图片。 --------------------------------------------------------------------------------------------------------- learning_rate=0.001 ### 初始学习率。训练发散的话可以降低学习率。学习遇到瓶颈,loss不变 ### 的话也可以减低学习率。 ### 学习率决定了参数移动到最优值的速度快慢,如果学习率过大, ### 很可能会越过最优值导致函数无法收敛,甚至发散;反之, ### 如果学习率过小,优化的效率可能过低,算法长时间无法收敛, ### 也易使算法陷入局部最优(非凸函数不能保证达到全 ### 局最优)。合适的学习率应该是在保证收敛的前提下,能尽快收 ### 敛。设置较好的learning rate,需要不断尝试。在一开始的时 ### 候,可以将其设大一点,这样可以使weights快一点发生改变,在 ### 迭代一定的epochs之后人工减小学习率。在yolo训练中,网络训 ### 练160epoches,初始学习率为0.001,在60和90epochs时将学习率除以10。 burn_in=1000 ### 在迭代次数小于burn_in时,其学习率的更新有一种方式,大于 ### burn_in时,才采用policy的更新方式 max_batches = 50000 ### 最大迭代次数。训练达到max_batches后停止学习,如果先达到指定epochs,则停止学习 policy=steps ### 学习策略,一般都是step这种步进式。 ### 有policy:constant, steps, exp, poly, step, sig, RANDOM,constant等方式 steps=1000,40000,45000 ### 学习率变化时的迭代次数,分别是总迭代次数的0.8和0.9 scales=10,.1,.1 ### 学习率变化的比率。这两个是组合一起的,举个例子:learn_rate: 0.001, ### step:1000,40000,45000 scales: 10, .1, .1 这组数据的 ### 意思就是在0-1000次iteration期间learning rate为原始0.001, ### 在1000-40000次iteration期间learning rate为原始的10倍0.01, ### 在40000-45000次iteration期间learning rate为当前值的0.1倍, ### 就是0.001, 在45000到最大iteration期间使用learning rate为 ### 当前值的0.1倍,就是0.0001。随着iteration增加,降低学习率可以 ### 是模型更有效的学习,也就是更好的降低train loss。 [convolutional] ### 卷积层 batch_normalize=1 ### 是否做BN filters=32 ### 输出多少个特征图 size=3 ### 卷积核的尺寸 stride=1 ### 做卷积运算的步长 pad=1 ### 如果pad为0,padding由 padding参数指定。如果pad为1,padding大小为size/2 activation=leaky ...... ...... [convolutional] ### 下采样层 size=1 stride=1 pad=1 filters=18 ### 每一个[region/yolo]层前的最后一个卷积层中的filters需要修改; ### filters=(classes+1+coords)*anchors_num, ### 其中anchors_num 是该层mask的一个值.如果没有mask, ### 则 anchors_num=num是这层的ancho5的意义是5个坐标, ### 分别是论文中的tx,ty,tw,th,to。 ### filters的计算公式为: 3*(5+len(classes)),此处是只有1个类别,所以class=1, ### 所以3*(5+1)=18;3是代表yolov3有三个预测分支(3个检测层)。 ### 根据自己项目的实际情况,进行相应修改 activation=linear ### 激活函数-activation ### 包括logistic, loggy, relu, elu, relie, plse, hardtan ### ,lhtan, linear, ramp, leaky, tanh, stair [yolo] ### 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, ### anchors是使用K-MEANS获得,其实就是计算出 ### 哪种类型的框比较多,可以增加收敛速度,如果不设置anchors, ### 默认是0.5; classes=1 ### 网络需要识别的物体种类数,此处只有1个检测类别 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 ### random为1时会启用Multi-Scale Training,随机使用不同尺 ### 寸的图片进行训练,如果为0,每次训练大小与输入大小一致; ### 是否随机确定最后的预测框,显存小可设置成0 #注意:yolov3一共有3对(yolo检测层+其前面的convolutional层),记得这3对地方均要修改。 复制代码
2.小细节 classes anchor
classes 注意是检测的物体个数和name对应的 darknet 自带的K-Means 生成anchor 命令 darknet detector calc_anchors data/car/voc.data -num_of_clusters 9 -width 608 -height 608 复制代码
3.开启GPU跑
开GPU跑,可以在Makefile中设置开启GPU,GPU=1 CUDNN=1 复制代码
4.训练步骤
训练文件放到
网络异常,图片无法展示
|
5.执行命令
注意cfg文件可以copy一份自行修改
darknet detector train data/car/voc.data cfg/yolov4-obj.cfg
6.训练数据在网上找了一个
7.训练后的权重文件
data文件参数配置 这个是生成权重文件的目录 backup = data/car 复制代码
网络异常,图片无法展示
|
7.效果图
网络异常,图片无法展示
|