图灵联邦竞赛 2021届”东方国信杯”高校大数据开发大赛 赛后记录

希望今后能够多研究 kaggle 的目标检测竞赛方案,在精(排)益(列)求(组)精(合)的路上越来越顺利,越来越有自己的想法。

请注意,本文编写于 1023 天前,最后修改于 1002 天前,其中某些信息可能已经过时。

图灵联邦竞赛 2021届”东方国信杯”高校大数据开发大赛 赛后记录

参赛时间:2021/5/27 - 2021/5/31

提交次数:50+

最终成绩:初赛 A 榜 7/63,初赛 B 榜 12/60,决赛第十

00 前言

这是我第一次打目标检测的比赛,虽然参赛人数较少,也算是摸了个 top10 回来(笑死),只是离奖金的目标还有点差距,很可惜的是不能听到其他组的答辩,不能学习到很多知识,所以这个赛后记录就只有自己方案的解析了。之后会去 Kaggle 上找一些竞赛方案过来学习的,也会整理成博客。

01 EDA

1-1 数据分析

image-20210708233106080
image-20210708233106080

这是我对本次比赛的赛题理解,右边是对标注的一个可视化,左边是对数据的一个分析,

  • 左上这张图是对类别的直方图,可以看到其实是存在类别不平衡的现像的,scratch 也就是划痕的数量接近black 也就是黑片数量的十倍,所以本次的数据集是存在类别不均衡的现象的
  • 右上的图是标注框的统计,可以比较明显的看到有一个块状大小的标注框,这个框基本都是black类别的,是整片全部黑掉,此外就是特别细长的标注框,对应类别中的灰边,剩余的类别基本都是方形的不规则标注,这张图就是我们要做anchor设计的关键,我们应该设计比较大的长宽比来匹配灰边这一类别
  • 左下是标注所在的区域,这里可以反映出咱们的目标在全图范围都存在
  • 右下这张图是目标框的长宽比,我们可以看到主要集中于小目标区域,并且是存在长宽比不平衡的现象,这张图就是我们调整模型结构的关键,要适当地引入多尺度的特征捕获,有助于对长宽比不平衡的目标识别

1-2 切图

image-20210708233335756
image-20210708233335756

image-20210708233543468
image-20210708233543468

首先是训练前的数据准备,由于原图尺寸较大而目标区域占比较小,所识别的目标经过卷积后其特征图占比太小甚至几乎消失,所以我们采取了切图处理,此次选用的切图库是 sahi。原图尺寸是5800x3504,我们对原图进行1024x1024的切图,如图所示;

02 模型选择

2-1 Baseline 模型结果

image-20210708233552939
image-20210708233552939

首先我们用 mmdet[2] 训练了 Cascade R-CNN[3],先对不同的 Backbone 以及不同的测试图尺寸做了测试,A 榜性能结果如下

2-2 Baseline 结果分析

image-20210708233622017
image-20210708233622017

image-20210708234024032
image-20210708234024032

在进行多尺度测试之后 我没想到在不同的尺度下测试性能差异会这么明显,因为我是在1024分辨率下训练的,但是1024分辨率的测试性能竟然不是最高的,所以我进一步分析了原因

因为本次的赛题为缺陷检测,目标比较统一,每张图像都是由多个小单元组成的,但是训练集和测试集的小单元不数量不一样,训练集基本是 24x4 或者 24x6 个小单元,测试集是 20x6 个小单元,所以我们选择采用多尺度测试,测试集的原始图像尺寸是 5800x3504 / 6960x3504,训练集的原始图像尺寸是 5800x3504。发现在 960x960 图像尺度下的性能最高,

2-3 模型调整

image-20210708234829370
image-20210708234829370

第三阶段是对模型做了调整,首先是训了Deformable DETR_r50、Cascade RCNN_r2_101、Detectors Cascade RCNN_r50三个模型,发现性能并不能超过 Baseline,所以还是在 Baseline 上做了调整,主要是在以下几个方面做了调整:

  • 添加更多的数据增强
  • FP16 半精度训练
  • 学习率Warm-up
  • CosineAnnealing 学习率调整器

得到的性能如图,有部分尺寸下的性能能够超过 Baseline。

2-4 模型集成

image-20210708235144779
image-20210708235144779

最后选取所有 A 榜 45 分以上的结果做模型集成,模型集成的库使用的是 https://github.com/ZFTurbo/Weighted-Boxes-Fusion ,发现 NMS 的性能最高

03 比赛总结

3-1 赛后总结

本次比赛主要是熟悉了yolov5[1] 和 mmdet[2] 两个框架,以及大图像切片训练和预测。撰写了一些脚本来处理数据格式问题,然后用排列组合跑了一些模型发现并不能work,作为 Baseline 的 Cascade RCNN 反而取得了最高的性能。不过这次比赛很高兴的是通过数据分析发现了多尺度测试的地方,这是提分的关键。希望今后也能多研究 kaggle 的目标检测竞赛方案,在精(排)益(列)求(组)精(合)的路上越来越顺利,越来越有自己的想法。

3-2 未来改进

主要是有三方面的调整吧,因为这是我第一次参与目标检测竞赛,所以还有很多值得改进的地方。

  • 第一个是模型结构,现在self-attention很火,作为一种建模上下文的工具,它可以捕获当前局部区域和更加远端的区域间的关系,我想在我们这种背景比较简单的数据集上应当是有所帮助的。
  • 其次我们可以考虑多尺度结构,本次比赛数据集有大量的多尺度的目标需要检测,并且训练集和测试集之间的尺度也存在差异,所以可以尝试BiFPN,ASPP这类的多尺度结构来提升模型的性能
  • 最后是竞赛策略,Trust your Local CV,相信自己的本地分数;以及更多数据分析、结果分析以及更早开始,有更多时间和思路来改进我们的方案

04 参考资料

[1] https://github.com/ultralytics/yolov5
[2] https://github.com/open-mmlab/mmdetection
[3] Cai, Zhaowei, and Nuno Vasconcelos. "Cascade r-cnn: Delving into high quality object detection." Proceedings of the IEEE conference on computer vision and pattern recognition. 2018.
[4] Zhu, Xizhou, et al. "Deformable DETR: Deformable Transformers for End-to-End Object Detection." arXiv e-prints (2020): arXiv-2010.
[5] Gao S, Cheng M M, Zhao K, et al. Res2net: A new multi-scale backbone architecture[J]. IEEE transactions on pattern analysis and machine intelligence, 2019.
[6] Qiao S, Chen L C, Yuille A. DetectoRS: Detecting Objects with Recursive Feature Pyramid and Switchable Atrous Convolution[J]. arXiv e-prints, 2020: arXiv: 2006.02334.

评论列表