【转载】一文概览2017年Facebook AI Research的计算机视觉研究进展

互联网新技术新应用动态机器之心2018-03-23 01:37:06

  

本文概述了 2017年Facebook AI 研究院(FAIR)在计算机视觉上的研究进展,包括基础构建模块创新、CNN、one shot 目标检测模块等,然后介绍实例分割方面的创新,最后介绍用弱半监督方式来扩展实例分割。


特征金字塔网络(FPN)


首先我们先来介绍著名的特征金字塔网络 [1](发表在 CVPR 2017 上)。FPN 论文非常棒,要知道,构建一个可在多项任务、子主题和应用领域中使用的基线模型并不简单。FPN 是通用特征提取网络(如 ResNet、DenseNet)的扩展。你可以从喜欢的 DL 库中选择预训练的 FPN 模型,然后像使用其他模型一样使用它!


图像目标通常有多个尺度和大小。一般的数据集无法捕捉所有这些属性,因此人们使用图像金字塔(图像的多种分辨率降级),以方便 CNN 处理。但是这样很慢。因此人们使用单个尺度预测,一些人可能从中间层获取预测结果,它是在特征空间中进行的。这很好理解,在几个 ResNet 模块后放置一个反卷积层,获取分割输出(就分类而言,可能是 1x1 卷积和 GlobalPool)。现在大量此类架构在有辅助信息和辅助损失的情况下使用。


回到主题,FPN 的作者发现一种有效改善上述方法的方式。他们不只使用侧向连接,还使用自上而下的路径。这非常有效!他们使用一个简单的 MergeLayer(mode=『addition』)将二者结合起来。该想法的关键是底层特征图(初始卷积层)的语义不够强,无法用于分类。而深层特征图有更强的语义。这里还有一个优势,即自上而下的路径 FMaps(特征图),可以达到最深层网络同样的效果。这是因为结合了侧向连接和自上而下的连接。



细节


金字塔:同样大小的所有特征图属于同一个阶段。最后一层的输出是金字塔的 reference FMaps。如:ResNet,第 2、3、4、5 个模块的输出。你可以根据内存和特定使用情况改变金字塔。


侧向连接:1x1 卷积和自上而下的路径都经过两倍上采样。上层特征自上而下生成粗糙的特征,而侧向连接从自下而上的路径添加更细粒度的细节。


那篇论文中介绍了一个简单的 demo,展示了这个想法结合简单的设计思路的效果。



如前所述,这是一个可以在多项任务中使用的基线模型,如目标检测、分割、姿态估计、人脸检测,以及所有应用领域。这篇论文问世不过寥寥数月,但引用量已经超过 100!这篇论文的题目是《FPNs for Object Detection》,因此作者继续在 RPN(区域建议网络)和 Faster-RCNN 网络中使用 FPN 作为基线模型。所有关键细节这篇论文中都有讲述,这里我列出了一些要点。


实验要点


  • 在 RPN 中使用 FPN:将单个尺度 FMap 替换成 FPN。他们在每一级都有单尺度 anchor(由于使用了 FPN,所以没必要使用多尺度 anchor)。作者还展示了金字塔所有层级都共享类似的语义水平。

  • Faster RCNN:他们用类似图像金字塔输出的方式处理这个金字塔。因此 RoI 使用以下公式被分配至特定的级别:



其中 w、h 代表宽度、高度。k 代表 RoI 被分配的级别。k_0 是 w,h=224,224 映射至的级别。

  • 在 COCO 数据集上获取当前最优结果,没有任何不必要的功能。

  • 他们对每个模块的功能进行了 ablation 研究,因此他们能够从一开始就证明了自己的说法。

  • 他们还基于 DeepMask 和 SharpMask 论文展示了如何使用 FPN 进行分割建议生成(segmentation proposal generation)。


对实现细节、实验设置等感兴趣的同学应该认真阅读这篇论文。


代码


  •  Official Caffe2 - https://github.com/facebookresearch/Detectron/tree/master/configs/12_2017_baselines

  • Caffe - https://github.com/unsky/FPN

  • PyTorch - https://github.com/kuangliu/pytorch-fpn (just the network)

  • MXNet - https://github.com/unsky/FPN-mxnet

  • Tensorflow - https://github.com/yangxue0827/FPN_Tensorflow


