2018 COCO+Mapillary 联合挑战赛有实例分割、全景分割、人体关键点检测和人体密集姿态估计 4 类任务共 6 个赛项。中国战队摘取全部冠军。
实例分割在区分异类物体的基础上进一步区分同类物体及其 ID;人体关键点检测模型区分关节、头部和身体等关键结构,构建人体姿态的高级语义信息。全景分割通过融合语义分割与实例分割,将一张图像分割为不同的前景与背景,旨在生成丰富而完整的连贯性场景分割。
俞刚认为,现代目标检测的技术流程为输入(图像)> Backbone(主干网络)> Head(出口)> NMS(后处理),深度学习很多方法都依照这一流程。
比如 Faster R-CNN,其利用深度卷积网络作为 Backbone,并从原始图像中抽取一张特征图。随后根据 RPN 输出的候选框截取主干网络输出的特征图,并作 RoI 池化得到最终的 Head;而最后一个后处理过程 NMS 则搜索局部极大值、抑制非极大值元素。
正因为检测和分割等任务的处理框架已整体成型,在 COCO 竞赛以及实际应用中,各个环节的创新变得格外重要。
针对 2018 COCO + Mapillary 挑战赛、检测&分割新探索以及团队研究三个方面,俞刚博士条分缕析,系统介绍了旷视科技的技术突破与团队创新;其中检测与分割将基于上文介绍的整体流程,主干网络、Head 和批量大小等方面的创新环节也将作具体探讨。
以下是机器之心对俞刚博士的专访。
2018 COCO + Mapillary 联合挑战赛
机器之心:在去年的 COCO 挑战赛中,旷视在三个 track 中同样也获得了最好的水平,那么相比之下,这一次旷视采用了哪些新策略?
俞刚:这一次比较新的策略主要体现在赛前准备、团队组成和算法创新上。那第一点就是准备方面,就是我们这次准备会比去年准备会更充分一点,因为去年第一次参加比赛,其实经验并不多。
首先对于这次赛前准备,我们可以分成三个阶段,第一个阶段可能是一个比较发散的过程。刚开始我们有很多大方向,想知道某一点哪个方向可能会更科学一点,这就相当于选择不同的设计路线。这个阶段会经历一个月或一个多月一点,思考讨论的频率是一周一次。
第二个阶段,大概到比赛前一个半月的时候,我们会根据前期的探索确定具体路线,并优化整个流程里面的细节。这一个阶段讨论的频率大概是一周两次,我们经常会脑洞一些新的想法,完善整个流程的一些细节。
最后第三个阶段是前三周,目标是优化 Pipeline 的所有细节。这一个阶段每天都会讨论与思考,并尽可能把一些很细节的结构做得更极致。
其次从团队组成来说,我们去年第一次参赛,所有人都是新人,但是今年好处就是有一些经验丰富的「老人」。所以每个 Track 和比赛都是一个老人带上多个新人,希望以老带新,把团队锻炼起来,我觉得这是一个比较差异的地方。团队的培养和锻炼对于我们旷视来讲是打比赛的一个非常重要的目的。
最后对于算法来说,第一年参加比赛时算法的积累还比较小,细节积累反而更多。今年的话,我们对问题理解会更深入一点,同时有蛮多新的创新。
先从实例分割任务开始说起,我们的突破主要在 backbone 以及 head 上面。Backbone 我们使用旷视最新推出的 ShuffleNet V2,并且在大模型上面做了很多尝试。ShuffleNet V2 最早的设计初衷给出了一些设计 backbone 的原则,这些原则在大模型上面也很适用。我们内部大模型已经有超过 30G FLOPs,并且在 ImageNet 数据集上面精度高于市面上 report 的结果。
最重要的是,我们的 backbone 针对检测以及分割任务做了优化设计,比如增加 receptive field 等。Head 上面我们提出了一种新结构,叫做 Location Sensitive Header, 主要的 motivation 是在 head 上面把 localization 相关的 (框的定位以及分割)merge 在一个 branch 出,然后把分类在另一枝出。
这样可以避免分类任务跟定位任务的相互影响。同时,我们对定位那支的 head 加厚,增强对定位的效果。从 loss 上面来讲,我们引入了 Mask Edge Loss,对分割的结果做更精细的监督处理。
全景分割我们主要是分别处理 stuff 以及实例分割,然后做后处理的 Merge 操作。Stuff 方面,我们针对有些位置的类似 appearance 但是不同类别的问题提出了一种新的 Multi-stage 的 context loss。在做 stuff 的时候,希望引入物体 (things) 的监督信号,从而增强网络的 representation 能力。另外,在 merge 上面,我们引入了一种新的后处理策略,可以自适应地学习物体的上下层次关系,避免歧义。
人体姿态估计这个任务,在去年的基础上面,我们今年主要针对 backbone 提出改进,引入了一种 cascade 的 backbone 结构。区别于传统的 Hourglass 结构,我们网络内部增加了多个 stage 的信息通道,同时不同 stage 的学习目标也是有差异的。前面 stage 希望是粗略定位简单的关键点,后面的 stage 会不停的对关键点的定位进行 refine,同时希望能解决困难的关键点定位。
机器之心:在今年的挑战赛中,是不是更注重于目标分割,而不是边界框检测?
俞刚:虽然今年的比赛任务取消了边界框检测,但我们做法其实还是依赖于有检测框的;最后的算法其实分成两步,第一步会生成了一个检测框,第二步会训练一个实例分割模型。这个实例分割模型一开始其实不依赖于独立训练的检测框,但是在做推断的时候,我们会把检测框模型的 RoIs 拿过来替换实例分割模型的 RoIs。这使得我们相对有更好的检测框,并对 Detection 模型的候选框做一个分割(Mask)。
因此整个实例分割任务相当于分割为了两个任务,第一个任务即预测边界框的检测任务,第二个是基于这个检测任务输出一个可能的 Mask。检测框的目的只是保证召回率(Recall),即确保大多数物体都能检测到。而 Mask 的目的是给定一个候选检测框,我们希望模型能将目标整体画地更精细一些。
机器之心:实际参与挑战赛的模型会采用模型集成等技巧提升准确度吗?
俞刚:这次竞赛本质上来说一共三个任务,即实例分割、全景分割和关键点检测。正如前面所说实例分割可以分成两支,其中对于目标检测分支,我们会集成多个模型。这一分支大概集成了三个检测模型的结果,并希望得到更好的候选框。另一实例分割分支其实只使用了单个模型,所以单看任务本身的话实际只使用单个模型.
对于第二个全景分割任务,我们也是用了一些模型集成技巧,而且也有一些涨点。最后的关键点检测也会使用更多模型,但涨点并不多,大概只有零点几的收益。
此外对于全景分割的集成,首先全景分割可以视为两部分,即 Stuff 和 Thing。我们最开始是尝试使用端到端的方法将这两部分组合在一起,但发现组合在一起会产生性能上的损失,且短期内做不到让这两部分形成互补的关系。最后我们分别处理这两件事,并通过一些后处理方式将它们结合在一起。这种结合的方式非常重要,它能使实例分割与语义风格产生互补的效果,同时涨点比较多。
人体姿态估计这个任务,我们也用了模型集成,但是涨点不多。
旷视科技在检测与分割上的新探索
如前文所示,现代目标检测的基本框架基本可以表示为输入、 Backbone、 Head(出口)和 NMS(后处理)五个部分,俞刚博士表示这其中暴漏了五个潜在的难题:
Backbone,目前主要使用基于 ImageNet 的预训练分类模型,比如 VGG-16、ResNet、DenseNet 等,可以令其更适合检测与分割任务;
Head,传统的两阶段网络慢的主要原因在于 Head 太厚,可以对其进行加速;
Scale,图像中物体的尺寸变化很大,大到 2k x 2k,小到 10 x 10,如何使神经网络算法更好地处理物体尺寸的变化是一个非常有趣的话题;
Batch Size,传统目标检测器的 batch size 非常小,为什么不尝试使用更大的 batch size 呢?
Crowd,无论是传统还是现代目标检测器,都会使用到一个叫做 NMS 后处理步骤,这种方法无法处理多个重叠的物体。
机器之心:旷视的在目标检测上的研究主要是在于细节上,包括骨干网络、目标的尺寸变化和密集型检测等,这一次的竞赛也会用到这些研究吗?
俞刚:在比赛中其实我们用得更多的是主干网络,它在实际应用占比会很大,但是 Scale 的变化和 Crowd 的数据影响并不大。原因很简单,因为 COCO 数据集本身是从互联网中收集的标准图像,它会有自己固定的分布。该数据集图像本身就不会很大,因此对目标尺寸的变化也不会很敏感。其次对于密集型检测,COCO 数据集本身并没有太多密集的目标,因此 Crowd 问题也不是非常明显。但是密集型场景在实际应用中会存在很多问题,我们需要针对这一问题做更多的优化。而这一次更重要的是在主干网络、Head 与损失函数等方面的改进。
首先对于主干网络,其实我们会发现各大队伍都会使用比较大型的网络作为 Backbone,而旷视在主干网络上也有非常多的研究,包括张祥雨博士提出的 ShuffleNet 以及最近的 ShuffleNet v2。其实我们针对检测与分割网络还提出了一种新型的 DetNet 架构,它不仅会保留感受野的信息,同时还会保留空间分辨率的信息。Backbone 在检测和分割任务中占据了很大的计算量,它与 Head 两部分是我们重点优化的方向。
旷视在主干网络上有非常深的积累,小到几兆十几兆,大到十几 G 参数的模型都会有积累。这种积累一般来说即什么样的模型段需要用什么样的结构,而这个过程中的细节选择也非常讲究,因此我们认为旷视在主干网络的积累还是非常独到的。第二个比较重要的部分是 Head,我们希望把 Head(输出的特征图)变轻变合理。我们以前就有关于 Light-Head R-CNN 的研究,今年也会再有新研究对 Head 做优化,其主要逻辑是设计一个定位更鲁棒的结构。
最后比较重要的是损失函数的设计,我们这一次竞赛在全景分割里面还是对损失函数做了一些创新,例如 Multi-stage context loss, Residual L2 loss 等,这些创新最后对结果的影响还是挺大的。在 COCO stuff 任务中,我们需要对背景类或那些不是物体类别的类进行分类,但是发现很多时候这些 stuff 根据颜色纹理等特征很难区分。
例如背景是一块草坪,那么它的类别可能是 grass 或 playground,但是如果能加上一些实例分割方面的语义信息,例如有一个人在踢球,那么它对类别的判断会更准。所以在损失函数上,我们希望把这些语义信息引入到里面去,使得对最后的影响更好。这种损失函数的改进,也可以视为在全景分割中,希望语义分割与实例分割能相互促进。
机器之心:对于目标检测的主干网络,旷视提出了一种名为 DetNet 的网络,相比于传统的 ResNet 或 DenseNet,它有什么特点?
俞刚:很多主干网络基于 ImageNet 进行预训练,因此它是一个分类任务,而完成这种任务的网络结构是一种金字塔形状,底层的特征图尺寸会非常大,而越往上面特征图越小,这一变小的目标是希望能获得更多的信息,它需要整张图的所有信息进行分类。但检测不一样,它是一种像素级的分类任务,每一个像素都需要做一些预测,所以如果把所有特征图压缩到一个点的话,信息损失非常多,尤其是空间上的信息损失。所以我们的想法是在预训练主干网络时,希望它不会丢弃空间信息,同时还能抽象出高级语义信息。
相较于 FPN 和一般的分类网络,DetNet 的改动相对简单,但是效果非常明显,即在后面几层不做下采样,而是增加 dilation,从而保留了一定空间分辨率的特征图。另外,还会把 P6 加进去一直训练。
具体而言,DetNet stage 1,2,3,4 与 ResNet 设置相同,从第 4 层的输出开始,每层之后会做一个 16x 的下采样;做 ImageNet 预训练时会接一个 14x14 GAP 和一个 FC-1000,训练完之后再把这两部分去掉。可以看出 DetNet 结构上来讲和 FPN 类似,只不过是把 ResNet-50 替换为 DetNet,想法直观而简单。
机器之心:从 R-CNN 到 R-FCN,两阶段的目标检测框架都在尝试降低计算力,且 Head 过厚是计算慢的主要原因,那么旷视提出的 Light Head RCNN 有什么样的提升,它的出发点是什么?
俞刚:R-FCN 是对 Faster R-CNN 的改进,它主要会使用全卷积网络代替全连接网络,而 Light Head RCNN 可以视为这两种方法的结合体。首先第一点,R-FCN 解决了候选框复用的问题,但是空间分辨率却丢失很多,因此需要通过增加大量的通道来弥补这一损失,导致通道过多(4000+ 维),特征图过厚。而 Light Head RCNN 所做工作就是去除这些过多的通道,发现对速度影响很明显,对结果几乎没有影响。
另外一点是在原来的 R-FCN 后面加上一些全连接层,而不是直接输出预测,这对最后的效果其实还是有非常大的提升。从本质上来说,前面 R-FCN 给出的是一种比较抽象的特征机制,而全连接层会将这些抽象的特征组合成更加精确的类别。此外,由于 Light Head RCNN 将特征图的通道数降得很低,因此再接入全连接层也不会出现参数量过多的情况。
因此总体上,Light Head RCNN 将 R-FCN 的特征图变得非常「薄」,由 3969 的通道数降为 490。同时结合了 Faster R-CNN 的全连接层以实现更准确的分类。
机器之心:在最近的 ECCV 2018 中,何恺明的 Group Normolization 获得了最佳论文荣誉提名奖,它降低了批量过小时采用 BN 的影响。您怎么看待这篇论文,旷视在 batchsize 大小上有什么样的探索?
俞刚:在一般的目标检测框架中,Batch Size 往往很小,比如 R-CNN 和 Faster RCNN 的为 2,在一些最新的工作比如 RetinaNet 和 Mask RCNN 中,Batch Size 也仅为 16。然后何恺明的 Group Normalization 在我们没办法提高批量大小的情况下是比较科学的一种方法,GN 把通道分为不同的组,并计算每一组之内的均值和方差,以进行归一化。GN 的计算与批量大小无关,其精度也在各种批量大小下保持稳定。
但是在很多情况下,我们其实用的并不是很多,因为 GN 在批量受限的情况下可能会比较有用,但是在批量不受限的情况下,它的意义可能不是那么大,我们还不如使用一般的 Batch Normalization。但是如果模型的输入是视频流,里面有非常多的视频帧,那么在这种情况下因为显存受限很难有比较大的批量,因此 Group Normalization 在这种任务中的价值就会非常大。
此外,增加批量大小通常需要配置更高的学习率以保持精度,但是在物体检测中,高学习率很可能导致模型无法收敛。因此旷视在 Batch Size 上也做了一些研究,并提出了一项名为 MegDet 的解决方案。MegDet 在训练早期借助「warmup」学习率策略逐渐提高学习率,并引入多 GPU 批归一化(CGBN)以更好地统计 BN,这样就能解决精度和收敛问题。
旷视科技团队与研究
机器之心:目前旷视在检测与分割方向的团队构成都是怎么样的,会划分更细致的研究方向吗?
俞刚:我们 Detection 组的「Detection」是比较广义的定义,包括检测、分割、关键点和跟踪等等。从整体上来说,大多数员工都是在做目标检测相关的工作,同时会支持很多产品的落地。但是我们内部的训练机制是希望所有同学都能了解广义 Detection 所涉及的任务,例如主做目标检测的同学同时还需要了解语义分割和关键点检测等研究内容。
机器之心:您认为在工业中做计算机视觉的研究和学界中做研究有什么不同?在旷视做研究都有什么样的优势?
俞刚:就工业界而言,我们更侧重一些实际产品的落地,也会做一些更远方向的探索,但是我们首先会判断这个方向会不会有用。所以从本身来讲,不管是短期内落地还是长线应用,我们判断的标准一定是认定这个方向在实践中会比较有用。但是学术界可能会做一些更长期、形式更发散的的探索,甚至可能做一些比如说深度学习下一代方法或后续的发展是什么。工业界的好处在于目前有非常多的资源和数据,因此对于大多数研究者来说,工业界会有很大的施展空间。
对于在旷视做研究的优势,我认为主要有几个方面,包括创新氛围、平台、团队知识共享和技术积累等。首先是创新氛围,整个研究院从孙剑老师开始就非常鼓励尝试一些新的想法和实验。因为我了解过其它一些研究院,其实很多都不一定是在算法层面或细节上的创新,他们主要是研究一些开源代码或论文复现,并在本地运行或落地到产品中。而旷视会很鼓励做一些原创性的技术或尝试,我认为这是非常不错的氛围。然后从公司平台角度来说,包括计算资源、数据以及内部非常稳定的深度学习框架都很有帮助。
在团队方面,我们的内部培训机制还是很科学的,我们希望将每一个人都培养成有独立思考与创新的研究者。这可能体现在多个方面,首先我们希望每个人能将自己的实验、自己的想法、自己的一些经验分享给大家。因为每个人都只对自己的实验与想法比较清楚,而通过分享能激发出一些新的东西来。其次是我们鼓励有一些比较发散的想法,并通过实验判断这一想法能不能行。
最后对于研究的积累,其实我们做 Detection 已经两年多,读过、复现过市面上很多很好的论文,对于一些新的问题,比如产品中的实际问题或者下一代检测的方向,我们也有很多深入的理解和探索。这一连串的东西其实是非常重要的无形资产,对大家的成长是非常有价值的。
俞刚博士简介:
俞刚博士现为旷视科技 Research Leader、Detection 组负责人,2014 年毕业于新加坡南洋理工大学。博士毕业后在南洋理工大学从事 research fellow 的研发工作。2014 年底加入旷视科技公司。其主要研究方向主要集中在计算机视觉以及机器学习方面,包括物体检测,语义分割,行人姿态估计以及行人动作行为分析。自 2010 年以来,已经在顶级会议如 CVPR, AAAI, ECCV 以及顶级期刊如 IEEE Transaction on Image Processing, IEEE Transaction on Multimedia 等上面发表学术论文二十余篇。同时著有书籍一本。俞刚博士带队参加 2017 COCO+Places 挑战赛获得检测第一名,人体姿态估计第一名;接着,带队参加 2018 COCO+Mapillary 挑战赛,获四项第一。