本文来自52CV群友Spytensor参加Kaggle目标检测比赛的总结,作者是位数据竞赛爱好者,文章非常具有实战意义。欢迎收藏~

背景

国内的数据竞赛真的缺乏交流,还是喜欢 kaggle 的 kernel 和讨论区,真硬核!这里分享一下我总结的一些目标检测中会用到的 “奇淫技巧”,牵扯到代码的我就直接拿 mmdetection[1] 来举例了,修改起来比较简单。

1. 模型选择

近一年多以来目标检测领域没有太大的动静,即使最近一段时间的 Anchor Free 和神经网络搜索框架比较热,但都没有太大的革新,当前检测竞赛圈的通用配置还是 Cascade-R-CNN + ResNeXt/ResNet 系列 + FPN+DCN 2,毕竟二阶段为王!然后就是一些根据实验结果的调整了,由于商汤没有开源 SeNet 系列的训练模型,所以如果有卡的话可以自己搞。

640.png

2. 数据预处理

如果你 baseline 选的准,那么基本上已经领先一大部分人了,但是如果在数据预处理过程中没有搞好,那基本上就跟 TOP 系列无缘了,毕竟在数据处理上能够领先的大佬,后面炼丹的技术也绝对不差。这里分为以下几个部分聊一聊数据这方面的策略:

2.1 数据扩充

如果说待检测目标具有旋转不变性,那这里就可以对目标做上下翻转、左右反转、90°*3 旋转等操作;如果目标中存在模糊的情况,在扩充的时候也可以适当做一些高斯模糊什么的;对于颜色抖动、锐度变化、随机缩放等这些操作,我实验的过程中也很难界定他们的效果,而且跟队友做相同实验时,所起的作用也不一样,总结来说,有的时候真的是随机上分。

2.2 mixup


mixup 的意思就是将两张图按照一定的比例混合在一起,详情移步论文:Bag of Freebies for Training Object Detection Neural Networks[4]。这里要说的是如何 mixup,如何选择 mixup 的对象。