RetinaNet:在密集目标检测中使用 Focal Loss


该架构由同一个团队所开发,也是同一个一作。这篇论文 [2] 在 ICCV 2017 上发表。该论文中有两个关键点:通用损失函数 Focal Loss(FL)和单阶段的目标检测器 RetinaNet。两者的组合使其在 COCO 目标检测任务中表现得非常好,并打败了上述的 FPN 基准结果。


Focal Loss


该论文中的方法相当聪明和简单。如果你熟悉加权损失的话,那么该方法其实就是使用了巧妙的加权,让训练更加聚焦于分类难度高的样本。公式如下所示,其含义是很明显的。



γ是一个可改变的超参数。p_t 是分类器输出的样本概率。将 γ 设为大于 0 将减小分类结果较好的样本的权重。α_t 是通常的加权损失函数中的类别权重。在论文中它被称为 α-balanced 损失。需要注意,这个是分类损失,它将和 smooth L1 损失结合,用于 RetinaNet 的目标检测任务。


RetinaNet


FAIR 竟然会发布单阶段检测器,这令人难以置信。直到目前,YOLOv2 和 SSD 仍在单阶段场景中占据主导地位。但作者指出,它们都没有接近当前最佳的结果。而 RetinaNet 可以轻松地做到,仅使用了单阶段,并且速度很快。他们称其顶尖结果源于新型损失函数的应用,而不是简单的网络(其后端为 FPN)。其中利用的思想是单阶段检测器将面临很多背景和正类别不平衡的情况(不是正类别之间的不平衡)。作者称加权损失函数仅仅是为了平衡,而 FL 是针对难度小/大的样本,而两者是可以结合的。


注意:


  • 两阶段检测器无需担心不平衡的情况,因为第一阶段就移除了几乎所有不平衡。

  • 两部分:主干网络(卷积特征提取器,如 FPN)和两个特定任务的子网络(分类器和边界框回归器)。

  • 在选择不同的组件设计时,(性能)没有太多变化。

  • Anchor 或 AnchorBoxes 是 RPN 的相同 Anchor [5]。其中心围绕滑动窗口,且与长宽比有关。大小和长宽比分别对应 32^2 到 51^2 和 {1:2, 1:1, 2:1}。

  • 在 FPN 的每一阶段,我们都有 cls+bbox 子网络,给出 anchor 中所有位置的对应输出。


代码


  •  Official Caffe2 - https://github.com/facebookresearch/Detectron/tree/master/configs/12_2017_baselines

  • PyTorch - https://github.com/kuangliu/pytorch-retinanet

  • Keras - https://github.com/fizyr/keras-retinanet

  • MXNet - https://github.com/unsky/RetinaNet


Mask R-CNN


Mask R-CNN [3] 几乎是同一个团队开发的,发表在 ICCV 2017 上,该模型用于实例分割。对于外行来说,这不过是不使用边界框的目标检测,任务是给出目标的准确分割掩码。你可以说它只是一个简单的想法,但是使之运行并成为当前最佳,为预训练模型提供最快的实现,这可是惊人的工作!


TL;DR:如果你了解 Faster-RCNN,那么 Mask R-CNN 很简单,只需要添加一个用于分割的 head(分支)。因此基本上是 3 个分支,分别用于分类、边界框回归和分割。


再次强调,其重点在于使用简单、基础的网络设计来展示该方法的效率。他们不需要什么花哨的功能就实现了当前最佳。


我很喜欢这篇论文,它很简单,但是看似简单的东西有大量解释。例如,多项式掩码 vs 独立掩码的使用(softmax vs sigmoid)。此外,它并未假设大量先验知识,也没有要解释一切。


