极市导读
本文为获得船只数量检测冠军的蔡劼团队方案解读,该团队使用anchor-free方法以及随机水平翻转,多尺度训练,mixup,autoaugment以及gridmask的数据增强方法。>>加入极市CV技术交流群,走在计算机视觉的最前沿
本次比赛一共包含了9902张训练集,测试集由4242张,数据采集的场景大概有10个左右,格式都比较规范,都是1080P的图像大小。类别数也只包含了boat一类。
赛题最终需要在OpenVINO平台上部署推理,同时算法精度需要大于0.6,算法的FPS需要大于5才能达到评奖的下限要求,其中评估算法精度的方法为F1 Score(IoU>0.5)。部分样例图像如下所示。
最初需要对本赛题提供的训练数据进行数据分析,分析结果如下,船只由于自身形状特点以及成像场景(远近不一)的差异导致标定框宽高比范围变化大,同时远景下的船只还暴露了本次比赛需要注意小目标的问题。
两个方面的因素决定了anchor-based的方法需要花费大量精力去设计anchor。从GT个数分析来看,本次任务也存在部分样本包含了大量的真值标定框,对于这种密集场景下的目标检出和检准也需要多注意。
接下来是本次比赛的技术展示,分为两个部分,分别对应训练和测试部署。
经过上述分析之后,我们认为目前比较适合本次比赛的方法应该是anchor-free的算法,如下图所示,anchor-based算法需要预定义一系列尺度不一,大小不一的anchor,在训练过程中基于这些anchor对目标bbox进行回归预测,而anchor-free算法则是直接从特征图上回归出特定的bbox和类别置信度,流程上更加简练,也避免了很多类似于anchor生成,anchor回归计算的操作,更重要的是后处理阶段会更简单,比如centernet中的后处理操作便可以通过maxpooling层结合一些筛选得到,避免了nms算法影响推理效率的问题。
在模型训练过程中,我们主要采用了以下数据增强方法:随机水平翻转,多尺度训练,mixup,autoaugment以及gridmask。前面两个不需要过多介绍,都是检测任务里面的常规操作,mixup通过叠加融合两张图片提升输入模型的多样性。
autoaugment则采用了谷歌之前在COCO数据集上搜索得到的policy直接迁移到本次任务的数据集上进行数据增强,其本质上就是找到一组合理的数据增强policy组合,同时提升输入样本的多样性,进一步提升模型的泛化能力。
gridmask通过动态网格状擦除原图局部区域的方式增加模型训练过程中的难度,具有较高的正则作用,基于擦除的方法本质上都是增加输入样本的难度,通过擦除也一定程度上迫使模型在学习过程中关注到样本中更丰富的代表性特征,gridmask相较于之前的random erasing和cutout等操作,避免了一大块擦除区域将重点区域整体擦除,同时动态的网格擦除方法也增加了擦除类型的多样性,有利于提升模型的鲁棒性。
在模型结构设计方面,考虑到需要在CPU平台上结合OpenVINO优化工具进行模型的优化以及部署,除了需要考虑到OpenVINO工具包的算子支持情况之外,模型首先理论计算量肯定不能太少,也不能包含太多花里胡哨的操作。好在CPU平台上grouped convolution的优化力度还算强大,其实际推理效率还是高于常规的卷积操作的,同时考虑到最新的结构性能表现较为优异,所以我们选择了RegNet作为模型backbone,其代表的是一个种群的模型。
如下图所示,该类型的RegNet遵循了一套计算公式,所以使得我们可以根据目标计算量生成对应的模型结构,最终为了平衡效率和性能,我们选择了RegNetX-400MF作为最终的backbone进行训练。
检测器模型的整体结构如下,根据现在主流的检测器描述思路,我们将其分为backbone,neck以及head三个区域进行描述,backbone上文已经介绍了。
neck我们选择了标准的PAFPN结构,对其中的通道数做了轻量化的改进,具体来说就是将其中的卷积变成了通道数为64的depthwise convolution层。
在head的设计上,我们主要引入了两个模块,一个是MultiScale Fuse,另一个是SSH Head。
MultiScale Fuse模块其实就是目前ASFF那篇文章对于多尺度特征图融合模块的一个轻量化改进,在anchor-free算法中,一般习惯采用4x降采样的特征图作为最终的分辨率去完成剩下的bbox回归以及分类工作。在设计这个MultiScale Fuse模块时为了保证推理效率,我们将softmax归一化拿掉了,这个操作其中的exp计算会比较耗时,我们采用了BiFPN中最后采用的累加后归一化的思路。
同时在多尺度特征融合上早期也考虑了concat的操作,最终没采用的原因也是因为计算量的考虑,concat先不说显著增加了通道数,同时这部分特征都是upsample到4x降采样分辨率下的特征图,其后任何一个对这个大分辨率特征图做处理的操作都会使得计算量快速上升,如果只是32x降采样后的分辨率的话,通道数升了也就升了,计算量上的影响不会特别大。
另一个head部分的改进是SSH Head,这部分的结构如下所示,结构与人脸检测领域的SSH一致,区别在于做了对应的轻量化改进,这个模块可以在输入特征图上提供多尺度感受野的效果,特别是针对本次赛题船只目标尺度差异大的问题能有较好的兼容性。
其余的训练技巧还包含了warmup,sgdgc优化器以及SWA训练等常规优化操作,特别的,针对本次采用的anchor-free模型以及F1-Score评价指标,我们对方案中的高斯图生成过程进行了微调,收缩了生成的高斯响应图,一定程度上弱化模型的召回能力,过多的bbox召回在mAP评价指标中影响较小,但是对于F1-Score指标来说影响是比较大的。如下图所示,在两种较为极端的高斯图中间,需要微调得到平衡点。
在模型测试部署方面,首先我们分析了这一次比赛要求的部署平台为单核CPU的虚拟化环境,CPU架构为Cascade Lake。因为容器化的时候只分配了一个核心,同时模型的量级也比较小并不属于计算密集型的时候,编写代码反而不需要引入多核或者多进程的操作,这样反而会降低推理效率。
同时相比于全精度fp32对部署的检测器进行推理,我们可以采用低精度进行替换,在模型并不复杂,数据场景也不复杂的时候,牺牲可接受范围内的精度损失换取效率上的提升也是比较合适的。
在模型部署过程中,我们对模型的前后处理进行了对应的优化,同时借助OpenVINO提供的Model Optimizer工具在模型转换阶段也对检测器进行了对应的优化。这部分操作分别如下:
经过上述所述操作后,我们团队在本次比赛的A榜和B榜(最终未公开)上都取得了第一的成绩。同时对本次比赛进行展望,我们认为:
如果觉得有用,就请分享到朋友圈吧!
公众号后台回复“88”获取严彬:STARK-
基于时空Transformer的视觉目标跟踪PPT下载
# CV技术社群邀请函 #
备注:姓名-学校/公司-研究方向-城市(如:小极-北大-目标检测-深圳)
即可申请加入极市目标检测/图像分割/工业检测/人脸/医学影像/3D/SLAM/自动驾驶/超分辨率/姿态估计/ReID/GAN/图像增强/OCR/视频理解等技术交流群
每月大咖直播分享、真实项目需求对接、求职内推、算法竞赛、干货资讯汇总、与 10000+来自港科大、北大、清华、中科院、CMU、腾讯、百度等名校名企视觉开发者互动交流~