今天的主题是 Face++ Detection 组近两年持续在做的 Semantic Segmentation相关工作,代表性成果主要有 1)GCN (CVPR2017)、2)DFN (CVPR2018)、3)BiSeNet (ECCV2018)。我们先来看一段演示 Demo:

CVPR2018 DFN算法结果展示

回顾

介绍算法之前,我们先简单回顾一下语义分割(semantic segmentation)的历史。众所周知,计算机视觉有三大核心任务——分类、检测、分割,三者号称是深度学习炼丹师的“三大浪漫”。分类针对整张图片,检测针对图片的局部,语义分割则如图1所示,旨在给输入图片上的每个像素赋予一个正确的语义标签。

图 1:PASCAL VOC 2012 图片示例

传统的分割算法我们先按下不表。时间拨回到 2015 年,语义分割江湖之中,FCN 横空出世,自此 DL/NN 方法席卷了整个语义分割领域。短短几年,各个 Benchmark 的 state-of-the-art 不断刷新,成果喜人。

FCN 前期阶段,研究重点主要是解决“网络逐渐衰减的特征尺寸和需要原图尺寸的预测之间的矛盾”,换言之,就是如何解决网络不断 downsample 造成的信息损失;期间百家争鸣,百花齐放,涌现了希望保存或者恢复信息的 unpool、deconv 等方法,也出现了进行结构预测的各种花式 CRF 方法。

“大道之争”之中,碰撞出了两个最重要的设计:U-shape Structure 和 Dilation Conv,据此形成当下语义分割领域网络设计最常见的两大派系:1)U-shape 联盟以 RefineNet、GCN、DFN 等算法为代表;2)Dilation 联盟以 PSPNet、Deeplab 系列方法为代表;随着 Base Model 性能不断提升,语义分割任务的主要矛盾也逐渐渐演变为“如何更有效地利用 context”;这中间又是一番腥风血雨,我们今天介绍的 3 位主角也在其中贡献了一份力量。

介绍

语义分割任务同时需要 Spatial Context 和 Spatial Detail 。今天我们介绍的三种算法都将从这两方面分别提出各自对应的解决方案。整体对比如下:

Global Convolutional Network

第一位主角是 CVPR2017 算法 Global Convolutional Network(GCN),江湖人送外号“Large Kernel”。论文 Arxiv 链接请见: https://arxiv.org/abs/1703.02719

——Motivation——

GCN 主要将 Semantic Segmentation分解为:Classification 和 Localization两个问题。但是,这两个任务本质对特征的需求是矛盾的,Classification需要特征对多种Transformation具有不变性,而 Localization需要对 Transformation比较敏感。但是,普通的 Segmentation Model大多针对 Localization Issue设计,正如图2(b)所示,而这不利于 Classification。

图2

所以,为了兼顾这两个 Task,本文提出了两个 Principle:

  1. 从 Localization 来看,我们需要全卷积网络,而且不能有全连接或者全局池化等操作丢失位置信息。
  2. 从 Classification 来看,我们需要让 Per-pixel Classifier 或者 Feature Map 上每个点的连接更稠密一些,也就需要更大的 Kernel Size,如图 2(c) 所示。

——网络结构——

根据这两条 Principle,本文提出了Global Convolutional Network(GCN)。如图3所示,这个方法整体结构正是背景介绍中提到的U-shape结构,其核心模块主要包括:GCN 和 BR。

图3 网络结构

此处主要介绍GCN设计。正如图3(b)所示,它采用了较大 Kernel Size的卷积核,来同时解决上述的两个 Issue;然后根据矩阵分解,利用  和  的卷积来替代原来的  大核卷积。相对于原本的大核卷积,该设计能明显降低参数量和计算量。图4可视化了 Large Kernel Conv 和 普通 Conv网络有效感受野的对比。

图4

可以看到,Large Kernel Conv 的有效感受野显著增大。

——实验——

文中为了验证 Large Kernel Conv的有效性,对比了不同 Size的 Kernel,可以看到Kernel Size=15时比 Base Network整整高了 5.5% mean IoU.

此外,文中还对 Large Kernel Conv 进行了一系列讨论。

  • GCN 的有效是否得益于更多的参数?

    在GCN中,随着 Kernel Size的增加,网络参数也随之增长,那么网络性能的提升是否得益于使用了更多的参数?为了证明提升来自于设计的有效性而不是增加了复杂度,文中设计了不同 Kernel Size的GCN和普通Conv的对比实验。