如果你仔细查看这篇论文,你可能会找到他们(基于现有设置)的新想法无法有效运行的原因。以下解释基于你对 Faster RCNN 已经有了基础了解:


  • Mask R-CNN 与 FasterRCNN 类似,两阶段,第一阶段是 RPN。

  • 添加一个并行分支用于预测分割掩码——FCN。

  • 损失是 L_cls、L_box、L_maskLcls、L_box、L_mask 的总和。

  • 用 ROIAlign 层替换 ROIPool。这不像 ROIPool 那样将你的(x/spatial_scale)fraction 四舍五入成整数,而是通过双线性内插法找出特定浮点值的像素。

  • 例如:ROI 高度和宽度分别是 54、167。空间尺度基本上是图像大小/FMap 大小(H/h),在此语境中也叫作 stride。通常是 224/14 = 16 (H=224,h=14)。


  • ROIPool: 54/16, 167/16 = 3,10

  • ROIAlign: 54/16, 167/16 = 3.375, 10.4375

  • 现在,我们使用双线性内插法对其进行上采样。

  • 类似的逻辑适用于根据 ROIAlign 输出形状(如 7x7)将对应的区域分割成合适的子区域。

  • 使用 Chainer folks 检查 ROIPooling 的 Python 实现,并尝试自己实现 ROIAlign。

  • ROIAlign 代码可在不同库中获取,可查看下面给出的代码 repo。

  • 主干网络是 ResNet-FPN。


我曾专门写文章介绍过 Mask-RCNN,文章地址:https://coming.soon/。


代码


  •  Official Caffe2 - https://github.com/facebookresearch/Detectron/tree/master/configs/12_2017_baselines

  • Keras - https://github.com/matterport/Mask_RCNN/

  • PyTorch - https://github.com/soeaver/Pytorch_Mask_RCNN/

  • MXNet - https://github.com/TuSimple/mx-maskrcnn


学习分割 Every Thing


如题目《Learning to Segment Every Thing》所示,这篇论文是关于分割的,具体来说,是实例分割问题。计算机视觉中的标准分割数据集对于现实应用而言规模太小。即使是 2018 年最流行、最丰富的 COCO 数据集 [7] 也仅有 80 个目标类别。这根本无法达到实用的要求。相比之下,目标识别和目标检测数据集如 OpenImages [8] 就有将近 6000 个分类类别和 545 个检测类别。除此之外,来自斯坦福的另一个数据集 Visual Genome 拥有 3000 个目标类别。那为什么人们不选用这些数据集呢?因为每个类别中包含的目标数量太少了,从而 DNN 无法在这个数据集上取得足够好的性能,即使这些数据集在实际应用上更加丰富、有用。需要注意的是该数据集并没有任何分割标注,仅有 3000 个目标检测(边界框)标签类别。


接下来介绍论文 [4]。实际上,就领域而言,边界框和分割标注之间并不存在太大的区别,区别仅在于后者比前者更加精确。因此既然 Visual Genome [9] 数据集中有 3000 个类别,那么为什么不用来训练分割任务呢?这正是作者所做的,这种方法可称为弱监督学习(或弱半监督)学习,其中不需要相关任务的完整监督信息。如果他们使用的是 COCO+Visual Genome 数据集(即分割标签 + 边界框标签),这同样可称为半监督学习。


这篇论文简直不能再 cool,其网络架构有如下特点:


  • 它建立在 Mask-RCNN 之上。

  • 同时使用有掩码和无掩码的输入进行训练。

  • 在掩码和边界框掩码之间添加了一个权重迁移函数。

  • 当传递了一个没有掩码的输入时,将 ω_seg 函数预测的权重和掩码特征相乘。当传递了一个有掩码的输入时,则不使用该函数,而使用一个简单的 MLP。

  • 如下图所示:A 是 COCO 数据集,B 是 VG 数据集。注意其中对不同输入的不同训练路径。

  • 将两个损失同时进行反向传播将导致 ω_seg 的权重不一致,因为对于 COCO 和 VG 之间的共有类别,有两个损失(掩码和边界框),而对于非共有类别,则仅有一个损失(边界框)。作者使用的修改方法是:

  • Fix:当反向传播掩码损失时,计算预测掩码权重 (τ) 关于权重迁移函数参数θ的梯度,而对边界框权重ω^c_det 不进行该计算。

  • w^c_seg=τ(stop_grad(w^c_seg); θ),其中 τ 预测掩码权重。

 图 2:Mask^X RCNN 方法的细节展示。Mask^X RCNN 使用学得的权重迁移函数 τ,从对应的检测参数ω_det 预测类别的分割参数 ω_seg,而不是直接学习掩码预测参数 ω_seg。在训练过程中,τ 仅需要数据集 A 中类别的掩码数据,而在测试时可以应用到 A、B 数据集的所有类别。作者还用补充性的全连接多层感知机(MLP)增强了掩码头(mask head)。


