找回密码
 立即注册
查看: 234|回复: 0

目标检测算法优化技巧

[复制链接]
发表于 2022-9-25 17:53 | 显示全部楼层 |阅读模式
整理不易,手有余香请点赞!
Bag of Freebies for Training Object Detection Neural Networks
<hr/>Abstract
Training heuristics greatly improve various image classification model accuracies [8]. Object detection models, however, have more complex neural network structures and optimization targets. The training strategies and pipelines dramatically vary among different models. In this works, we explore training tweaks that apply to various models including Faster R-CNN and YOLOv3. These tweaks do not change the model architectures, therefore, the inference costs remain the same. Our empirical results demonstrate that, however, these freebies can improve up to 5% absolute precision compared to state-of-the-art baselines.
启发式训练方法大大提高了各种图像分类模型的准确性[8]。 但是,目标检测模型具有更复杂的神经网络结构和优化目标。 训练策略和流程在不同模型之间差异很大。 在本文中,我们探索适用于各种模型(包括Faster R-CNN和YOLOv3)的训练调优方法。 这些调整不会更改模型架构,因此,推理时间保持不变。 我们的经验结果表明,与最先进的基准相比,这些freebies可以提高高达5%的绝对精度。
1. Mixup



简单来讲就是将两张图片通过不同的比例进行融合,同时图片对应的one-hot编码也以相同的比例相乘,从而构造出新的数据集。本质上,mixup在成对样本及其标签的凸组合(convex combinations)上训练神经网络,可以规范神经网络,增强训练样本之间的线性表达。其优点是:

  • 改善了网络模型的泛化能力
  • 减少对错误标签的记忆
  • 增加对抗样本的鲁棒性
  • 稳定训练过程
本文提出了针对目标检测的视觉连贯的mixup方法(Visually Coherent Image Mixup for Object Detection),操作流程如下图所示:


2. Classfication Head Label Smoothing

Label Smoothing也是上一篇分类中使用到的trick, 在目标检测问题中也一样适用。Label Smoothing 原理简单来说就是:在分类的时候,比如二分类把原先的标签(0,1) (称为hard target) 转成 soft target,具体方法就是
y' = y (1  α) + α/K \\
这里α 是个超参数常量,K就是类别的个数 。



Softmax



分类算法的交叉熵损失函数

假设K=5,α=0.1,那么原来y=[0,0,1,0,0],现在y’=[0.02,0.02,0.92,0.02,0.02]。这样在公式2中,当y'处于非真实标签时仍然有损失值(比如0.02),就使得pi不会非常接近1,这就降低了过拟合风险。
3. 数据预处理

在图像分类问题中,一般都会使用随机扰乱图片的空间特征的方法来进行数据增强,可以提高模型的准确率、避免过拟合。

  • 随机几何变换:随机抠图、随机膨胀、随机水平翻转和随机resize。
  • 随机颜色抖动:亮度、色调、饱和度、对比度。
4. 训练策略

使用余弦学习率+warmup的方法。


图中(a)是常见的step修改策略和cosine修改策略+warm-up的学习率变化对比图,可以看到cosine在初始和结束阶段的变化都比较缓慢,在中间部分变化相对快一些,整体而言相比step方式变化会更加平稳一些,这种方式有利于训练过程的稳定,包括warm-up的引入,也是为了训练的起始阶段能够更加稳定地进行。
5. 跨卡同步Batch Normalization

Synchronized Batch Normalization,因为目标检测算法的单卡batch size一般不能设置得像分类算法那样大,但是较小的batch size对于单卡计算BN层参数而言并不是很有利,
6. 多尺度训练

和YOLOv3中的训练方式一样。从{320,352,384,416,448,480,512,544,576,608 }中选择一个尺度进行训练。
随机尺度训练是指在模型训练阶段采用随机大小的数据进行训练,比如当前批次或epoch采用320×320大小的输入,但是在下一个批次或epoch则采用416×416。这种做法来自YOLO算法,尺寸一般在固定的几个数值中随机选择,比如{320, 352, 284, 416, 448, 480, 512, 544, 576, 608},相邻数值相差32,表示stride。
总结

数据
1. 数据预处理

  • 随机几何变换:随机抠图、随机膨胀、随机水平翻转和随机resize。
  • 随机颜色抖动:亮度、色调、饱和度、对比度。
2. Mixup

  • 改善了网络模型的泛化能力
  • 减少对错误标签的记忆
  • 增加对抗样本的鲁棒性
  • 稳定训练过程
网络结构优化

  • Resnet-50优化
  • 可变形卷积
  • SE模块
损失函数

  • Bbox loss (IOU,GIOU,DIOU,CIOU)
  • Confidence loss(YOLOv4,YOLOv5,PP-YOLO)
  • IOU_Aware_Loss(PP-YOLO)
  • Focal loss
模型训练调参
1. 多尺度训练

  • 和YOLOv3中的训练方式一样。从{320,352,384,416,448,480,512,544,576,608 }中选择一个尺度进行训练。
2. Classfication Head Label Smoothing

  • y' = y(1-a) + a/K, a为超参数,K为类别数;
3. 学习率策略

  • 使用余弦学习率+warmup的方法
  • 大学习率+梯度裁剪,连续n个epochs的val acc不上升或val loss不下降时学习率衰减;
4. 模型训练加速

  • 使用更大的batch size,一般也需要等比例增大学习率;
  • 使用低精度(FP16,混合精度)进行训练。
  • Zero r(BN中的r)
  • No bias decay
  • 跨卡同步Batch Normalization
5. 其他

  • Exponential Moving Average
  • 知识蒸馏(knowledge distillation)
参考

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

×
懒得打字嘛,点击右侧快捷回复 【右侧内容,后台自定义】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Unity开发者联盟 ( 粤ICP备20003399号 )

GMT+8, 2024-7-4 11:02 , Processed in 0.090147 second(s), 26 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表