CVPR2020 商汤|再谈目标检测中的分类和定位冲突问题

点击上方“AI算法修炼营”,选择加星标或“置顶”

标题以下,全是干货

作者:黄飘

知乎链接:https://zhuanlan.zhihu.com/p/126359766

本文已由作者授权转载,未经允许,不得二次转载

前言

前段时间我在专栏里详细分析了目标检测中的特征冲突与不对齐问题,今天无意间又看到了商汤在CVPR2020的一篇相关论文,正好是对之前那篇的一个补充。其分析角度跟我之前所说的类似,但是解决方案增加了一些技巧,论文中提到其对于各类backbone都有~3%mAP的提升,该算法也用到了OpenImage比赛中,是对Decoupling Head框架的详细分析。这里我们一起来分析下论文内容。

一、背景介绍

前段时间我写了两篇相关的博客《谈谈CNN中的位置和尺度问题》[2]《目标检测中的特征冲突与不对齐问题》[3]。其中其第一篇里面我详细分析了CNN中平移和尺度不变性和相等性问题,并介绍了padding对于位置估计的影响。在第二篇中我们从回归和分类任务对于平移/尺度不变性和相等性要求的冲突展开了一系列讨论,并结合anchor和特征的不对齐介绍了two-stage和one-stage检测算法的相关解决方案。因此强烈建议在阅读本篇内容之前先看看上两篇

CVPR2020 商汤|再谈目标检测中的分类和定位冲突问题_第1张图片

论文一开始就给出了一副直观的示意图,图中展示的是分类和定位任务对于特征空间的敏感性对比,其中分类任务只对特定区域敏感,而定位任务对于目标整体,也可以说是目标边界都很敏感,这一点就衬托出二者对于特征的要求不同。之前的博客里我们所介绍的解决方案是尽可能减少定位和分类分支的特征共享部分。比如原始的Double Head的处理方式是在ROI Pooling之后进行解耦:

CVPR2020 商汤|再谈目标检测中的分类和定位冲突问题_第2张图片

而商汤之前《1st Place Solutions for OpenImage2019 - Object Detection and Instance Segmentation》一文中所提出的Decoupling Head算法则是更为复杂的方式,我之前的博客中好像说漏了一部分,而关于这一点的详细介绍可以在这篇文章中得到解答。

CVPR2020 商汤|再谈目标检测中的分类和定位冲突问题_第3张图片

二、 Task-aware spatial disentanglement learning

论文所提出的算法名为TSD,我们重点要关注的是图中的三个部分,我们先看Spatial disentanglement和TSD部分:

CVPR2020 商汤|再谈目标检测中的分类和定位冲突问题_第4张图片

首先作者定义了新的损失函数形式:

跟传统的方式不同,作者想通过特征变换的方式让两个任务执行得更好,关于这一点可以在[3]中的Guided Anchoring和AlignDet等算法中看到类似的思路,即基于预测的anchor框offset,通过deform conv的方式重新提取特征进行分类。这里作者令分类任务的特征变换形式为point-wise,令回归任务特征变换的形式为proposal-wise,也就是说作者让网络特征通过两种变换形式变成了任务驱动型的特征输入。

下面我们来看看两种变换具体是怎么执行的。

对于分类部分,这一部分我们比较熟悉,作者通过第一阶段的回归结果,预测了256x256x(kxkx2)大小的偏移量,其中kxk指的是ROI Pooling之后的特征图大小。通过这个offset,基于deformable conv的方式对特征重采样,重采样的特征用于分类,之前已经讨论过了。

我们再看回归部分,作者通过第一阶段的回归结果,在此基础上预测了框特征的偏移量,即256x256x2,不同的是,这个偏移量是proposal-wise的,也就是说框的整体平移,通过平移进行特征采样。

综上,TSD部分的创新在于对回归和分类都进行了特征变换,不同的是回归采用特征平移,而分类则采用我们熟悉的模式。

三、 Progressive constraint