通过实验结果可知,随着 Kernel Size的增加,普通 Conv的参数量远大于GCN,但是GCN的性能却持续地优于普通 Conv。

  • GCN使用 Large Kernel Size增大了感受野,是否可以通过堆叠多个 Small Kernel Size的 Conv来替代?

    文章为此设计了实验对比两者的结果。

可以看到 GCN 依然优于普通 Conv 的堆叠,尤其是在较大 Kernel Size 的情况下。笔者认为这是一个很有价值的实验,可以启发我们去思考关于网络感受野的问题。我们以往认为,通过堆叠多个小核 Conv 可以达到和大核 Conv 一样的感受野,同时计算量还更少。最常见的应用比如 VGG-Net。但是,实际上并非如此。

随着网络深度的提升,理论上网络的感受野大多可以直接覆盖全图,但是实际有效感受野却远小于此。笔者的理解是对同一个 Feature Map 进行卷积,边缘区域进行计算的次数会小于中心区域,所以随着 Conv 的不断堆叠,实际上会导致边缘感受野的衰减,即有效感受野会远小于理论感受野。

最后文中给出了在 PASCAL VOC 2012 和 Cityscapes 上完整的 Training Strategy,这在当时还是很良心的,之前的一些 Paper 对此都语焉不详。具体详细的 Training 过程请参考原文。

最终 GCN 在 PASCAL VOC 2012 和 Cityscapes 上都取得了不错的结果。

——PASCAL VOC 2012——

——Cityscapes——

Discriminative Feature Network

接下来出场的是 CVPR2018 算法 Discriminative Feature Network(DFN)。论文Arxiv链接请见: https://arxiv.org/abs/1804.09337。详细解读请见: CVPR 2018 | 旷视科技Face++提出用于语义分割的判别特征网络DFN

——Motivation——

本文总结了现有语义分割方法仍然有待解决的两类 Challenge(如图 5 所示):

  • Intra-class Inconsistency(具有相同的语义标签,不同的表观特征的区域)
  • Inter-class Indistinction(具有不同的语义标签,相似的表观特征的区域)

图5

所以,本文从宏观角度出发重新思考语义分割任务,提出应该将同一类的 Pixel考虑成一个整体,也就需要增强类内一致性,增大类间区分性。总结而言,我们需要更具有判别力的特征。

——网络结构——

本文提出的DFN主要包括两部分:Smooth Network 和 Border Network,如图6所示。

图6

Smooth Network 主要解决类内不一致性问题。文中认为类内不一致性问题主要来自Context 的缺乏。进而,我们需要引入 Multi-scale Context 和 Global Context;但是,不同 Stage 的特征虽然带来了 Multi-scale Context,与此同时也带来了不同的判别能力;因此,我们需要对这些具有不同判别力的特征进行筛选,这就诞生了其中核心的设计——Channel Attention Block(CAB)。

CAB 利用相邻 Stage 的特征计算 Channel Attention 然后对 Low-stage 的特征进行筛选,如图 7 所示。因为文中认为,High-stage 的特征语义信息更强,更具有判别力。

图7

此外,本文首次在 U-shape 结构中采用 Global Average Pooling,这个设计非常有效。ParseNet 首次在语义分割中使用 Global Average Pooling 提取 Global Context,而之后的 PSPNet,Deeplab V3 将其在 Dilation 阵营发扬光大。而本文将其应用 U-shape 的High-stage,并命名为“V-shape”。我们尝试将其迁移到 Detection 中的 FPN 结构,结果证明同样有效。

Border Network 主要解决类间低区分性的问题。文中认为具有相似表观特征的不同区域很容易被网络混淆,尤其是相邻之时。所以,需要增大特征之间的区分性。为此文章显式地引入了 Semantic Boundary 来引导特征学习。因为 Low-stage 主要关注一些细节边缘区域,而随着语义的增强,High-stage 的特征才是更多关注语义边界,所以 Border Network 采用了“反 U-shape”结构。

——实验——

文中进行了丰富的消融实验和可视化分析。

首先是对 Smooth Network 各部分的消融实验分析。可以看到Smooth Network非常有效,在PASCAL VOC 2012 Validation Set上可以达到 Single Scale 79.54% mean IoU。

而通过可视化输出,可以看到Smooth Network确实可以将类内区域变得更加一致,如图8所示。

图8

