2020 年 6 月 19 日,堪称计算机视觉领域「奥斯卡」的国际顶会 CVPR 2020 首次以线上形式完美落幕。各个 workshop 也都公布了各自举办挑战赛的结果,其中第三届 UG2+ 挑战赛公布了最终榜单,来自深兰科技北京 AI 研发中心的 DeepBlueAI 团队斩获了「雾天条件下物体检测」赛道的冠军。我们可以通过这篇文章来了解一下 DeepBlueAI 团队的解决方案。
UG²+介绍
在许多新兴的 AI 应用领域,如无人机、自动/辅助驾驶、搜索和救援机器人、环境监测、安全监视、运输和检查,都依赖于计算机视觉的室外环境感知与理解。这类系统涉及任务比较广泛,对于目标任务,包含检测、识别、分割、跟踪和解析。
虽然这些任务在固定的环境和条件下取得了一定的成果,但是如果在没有条件限制的环境中(如移动平台、恶劣天气、光照条件差等),视觉感知和理解算法的性能将受到很大的影响,因此主办方根据不同的环境条件,举办了相应的挑战赛。
UG2+Prize Challenge 是 CVPR 会议下的一个 Workshop,继第一届(CVPR’18)和第二届(CVPR’19)的成功举办,主办方在 CVPR 2020 开展了第三届 UG2+Prize Challenge,该挑战赛包含以下两个赛道:
Track I Object Detection In Poor Visibility Environments
Track II Flatcam For Faces: Enhancement, Reconstruction, And Verification
其中赛道 1 又分为三个子任务:
(Semi-) Supervised Object Detection in Haze Conditions
(Semi-) Supervised Face Detection in Low Light Conditions
Sea Life Detection in the Underwater Condition
DeepBlueAI 团队在赛道 1 的第一个子任务取得了冠军的成绩。
赛题介绍
Sub-Track 1 :(Semi-)Supervised Object Detection in Haze Conditions 主办方提供了一组交通监控中采集的雾天图像,总计 4332 张图片,并将图中的汽车、巴士、自行车、摩托车、行人这几个类别进行了标注,总计 41113 个标注框。
评测指标:类似于 MS COCO 数据集的评估方案,评测将使用 APIOU=0.50 进行评估。
在这次挑战赛中,主要的难点包含以下几个方面:
1. 可视条件差、图像模糊
可视条件差是这个赛道核心问题,雾天收集的数据特点就是能见度低,图像模糊,远处的物体不容易被检测与识别,容易造成大量的目标漏检、误检,从而导致 mAP 效果下降。
2. 图片数量少,数据分布不平衡
总共只有 4000 多张带标注的图片,增加了训练难度,再加上数据分布的不均衡,很难划分一个具有代表性的验证集,很可能导致模型不具有泛化能力,在新的测试集上表现会不如预期。
检测器
我们先通过常规检测所累积的经验构造出一个 baseline:
Baseline = Backbone + DCN [1] + FPN [2] + Cascade RCNN [3]
这套 pipeline,也是去年冠军团队所使用的方法,在这里我们沿用这套算法,以此为基础进行改进。
通过观察实验结果发现,模型误检情况远多于漏检,经常出现一个目标有多个检测结果,并且这些检测结果之间无法使用 nms 去除。归纳为两方面原因。
1. 模型自身能力不足,回归分类能力差,导致大量误检;
2. 负样本不足,由于样本个数限制,模型会在一些模棱两可的地方检测出置信度较高的结果,无法通过阈值去处理这些误检结果。
根据目前结果做了一下几个方面的改进:
1. Double Heads [6]
当需要提升模型能力时,有 2 个比较简单高效的方法,一是使用更强的 backbone,二是提高 RCNN 中分类检测 head 的能力,通过实验比对,我们最终使用了 double head 的结构(如下图所示)。
▲ Double Heads
Double head 采用分而治之的思想,将原始 head 解耦为 2 个独立的分支,针对不同的需求设计 head 结构,通过对比实验可发现:使用 FC-head 做分类,Conv-head 做回归,可以得到最好的效果。
因为分类更多地需要语义信息,所以使用全连接层。而坐标框回归需要更多的空间信息,因此使用卷积层。当然这种方法会增加计算量。在平衡速度和准确率的情况下,最终我们选择了 3 个残差 2 个 Non-local 共 5 个模块。
2. FFA-Net
期初根据赛题的描述和对数据的分析,我们团队首先对图片进行去雾处理,然后再进行检测。因为现在有许多比较成熟的去雾算法,这些算法也不会更改物体的位置,所以标注完全不用更改。抱着这个想法我们开始进行对比实验,来验证去雾算法的有效性。
首先使用了何恺明比较经典的暗通道先验去雾算法,但根据前两轮的得分,以及可视化结果我们放弃了这个方法。
之后我们又在 Faster-rcnn 相对较小的模型上测试了基于深度学习的去雾算法,GCANet、FFANet,用相应去雾算法的输出当做 Faster-rcnn 的输入。
▲ FFA-Net 处理训练集结果
对比结果如下表所示:
根据结果来看 GCANet 所处理的结果得分较差,但 FFANet 和原数据集得分比较类似,虽然没得到相应的提升,但却是一个很好的数据增强方法,因为类似这种图像模糊的数据集上,像素级别的数据增强在此数据集上很容易导致图片原始结构的破坏,从而导致 AP 效果下降。
现在我们得到一个切实可行的数据增强方式,所以将 FFA-Net 的处理结果与原始图像合并作为新的训练集进行训练。
因为图片总体数量较少,并且有较严重的数据不平衡情况,所以合理的数据增强方式会比增加模型复杂度之类的方法更为直接有效。
实验细节:
我们将 Cascade rcnn + DCN + FPN 作为我们的 baseline 将原有 head 改为 Double head 将 FFA-Net 处理过的数据集与原数据集合并训练 Augmentation Testing tricks
实验结果(本地验证集)
由于最终结果以 docker 形式提交,为了保证模型效果,并没有采用多模型或者多尺度融合。因为融合使用 soft_nms,很多框并不会去掉只是变为低分结果。尤其在这个数据集上,模型误检较多,多模型或多尺度融合后会引入更多的误检框,很可能导致得分会变得很低。
参考文献
[1] Dai J, Qi H, Xiong Y, et al. Deformable Convolutional Networks[J]. 2017.