目标检测比赛各种tricks(从技术角度出发)

一、训练一个模型,提高分数的大体步骤如下:

  • 分析数据集
    1、可视化数据,检查数据是否有漏标、错标的问题,数据噪声太多,需要做数据清洗;2、统计训练数据的尺寸、目标框尺寸和长宽比,定义大、小目标,分析大、小目标的分布,以及类别的分布,是否存在类别不平衡。
  • 使用数据增强
    rotation, shear, perspective, horizontal flip, vertical flip,cutmix,mosaic,这些增强方式都可以尝试一下。
  • 选择合适的检测模型
    yolov5,faster_rcnn,detectors等
  • 调整超参,训练目标检测模型
    训练目标检测模型,需要修改的超参有:image size, learning rate, momentum, anchor box, and epochs
  • 在测试集上使用pseudo labeling ,将选择的数据加入原始训练集
  • 集成测试,并且使用TTA

二、各种tricks大解析

1、Pseudo Labeling

这个链接解释Pseudo Labeling解释的很清楚,可以看一看

什么是Pseudo Labeling

Pseudo Labeling就是将测试集中,测试结果中分数很高的测试图片,加入到训练集中,再训练。

Pseudo Labeling的5个步骤
1、使用原始训练集,训练一个模型,这里最好是比较好的模型;
2、使用该模型去测试你的测试集,这里一般是没有标签的测试集;
3、把测试集中置信度很高的图片,加入到原始的训练集中;
4、使用混合后的数据集再训练一个新的模型。

Pseudo Labeling为什么有用(来自网友的思考,not me)
1、Pseudo Labeling之所以有用,是因为模型训练的目的已经不是找到一个泛化性很好的模型,而是在私有测试集上表现最好的模型, 这就是伪标签之所以如此有效的部分原因;
2、解决了数据集和测试集之间的domain shift

2、TTA(Test Time Augmentation)

在使用拟合模型进行预测时,也可以应用图像数据增强技术,以允许模型对测试数据集中每个图像的多个不同版本进行预测。 可以对增强图像的预测进行平均,从而获得更好的预测性能。
1、使用增强技术从提供的图像创建额外的测试图像。
2、使用训练好的模型跑整个测试集;
3、混合测试结果。
code competitions 是对时间有限制的,因此不能使用很多argmentation,常用的是horizontal and vertical flips。
下图是TTA的简单过程:
目标检测比赛各种tricks(从技术角度出发)_第1张图片

3、WBF(weighted-boxes fusion )

论文地址:https://arxiv.org/abs/1910.13302
github地址:https://github.com/ZFTurbo/Weighted-Boxes-Fusion
目标框加权融合,是在实时性要求不强时,多个模型集成的时候,用来将多个模型的预测结果结合起来的方法。NMS 和soft_nms都是在单个模型操作的,WBF适用于多个模型的融合,这个方法一般打比赛的时候使用。
WBF算法流程如下:
1、所有模型的预测结果放到一个列表B中,并且根据预测分数,从高到低排序;
2、生成一个空的列表L和F,用于放置目标框的聚类和融合。L中的每个位置是一群框的聚类,F中的每个位置是一个目标框,是L中对应位置的聚类群中目标框的融合。
3、遍历B中的预测框,找到B中的预测框属于F中的哪一个聚类结果,判定标准是,B中预测框与F中的每个位置(F中每个位置放的是每个聚类族的融合结果)计算IOU ,若IOU大于阈值,论文中该阈值设为0.55,就属于哪个聚类。
4、若是没有匹配上,就在L和F中生成新的聚类。
5、如果匹配上,把该目标框加入到L中的对应聚类中,然后在F中更新相对应的聚类结果。
6、同一个聚类中融合T个box的公式,其中C是预测框的分数,
C = ∑ i = 1 T C i T C = \frac{\sum_{i=1}^TC_i}{T} C=Ti=1TCi X 1 , 2 = ∑ i = 1 T C i ∗ X 1 , 2 ∑ i = 1 T C i X1,2 = \frac{\sum_{i=1}^TC_i * X1,2}{\sum_{i=1}^TC_i} X1,2=i=1TCii=1TCiX1,2 Y 1 , 2 = ∑ i = 1 T C i ∗ Y 1 , 2 ∑ i = 1 T C i Y1,2 = \frac{\sum_{i=1}^TC_i * Y1,2}{\sum_{i=1}^TC_i} Y1,2=i=1TCii=1TCiY1,2
7、处理完B中所有的预测框,并且F中的聚类族都计算了融合后的框,我们需要对F中融合后的框的分数re-scale一下,需要把这个分数值,乘以该聚类族中框的个数T,然后除以模型个数N,如何某一个聚类中目标框的个数比较少,也就是模型的少数框预测,因此我们需要把这种情况下融合的框的分数值降低:
C = C ∗ m i n ( T , N ) N C = C * \frac{min(T, N)}{N} C=CNmin(T,N)

你可能感兴趣的:(目标检测,目标检测,深度学习,计算机视觉)