TensorFlow Object Detection API用于训练SSD系列模型还是非常方便的。只要修改相应模型对应的配置文件即可。下面以ssd_inception_v2_coco.config文件为例,讲一下训练的时候需要修改的地方。
1.学习率调整
学习率是训练过程当中设置的非常重要的超参数。
这里设置了初始的学习率0.004。后面是衰减步数decay_steps和衰减因子decay_factor。
如果decay_steps=10000,decay_factor=0.95则表示每训练一万步学习率会乘以0.95,每训练一万步就乘以0.95。
前面学习率较大,加快训练速度,不要陷入某个局部最优解里;后面学习率较小,可以精细调节找到理想参数。
学习率的初始值,衰减步数和衰减因子需要多次进行尝试找到理想的组合。训练的过程也是不断摸索的过程。
2.迁移学习设置
from_detection_checkpoint: true
设置成true表示迁移学习。这时候需要指定预训练模型。站在别人的肩膀上进行训练。
如果是false则表示重新开始训练。
如果用于训练的数据量不是很大一般进行迁移学习即可。
卷积特征提取前面的都是共性的特征,一些边缘、形状等一些图像公共的特征。所以预训练模型训练出来的参数是可以使用的。后面提取的特征是目标级的特征,后面的参数需要根据自己的应用场景分类情况重新训练。
3.batch size设置
batch size在配置文件里默认的是24。
这个值如果为1表示训练一个样本更新一次参数,显然这样不容易让模型收敛,而且不能发挥GPU并行计算的特点。batch size根据自己训练机器的性能选较大的值。
4.分类个数设置
上面的例子是4种分类。
注意SSD模型标签里设置的分类个数是真实分类+1。
在博客SSD模型原理以及在Jetson-nano上部署SSD模型里讲到的ssd_coco_labels.txt里需要设置多一个类别。
在进行模型转换的时候config.py文件里也需要设置+1的分类。
SSD比较特殊,包含了背景的特殊类别。
5.数据增强设置
上面设置了训练步数是200000,这个根据自己情况进行修改。
数据增强有2种设置random_horizontal_flip(水平翻转)和ssd_random_crop(随机裁剪)。ssd_random_crop可以用于产生大目标。
这种数据增强是在训练过程当中产生数据,不是真实的把新的数据写到硬盘上。实际上也是增加了数据集,当然训练的时间也会相应增加。
不是所有的数据增强方法都是有好处的,因为有些应用场景比较特殊。
比如random_vertical_flip垂直翻转这种数据增强方式在有的场合不适用。
random_adjust_saturation 饱和度
random_adjust_contrast 对比度
random_adjust_brightness 亮度
6.先验框的设置
目标框可以根据应用场景进行设置。如果目标的长宽比不是很夸张,可以设置成
aspect_ratios: 1.0
aspect_ratios: 1.5
aspect_ratios: 0.6666
aspect_ratios: 2.0
aspect_ratios: 0.5
7.输入图片大小设置
图片大小的设置会影响到推理速度,更大的图片推理会慢一些。但是更大的图片能获得更大的特征图,可以增强对小目标的识别能力。