- 模型选择
服务器部署:ResNet_vd、Res2Net_vd、DenseNet、Xception
精度尽可能地高,对模型存储大小或者预测速度的要求不是很高; 移动端部署:MobileNetV3、GhostNet;
- 参数初始化
ImageNet-1k训练得到的预训练模型进行初始化(目标数据集不是很大) 自己手动设计的网络:
(1) Xavier初始化,针对Sigmoid函数提出的
(2) MSRA初始化, 使用较多RELU激活函数时
- 网络参数冗余
(1) 剪枝: 相对不重要的权值剔除,然后再重新对网络进行微调
(2) 模型量化: 浮点计算转成低比特定点计算的技术,如8比特、4比特等
(3) 知识蒸馏: 使用教师模型(teacher model)去指导学生模型(student model)学习特定任务
- 目标检测、图像分割、关键点检测等任务中选择分类模型作为骨干网络
(1) 在不考虑速度的情况下 ResNet50_vd_ssld, Res2Net200_vd_26w_4s_ssld
(2) 对图像分辨率的要求比较高,HRNet, HRNet_W18_C_ssld、HRNet_W48_C_ssld
- 模型收敛效果很差原因
(1) 检查数据标注是否正确
(2) 调整一下学习率过大(训练震荡)或者过小(收敛太慢)
(3) 数据量太大,选择的模型太小
(4) 数据预处理的过程中是否使用了归一化,如果没有使用归一化操作,收敛速度可能会比较慢
- 优化器选择(目的是为了让损失函数尽可能的小)
(1) 推荐 SGD,初始学习率设置得当并且迭代轮数充足情况下,可以获得更高的准确率
(2) 自适应学习率的优化器如Adam、RMSProp, 收敛速度往往比较快,但是最终的收敛精度会稍差一些.
- 学习率下降策略
(1) piecewise_decay(阶梯式下降学习率)
(2) polynomial_decay(多项式下降)
(3) exponential_decay(指数下降)
(4) cosine_decay(余弦下降),无需调整超参数,鲁棒性也比较高
- 选择合适的batch size
根据实际的模型大小和显存情况,可以将学习率设置为0.1k,batch_size设置为256k
- 数据增广方法
(1) 图像变换类 AutoAugment和RandAugment
(2) 图像裁剪类 CutOut、RandErasing、HideAndSeek和GridMask
(3) 图像混叠类 Mixup和Cutmix
(4) 遮挡情况, CutOut、RandErasing、HideAndSeek和GridMask等
(5) 色彩变换情况比较复杂的情况下,考虑使用AutoAugment或者RandAugment的数据增广策略
(6) Mixup和Cutmix