由于 VG 数据集没有分割标注,从而无法给出在该数据集上的分割准确率。因此他们在可验证的数据集上展示结果。PASCAL-VOC 数据集有 20 个类别,全部包含于 COCO 数据集。因此,对于这 20 个类别,他们使用 VOC 的分割标注和 COCO 中这 20 个类别的边界框标签进行训练。论文展示了在 COCO 数据集中这 20 个类别上的实例分割任务结果。此外由于两个数据集包含两种真实标注,他们还对相反的情况进行了训练。结果如下图所示。


 表 2:Mask^X RCNN 的端到端训练。如表 1 所示,作者使用了 τ 的 'cls+box、2-layer、LeakyReLU' 实现,并添加了 MLP 掩码分支(迁移函数+MLP),然后使用相同的评估流程。作者还报告了 AP_50 和 AP_75(0.5 和 0.75 IoU 阈值的平均精度评估),以及在小、中、大型目标上的 AP 值(AP_S、AP_M、AP_L)。该方法使用 ResNet-50-FPN 和 ResNet-101-FPN 主干架构时(没有使用掩码训练数据)都显著超越了数据集 B 上的基线结果。


参考文献


[1] Lin, Tsung-Yi, Piotr Dollár, Ross B. Girshick, Kaiming He, Bharath Hariharan and Serge J. Belongie.「Feature Pyramid Networks for Object Detection.」*2017 IEEE Conference on Computer Vision and Pattern Recognition (CVPR)* (2017): 936-944.

[2] Lin, Tsung-Yi, Priya Goyal, Ross B. Girshick, Kaiming He and Piotr Dollár.「Focal Loss for Dense Object Detection.」*2017 IEEE International Conference on Computer Vision (ICCV)* (2017): 2999-3007.

[3] He, Kaiming, Georgia Gkioxari, Piotr Dollár and Ross B. Girshick.「Mask R-CNN.」*2017 IEEE International Conference on Computer Vision (ICCV)* (2017): 2980-2988.

[4] Hu, Ronghang, Piotr Dollár, Kaiming He, Trevor Darrell and Ross B. Girshick.「Learning to Segment Every Thing.」*CoRR*abs/1711.10370 (2017): n. pag.

[5] Ren, Shaoqing, Kaiming He, Ross B. Girshick and Jian Sun.「Faster R-CNN: Towards Real-Time Object Detection with Region Proposal Networks.」*IEEE Transactions on Pattern Analysis and Machine Intelligence* 39 (2015): 1137-1149.

[6] Chollet, François.「Xception: Deep Learning with Depthwise Separable Convolutions.」2017 IEEE Conference on Computer Vision and Pattern Recognition (CVPR) (2017): 1800-1807.

[7] Lin, Tsung-Yi, Michael Maire, Serge J. Belongie, James Hays, Pietro Perona, Deva Ramanan, Piotr Dollár and C. Lawrence Zitnick.「Microsoft COCO: Common Objects in Context.」ECCV (2014).

[8] Krasin, Ivan and Duerig, Tom and Alldrin, Neil and Ferrari, Vittorio et al. OpenImages: A public dataset for large-scale multi-label and multi-class image classification. Dataset available from https://github.com/openimages

[9] Krishna, Ranjay, Congcong Li, Oliver Groth, Justin Johnson, Kenji Hata, Joshua Kravitz, Stephanie Chen, Yannis Kalantidis, David A. Shamma, Michael S. Bernstein and Li Fei-Fei.「Visual Genome: Connecting Language and Vision Using Crowdsourced Dense Image Annotations.」International Journal of Computer Vision 123 (2016): 32-73.


原文链接:https://skrish13.github.io/articles/2018-03/fair-cv-saga



阅读原文

TAGS:数据集使用COCO 数据 集边界框