同时,文中还对 Smooth Network 和 Border Network 进行了消融实验分析。

通过可视化Border Network的输出,可以看到Border Network确实可以很好地关注到Semantic Boundary区域,如图9所示。

图9

最终,DFN在PASCAL VOC 2012和 Cityscapes上性能都达到了当时的state-of-the-art。

BiSeNet

最后出场的主角是 ECCV 2018 算法 Bilateral Segmentation Network(BiSeNet)。前面两个算法主要关注 Accuracy,探索 mean IoU 的极限;而 BiSeNet 关注于做出一个既快又好的实时语义分割算法。最终该算法在 Cityscapes 上能取得 68.4% mean IoU 105 FPS (NVIDIA Titan XP)的好成绩。当然,我们希望这篇工作能抛砖引玉,尝试探讨到底什么架构才更适合 Segmentation 任务,什么框架才能很好地同时获得充足的 Context 和丰富的空间信息?论文 Arxiv 链接请见: https://arxiv.org/abs/1808.00897

详细解读请见: ECCV 2018 | 旷视科技提出双向网络BiSeNet:实现实时语义分割

——Motivation——

本文对之前的实时性语义分割算法进行了总结,发现当前主要有三种加速方法:1) 通过 Crop 或者 Resize 限制输入图片进而减少计算量;2) 减少网络通道数,尤其是 Early Stage;3) 还有像 ENet 类似的方法直接丢掉最后一个 Stage,如图10(a)所示。

这些提速的方法会丢失很多 Spatial Details 或者牺牲 Spatial Capacity,从而导致精度大幅下降。为了弥补空间信息的丢失,有些算法会采用 U-shape 的方式恢复空间信息。但是,U-shape 会降低速度,同时很多丢失的信息并不能简单地通过融合浅层特征来恢复,如图 10(b) 所示。

图10

总结而言,实时性语义分割算法中,加速的同时也需要重视空间信息。基于这些观察,本文提出了一种新的解决方案Bilateral Segmentation Network(BiSeNet)。

——网络结构——

BiSeNet区别于 U-shape 和 Dilation 结构,尝试一种新的方法同时保持 Spatial Context 和 Spatial Detail 。所以,我们设计了Spatial Path和Context Path两部分。顾名思义,Spatial Path使用较多的 Channel、较浅的网络来保留丰富的空间信息生成高分辨率特征;Context Path使用较少的 Channel、较深的网络快速 downsample来获取充足的 Context。基于这两路网络的输出,文中还设计了一个Feature Fusion Module(FFM)来融合两种特征,如图11所示。

图11

Spatial Path 只包含三个  的 Conv+BN+Relu,输出特征图的尺寸为原图的  。为了访存比考虑,此处并没有设计 Residual结构。

Context Path 可以替换成任意的轻量网络,比如 Xception,ShuffleNet 系列,MobileNet 系列。本文主要采用 Xception39 和 ResNet-18 进行实验。可以看到,为了准确率考虑,Context Path 这边使用了类似 U-shape 结构的设计。不过,不同于普通的 U-shape,此处只结合了最后两个 Stage,这样设计的原因主要是考虑速度。此外,和 DFN 类似,Context Path 依然在最后使用了 Global Average Pooling 来直接获取Global Context。

最后,文章中提到因为两路网络关注的信息不同,属于 Different Level 的特征,所以文中设计了一个 FFM 结构来有效融合两路特征。

——实验——

本文从精度和速度两个维度,进行了丰富的分析实验。

首先文中分析了 Context Path 这边使用不同变体的 U-shape 结构的速度和精度的对比。

此处,U-shape-8s 就是文中所展示的结构,U-shape-4s 则是普通的 U-shape 设计,即融合了更多 stage 特征。可以看到,U-shape-4s 的速度会明显慢于 U-shape-8s.

文中还对 BiSeNet 的各个部分进行了消融分析实验。

文中还给出了 BiSeNet 的 GFLOPS、参数量等信息,以及在不同硬件平台不同分辨率下的速度对比。

文中给出了 BiSeNet 分别与实时性算法和非实时性算法比较的结果。

与实时性算法比较:

虽然 BiSeNet 是实时性算法,但是它的精度甚至比一些非实时性算法还高。

与非实时性算法比较:

可以看到,BiSeNet 是一种很有效的设计。当替换上大模型之后,精度甚至高于 PSPNet 等算法。另外,需要注意的是,为了和非实时性算