如果我们观察了Decoupling Head框架,会发现除了回归和分类两个分支,作者还保留了原有的ROI-Pooling主干。关于这一点,作者在这篇文章也解释了,就是上文中的Sibling head+PC部分。这一部分呢主要还是为了提升TSD性能而提出来的,我们可以总结为渐进性约束,即令TSD和传统ROI Pooling主干(sibling head)结果保持一定margin,使得TSD部分的回归分类结果优于sibling head分支的结果。

CVPR2020 商汤|再谈目标检测中的分类和定位冲突问题_第5张图片

四 、实验结果

这里我简单罗列部分实验结果:

CVPR2020 商汤|再谈目标检测中的分类和定位冲突问题_第6张图片

这里作者主要想表明TSD+PC的策略对于不同的backbone都有提升,这里我再给出COCO的结果:


CVPR2020 商汤|再谈目标检测中的分类和定位冲突问题_第7张图片

可见本文的效果的确不错。

五、总结

综上呢,其实我们可以看到,绝大多数的内容都在之前的博客中讲到了,不同的地方只有回归部分特征的平移策略,以及模型的ensemble策略。这篇博客的主要目的是对之前内容的一点补充,以上这些主要讲的还是特征层面的应对策略,对于我们之前所提及的关于NMS过程中分类置信度的“不可信”问题并没有进行说明。

接下来与ICCV2019的Guassian YOLOv3进行对比,其代码链接为:https://github.com/jwchoi384/Gaussian_YOLOv3

CVPR2020 商汤|再谈目标检测中的分类和定位冲突问题_第8张图片

这个算法通过将回归任务改进为高斯分布参数的预测,从侧面预测了回归框的可靠性,进而利用这部分参数修正回归框和分类置信度,不失为一种改进策略:

不过这方面的研究还没结束,期待以后有更简洁的特征层面的解决策略~

参考资料

[1] Revisiting the Sibling Head in Object Detector

[2] https://zhuanlan.zhihu.com/p/113443895

[3] https://zhuanlan.zhihu.com/p/114700229

[4]1st Place Solutions for OpenImage2019 - Object Detection and Instance Segmentation.

[5]Gaussian YOLOv3: An Accurate and Fast Object Detector Using Localization Uncertainty for Autonomo



目标检测系列秘籍一:模型加速之轻量化网络秘籍二:非极大值抑制及回归损失优化秘籍三:多尺度检测秘籍四:数据增强秘籍五:解决样本不均衡问题秘籍六:Anchor-Free视觉注意力机制系列Non-local模块与Self-attention之间的关系与区别?视觉注意力机制用于分类网络:SENet、CBAM、SKNetNon-local模块与SENet、CBAM的融合:GCNet、DANetNon-local模块如何改进?来看CCNet、ANN
语义分割系列一篇看完就懂的语义分割综述最新实例分割综述:从Mask RCNN 到 BlendMask超强视频语义分割算法!基于语义流快速而准确的场景解析CVPR2020 | HANet:通过高度驱动的注意力网络改善城市场景语义分割

基础积累系列卷积神经网络中的感受野怎么算?
图片中的绝对位置信息,CNN能搞定吗?理解计算机视觉中的损失函数深度学习相关的面试考点总结


自动驾驶学习笔记系列 Apollo Udacity自动驾驶课程笔记——高精度地图、厘米级定位 Apollo Udacity自动驾驶课程笔记——感知、预测 Apollo Udacity自动驾驶课程笔记——规划、控制自动驾驶系统中Lidar和Camera怎么融合?

竞赛与工程项目分享系列如何让笨重的深度学习模型在移动设备上跑起来基于Pytorch的YOLO目标检测项目工程大合集目标检测应用竞赛:铝型材表面瑕疵检测基于Mask R-CNN的道路物体检测与分割
SLAM系列视觉SLAM前端:视觉里程计和回环检测视觉SLAM后端:后端优化和建图模块视觉SLAM中特征点法开源算法:PTAM、ORB-SLAM视觉SLAM中直接法开源算法:LSD-SLAM、DSO视觉SLAM中特征点法和直接法的结合:SVO
2020年最新的iPad Pro上的激光雷达是什么?来聊聊激光SLAM



你可能感兴趣的:(CVPR2020 商汤|再谈目标检测中的分类和定位冲突问题)