关于作者:@李家丞
同济大学数学系本科在读,现为格灵深瞳算法部实习生。
作者个人主页:李家丞 | 个人主页 | 关于我
导言:目标检测的任务表述
如何从图像中解析出可供计算机理解的信息,是机器视觉的中心问题。深度学习模型由于其强大的表示能力,加之数据量的积累和计算力的进步,成为机器视觉的热点研究方向。
那么,如何理解一张图片?根据后续任务的需要,有三个主要的层次。
图像理解的三个层次
一是分类(Classification),即是将图像结构化为某一类别的信息,用事先确定好的类别 (string) 或实例 ID 来描述图片。这一任务是最简单、最基础的图像理解任务,也是深度学习模型最先取得突破和实现大规模应用的任务。其中,ImageNet 是最权威的评测集,每年的 ILSVRC 催生了大量的优秀深度网络结构,为其他任务提供了基础。在应用领域,人脸、场景的识别等都可以归为分类任务。
二是检测(Detection)。分类任务关心整体,给出的是整张图片的内容描述,而检测则关注特定的物体目标,要求同时获得这一目标的类别信息和位置信息。相比分类,检测给出的是对图片前景和背景的理解,我们需要从背景中分离出感兴趣的目标,并确定这一目标的描述(类别和位置),因而,检测模型的输出是一个列表,列表的每一项使用一个数据组给出检出目标的类别和位置(常用矩形检测框的坐标表示)。
三是分割(Segmentation)。分割包括语义分割(semantic segmentation)和实例分割(instance segmentation),前者是对前背景分离的拓展,要求分离开具有不同语义的图像部分,而后者是检测任务的拓展,要求描述出目标的轮廓(相比检测框更为精细)。分割是对图像的像素级描述,它赋予每个像素类别(实例)意义,适用于理解要求较高的场景,如无人驾驶中对道路和非道路的分割。
本系列文章关注的领域是目标检测,即图像理解的中层次。
从此篇开始,我们对近几年检测领域的工作提供一个概览,并试图从中归纳出一些趋势。由于篇幅和视野所限,文章不会求全,相对注重思路的演进,淡化实验结果的报告。事实上,我们并没有看到这一任务上的 "The Best Paper" 和 "The Final Paper",现阶段的工作远远没有到解决这一问题的程度,深度学习模型也仍然是非常年轻的研究领域。
实验结果方面,笔者维护了一个检测模型进展追踪项目:Obj_Det_Progress_Tracker(https://github.com/ddlee96/Obj_Det_progress_tracker),收集了论文汇报的在 VOC 和 COCO 上的精度进展,可供参考。
本篇关注基础网络架构的演进和处理分类、定位这一矛盾问题上的进展。
基础网络(Backbone network)作为特征提取器,对检测模型的性能有着至关重要的影响。在分类任务的权威评测集 ImageNet 上,基于卷积网络的方法已经取得超越人类水平的进步,并也促使 ImageNet 完成了她的历史使命。这也是机器视觉领域的整体进步,优秀的特征、深刻的解释都为其他任务的应用提供了良好的基础。在本节中,我们选取了几个在检测任务上成功应用的基础网络做一些介绍。
笔者认为,卷积网络已经有如下几个经典的设计范式:
Repeat. 由 AlexNet 和 VGG 等开拓,被之后几乎所有的网络采用。即堆叠相同的拓扑结构,整个网络成为模块化的结构。
Multi-path. 由 Inception 系列发扬,将前一层的输入分割到不同的路径上进行变换,最后拼接结果。
Skip-connection. 最初出现于 Highway Network,由 ResNet 发扬并成为标配。即建立浅层信息与深层信息的传递通道,改变原有的单一线性结构。
以这些范式为脉络整理卷积网络的演进历程,可以归纳出下面的图景:
CNN 的经典设计范式
需要说明的是,上图并不能概括完全近年来卷积网络的进步,各分支之间也有很多相互借鉴和共通的特征,而致力于精简网络结构的工作如 SqueezeNet 等则没有出现。除了上面归纳的三个范式,卷积网络结构方面另一个重要的潮流是深度可分离卷积(Depth-wise seperable convolution)的应用。下面我们选择几个在检测任务上成功应用的基础网络结构进行介绍。
Deep Residual Learning for Image Recognition
https://arxiv.org/abs/1512.03385
残差单元将原函数分解为残差
作者将网络的训练解释为对某一复杂函数的拟合,通过添加跳跃连接,变对这一函数的拟合为每层对某一残差的拟合(有点 Boosting 的意思),引入的恒等项也让 BP 得到的梯度更为稳定。
残差网络以 skip-connection 的设计较为成功地缓解了深层网络难以收敛的问题,将网络的深度提高了一个数量级,也带动了一系列对残差网络的解释研究和衍生网络的提出。
在检测领域,VGG 作为特征提取器的地位也逐渐被 ResNet 系列网络替代,文章中以 ResNet 作为基础网络的 Faster R-CNN 也常作为后续工作的基线进行比较。
Xception: Deep Learning with Depthwise Separable Convolutions
https://arxiv.org/abs/1610.02357
Xception 网络可以看做对 Inception 系列网络的推进,也是深度可分离卷积的成功应用。
文章指出,Inception 单元背后的假设是跨 Channel 和跨空间的相关性可以充分解耦,类似的还有长度和高度方向上的卷积结构(在 Inception-v3 里的 3×3 卷积被 1×3 和 3×1 卷积替代)。
进一步的,Xception 基于更强的假设:跨 channel 和跨空间的相关性完全解耦。这也是深度可分离卷积所建模的理念。
一个简化的 Inception 单元:
简化的 Inception 单元,去掉了 Pooling 分支
等价于:
等价的简化 Inception 单元,将 1x1 卷积合并
将 channel 的 group 推向极端,即每个 channel 都由独立的 3×3 卷积处理:
把分组的粒度降为 1
这样就得到了深度可分离卷积。
Xception 最终的网络结构如下,简单讲是线性堆叠的 Depthwise Separable 卷积,并附加了 Skip-connection。
Xceptiong 的网络结构
在 MS COCO Chanllege 2017 中,MSRA 团队以对齐版本的 Xception 为基础网络取得前列的成绩,一定程度上说明了这一网络提取特征的能力;另一方面,Xception 的一个改编版本也被 Light-head R-CNN 的工作(将在下一篇的实时性部分介绍)应用,以两阶段的方式取得了精度和速度都超越 SSD 等单阶段检测器的表现。
Aggregated Residual Transformations for Deep Neural Networks
https://arxiv.org/abs/1611.05431
本文提出了深度网络的新维度,除了深度、宽度(Channel 数)外,作者将在某一层并行 transform 的路径数提取为第三维度,称为 "cardinality"。跟 Inception 单元不同的是,这些并行路径均共享同一拓扑结构,而非精心设计的卷积核并联。除了并行相同的路径外,也添加了层与层间的 shortcut connection。
相比 Inception-ResNet,ResNeXt 相当于将其 Inception Module 的每条路径规范化了,并将规范后的路径数目作为新的超参数。
ResNeXt 的基本单元
上图中,路径被扩展为多条,而每条路径的宽度(channel 数)也变窄了(64->4)。
在近期 Facebook 开源的 Detectron 框架中,ResNeXt 作为 Mask R-CNN 的基础网络也取得了非常高的精度。
Squeeze and Excitation Network
https://arxiv.org/abs/1709.01507
SENet 是最后一届 ImageNet Challenge 的夺冠架构,中心思想是添加旁路为 channel 之间的相关性进行建模,可以认为是 channel 维度的 attention。
Squeeze 和 Excitation 分支
SENet 通过'特征重标定'(Feature Recalibration)来完成 channel 层面的注意力机制。具体地,先通过 Squeeze 操作将特征的空间性压缩掉,仅保留 channel 维度,再通过 Excitation 操作为每个特征通道生成一个权重,用于显式地建模 channel 之间的相关性,最后通过 Reweight 操作将权重加权到原来的 channel 上,即构成不同 channel 间重标定。
SENet 可以作为网络中模块间的额外连接附属到原有的经典结构上,其 Squeeze 操作在压缩信息的同时也降低了这一附属连接的开销。
SE 作为额外部件添加在经典结构上
经 SENet 改进的 ResNet 被 UCenter 团队应用在 MS COCO Chanllenge 2017 上,也取得了不错的效果。
Learning Transferable Architectures for Scalable Image Recognition
https://arxiv.org/abs/1707.07012
NAS(Neural Architecture Searh,神经网络结构搜索)的框架最早出现于作者的另一项工作 Neural Architecture Search with Reinforcement Learning,其核心思想是用一个 RNN 学习定义网络结构的超参,通过强化学习的框架来更新这一 RNN 来得到更好表现的网络结构。
NAS 的结构
在本文中,作者参考本节最初提到的 "Repeat" 范式,认为在小数据集上搜索到的结构单元具有移植性和扩展性,将这个结构单元通过堆叠得到的大网络能够在较大数据集上取得较好的表现。这就构成了文章的基本思路:将网络搜索局限在微观的局部结构上,以相对原工作较小的开销(实际开销仍然巨大)得到可供扩展的网络单元,再由这些单元作为基本部件填入人工设计的 "元结构"。
微观层面,作者仍选择用 RNN 作为 Controller,挑选跳跃连接、最大池化、空洞卷积、深度可分离卷积等等操作构成基本搜索空间,以逐元素相加(element-wise addition)和拼接(concatenation)作为合并操作,并重复一定的构建次数来搜索此基本单元。
RNN 作为 Controller 的微观结构搜索,右为示例结构
宏观层面,将基本单元分为 Normal Cell(不改变 feature map 大小)和 Reduction Cell(使 feature map 的 spatial 维度减半,即 stride=2),交替堆叠一定数量的 Normal Cell 和 Reduction Cell 形成下面的元结构。
NASNet 在不同数据集上的元结构,ImageNet 的图片具有更多的像素数,需要更多的 Reduction 单元
NASNet 采取了自动搜索的方式去设计网络的结构,人工的部分迁移到对搜索空间的构建和评测指标的设立上,是一种 "元学习" 的策略。应用在检测领域,NASNet 作为基础框架的 Faster R-CNN 取得了 SOTA 的表现,也支撑了这一搜索得到结构的泛化性能。在最近的工作中,作者团队又设计了 ENAS 降低搜索的空间和时间开销,继续推动着这一方向的研究。
从 R-CNN 开始,检测模型常采用分类任务上表现最好的卷积网络作为基础网络提取特征,在其基础上添加额外的头部结构来实现检测功能。然而,分类和检测所面向的场景不尽相同:分类常常关注具有整体语义的图像(第二篇中介绍 COCO 数据集中提到的 iconic image),而检测则需要区分前景和背景(non-iconic image)。
分类网络中的 Pooling 层操作常常会引入平移不变性等使得整体语义的理解更加鲁棒,而在检测任务中我们则需要位置敏感的模型来保证预测位置的精确性,这就产生了分类和定位两个任务间的矛盾。
R-FCN: Object Detection via Region-based Fully Convolutinal Networks
https://arxiv.org/abs/1605.06409
文章指出了检测任务之前的框架存在不自然的设计,即全卷积的特征提取部分 + 全连接的分类器,而表现最好的图像分类器都是全卷积的结构(ResNet 等)。这篇文章提出采用 "位置敏感分数图(Position Sensitive Score Map)" 的方法来使检测网络保持全卷积结构的同时又拥有位置感知能力。
R-FCN 中位置敏感分数图
位置敏感分数图的生成有两个重要操作,一是生成更 "厚" 的 feature map,二是在 RoI Pooling 时选择性地输入 feature map。
Faster R-CNN 中,经过 RPN 得到 RoI,转化成分类任务,还加入了一定量的卷积操作(ResNet 中的 conv5 部分),而这一部分卷积操作是不能共享的。R-FCN 则着眼于全卷积结构,利用卷积操作在 Channel 这一维度上的自由性,赋予其位置敏感的意义。下面是具体的操作:
在全卷积网络的最后一层,生成 个 Channel 的 Feature map,其中 C 为类别数, 代表 k*k 网格,用于分别检测目标物体的 k*k 个部分。即是用不同 channel 的 feature map 代表物体的不同局部(如左上部分,右下部分)。
将 RPN 网络得到的 Proposal 映射到上一步得到的 feature map(厚度为 )后,相应的,将 RoI 等分为 k*k 个 bin,对第(i,j)个 bin,仅考虑对应(i,j)位置的(C+1)个 feature map,进行如下计算:其中(x0,y0)是这个 RoI 的锚点,得到的即是(i,j)号 bin 对 类别的相应分数。
经过上一步,每个 RoI 得到的结果是大小的分数张量, K*K 编码着物体的局部分数信息,进行 vote(平均)后得到(C+1)维的分数向量,再接入 softmax 得到每一类的概率。
上面第二步操作中 "仅选取第(i,j)号 feature map" 是位置信息产生意义的关键。这样设计的网络结构,所有可学习的参数都分布在可共享的卷积层,因而在训练和测试性能上均有提升。
R-FCN 是对 Faster R-CNN 结构上的改进,部分地解决了位置不变性和位置敏感性的矛盾。通过最大化地共享卷积参数,使得在精度相当的情况下训练和测试效率都有了很大的提升。
Deformable Convolution Networks
https://arxiv.org/abs/1703.06211
本篇文章则提出在卷积和 RoI Pooling 两个层添加旁路显式学习偏置,来建模物体形状的可变性。这样的设计使得在保持目标全局上位置敏感的同时,对目标局部的建模添加灵活性。
可变形卷积的旁支
RoI Pooling 的旁支
如上两图所示,通过在卷积部分添加旁路,显式地用一部分张量表示卷积核在图片不同部分的偏移情况,再添加到原有的卷积操作上,使卷积具有灵活性的特征,提取不同物体的特征时,其形状可变。而在 RoI Pooling 部分,旁路的添加则赋予采样块可活动的特性,更加灵活地匹配不同物体的形状。
在 MS COCO Chanllege 2017 上,MSRA 团队的结果向我们展示了可变形卷积在提升检测模型性能上的有效性:
可变形卷积带来的增益
本篇中,我们概述了检测领域基础网络的演进和处理分类定位这一矛盾问题上的进展,基础网络提供更具有语义级区分性的特征,为图像提供更有意义的编码,而分析分类和定位这一对矛盾,则提供给我们对这一任务另一种理解和分治的角度。在下一篇中,我们将关注基础网络提取的特征如何更有效地在检测模型的头部网络中得到利用,以及面向实时性检测的一些进展。
本文的第一部分关注检测模型的头部部分。对与每张图片,深度网络其实是通过级联的映射获得了在某一流形上的一个表征,这个表征相比原图片更有计算机视角下的语义性。例如,使用 Softmax 作为损失函数的分类网络,最后一层获得的张量常常展现出成簇的分布。
深度网络因分布式表示带来的指数级增益,拥有远超其他机器学习模型的表示能力,近年来,有不少致力于对深度网络习得特征进行可视化的工作,为研究者提供了部分有直观意义的感知,如浅层学习线条纹理,深层学习物体轮廓。然而,现阶段的深度模型仍然是一个灰盒,缺乏有效的概念去描述网络容量、特征的好坏、表达能力等等被研究者常常提到但又给不出精确定义的指代。
本篇的第一节将介绍通过头部网络结构的设计来更有效利用基础网络所提供特征的工作,帮助读者进一步理解检测任务的难点和研究者的解决思路。
第二部分则关注面向实时性检测的工作,这也是检测任务在应用上的目标。如本系列文章第二篇所述,实时性这一要求并没有通用的评价标准,应用领域也涉及到更多网络的压缩、加速和工程上的优化乃至硬件层面的工作等,则不在本文的介绍范围。
Feature Pyramid Networks for Object Detection
https://arxiv.org/abs/1612.03144
对图片信息的理解常常关系到对位置和规模上不变性的建模。在较为成功的图片分类模型中,Max-Pooling 这一操作建模了位置上的不变性:从局部中挑选最大的响应,这一响应在局部的位置信息就被忽略掉了。而在规模不变性的方向上,添加不同大小感受野的卷积核(VGG),用小卷积核堆叠感受较大的范围(GoogLeNet),自动选择感受野的大小(Inception)等结构也展现了其合理的一面。
回到检测任务,与分类任务不同的是,检测所面临的物体规模问题是跨类别的、处于同一语义场景中的。
一个直观的思路是用不同大小的图片去生成相应大小的 feature map,但这样带来巨大的参数,使本来就只能跑个位数图片的显存更加不够用。另一个思路是直接使用不同深度的卷积层生成的 feature map,但较浅层的 feature map 上包含的低等级特征又会干扰分类的精度。
本文提出的方法是在高等级 feature map 上将特征向下回传,反向构建特征金字塔。
FPN 结构
从图片开始,照常进行级联式的特征提取,再添加一条回传路径:从最高级的 feature map 开始,向下进行最近邻上采样得到与低等级的 feature map 相同大小的回传 feature map,再进行逐元素相加(lateral connection),构成这一深度上的特征。
这种操作的信念是,低等级的 feature map 包含更多的位置信息,高等级的 feature map 则包含更好的分类信息,将这两者结合,力图达到检测任务的位置分类双要求。
特征金字塔本是很自然的想法,但如何构建金字塔同时平衡检测任务的定位和分类双目标,又能保证显存的有效利用,是本文做的比较好的地方。如今,FPN 也几乎成为特征提取网络的标配,更说明了这种组合方式的有效性。
Beyond Skip Connections: Top-down Modulation for Object Detection
https://arxiv.org/abs/1612.06851
本文跟 FPN 是同一时期的工作,其结构也较为相似。作者认为低层级特征对小物体的检测至关重要,但对低层级特征的选择要依靠高层及特征提供的 context 信息,于是设计 TDM(Top-Down Modulation)结构来将这两种信息结合起来处理。
TDM 整体结构
可以看到,TDM 的结构跟 FPN 相当类似,但也有如下显著的不同:
T 模块和 L 模块都是可供替换的子网络单元,可以是 Residual 或者 Inception 单元,而在 FPN 中,二者分别是最近邻上采样(Neareast UpSample)和逐元素相加(Element-wise Addition)。
FPN 在每个层级得到的 feature map 都进行 RoI Proposal 和 RoI Pooling,而 TDM 只在自上而下传播后的最大 feature map 上接入检测头部。
TDM 中的 T 模块和 L 模块
TDM 的设计相比 FPN 拥有更多可学习的参数和灵活性,文章的实验显示,TDM 结构对小物体检测精度的提升帮助明显。而且,TDM 是对检测头部的改进,也有推广到单阶段模型的潜力。
Deconvolutional Single Shot Multibox Detector
https://arxiv.org/abs/1701.06659
本文是利用反卷积操作对 SSD 的改进。
DSSD 的网络结构
在原版 SSD 中,检测头部不仅从基础网络提取特征,还添加了额外的卷积层,而本文则在这些额外卷积层后再添加可学习的反卷积层,并将 feature map 的尺度扩展为原有尺寸,把两个方向上具有相同尺度的 feature map 叠加后再进行检测,这种设计使检测头部同时利用不同尺度上的低级特征和高级特征。跟 FPN 不同的是,反传的特征通过反卷积得到而非简单的最近邻上采样。
同时,在反卷积部分添加了额外的卷积层提供 "缓冲",以免反卷积分支影响网络整体的收敛性。另外,文章也通过加入跳跃连接改进了检测头部,使得头部结构相比原版 SSD 更加复杂。
RON: Reverse Connection with Objectness Prior Networksfor Object Detection
https://arxiv.org/abs/1707.01691
RON 结构
文章关注两个问题:1) 多尺度目标检测,2)正负样本比例失衡的问题。
对于前者,文章将相邻的 feature map 通过 reverse connection 相连,并在每个 feature map 上都进行检测,最后再整合过滤。对于后者,类似 RPN,对每个 anchor box 生成一个 Objectness priori,作为一个指标来过滤过多的 box(但不对 box 进行调整,RPN 对 box 进行调整,作者指出这会造成重复计算)。文章的实验显示 RON 在较低的分辨率下取得了超过 SSD 的表现。
Feature Fusion Single Shot Multibox Detector
https://arxiv.org/abs/1712.00960
FSSD 提出了另一种对不同层级特征进行融合的方式,从基础网络不同层级得到 feature map 后,利用采样操作将它们在 spatial 方向上规整化,再拼接到一起,并通过 BN 层以使不同层级特征的激活值数量级一致。最后,拼接后的 feature map 经过一系列的卷积操作,产生不同大小的融合 feature map 传入检测头部的预测网络。
FSSD 的特征融合方式
文章指出,特征融合的初衷还是同时利用高层级 feature map 提供的语义信息和低层级 feature map 的位置信息,而像 FPN 中的逐元素相加操作进行融合的方式要求不同层级的 feature map 具有完全一致的大小,本文则采用拼接的方式,不受 channel 数的限制。
Single-Shot Refinement Neural Network for Object Detection
https://arxiv.org/abs/1711.06897
RefineDet 的 ARM 和 ODM
本文是单阶段的模型,但思路上却是两阶段的。文章指出两阶段方法精度有优势的原因有三点:
1)两阶段的设计使之有空间来用采样策略处理类别不均衡的问题;
2)级联的方式进行 box 回归;
3)两阶段的特征描述。
文章提出两个模块来在一阶段检测器中引入两阶段设计的优势:Anchor Refinement Module(ARM) 和 Object Detection Module(ODM)。前者用于识别并过滤背景类 anchor 来降低分类器的负担,并且调整 anchor 位置以更好的向分类器输入,后者用于多分类和 box 的进一步回归。
Single-shot 的体现在上面两个模块通过 Transfer Connection Block 共用特征。除此之外,Transfer Connection Block 还将特征图反传,构成类似 FPN 的效果。两个模块建立联合的损失使网络能够端到端训练。
实验结果显示 RefineNet 的效果还是不错的,速度跟 YOLOv2 相当,精度上更有优势。之后的 Ablation experiments 也分别支撑了负样本过滤、级联 box 回归和 Transfer Connection Block 的作用。可以说这篇文章的工作让两阶段和一阶段检测器的界限更加模糊了。
Light-Head R-CNN: In Defense of Two-Stage Object Detector
https://arxiv.org/abs/1711.07264
文章指出两阶段检测器通常在生成 Proposal 后进行分类的 "头"(head) 部分进行密集的计算,如 ResNet 为基础网络的 Faster-RCNN 将整个 stage5(或两个 FC)放在 RCNN 部分, R-FCN 要生成一个具有随类别数线性增长的 channel 数的 Score map,这些密集计算正是两阶段方法在精度上领先而在推断速度上难以满足实时要求的原因。
针对这两种元结构 (Faster-RCNN 和 RFCN),文章提出了 "头" 轻量化方法,试图在保持精度的同时又能减少冗余的计算量,从而实现精度和速度的 Trade-off。
Light-head R-CNN 与 Faster R-CNN, R-FCN 的对比
如上图,虚线框出的部分是三种结构的 R-CNN 子网络(在每个 RoI 上进行的计算),light-head R-CNN 中,在生成 Score map 前,ResNet 的 stage5 中卷积被替换为深度可分离卷积,产生的 Score map 也减少至 10×p×p(相比原先的类别数 ×p×p,p 为网格划分粒度,R-FCN 中取 7)。
一个可能的解释是,"瘦"(channel 数较少)的 score map 使用于分类的特征信息更加紧凑,原先较 "厚" 的 score map 在经过 PSROIPooling 的操作时,大部分信息并没有提取(只提取了特定类和特定位置的信息,与这一信息处在同一 score map 上的其他数据都被忽略了)。
进一步地,位置敏感的思路将位置性在 channel 上表达出来,同时隐含地使用了更类别数相同长度的向量表达了分类性(这一长度相同带来的好处即是 RCNN 子网络可以免去参数)。
light-head 在这里的改进则是把这一个隐藏的嵌入空间压缩到较小的值,而在 RCNN 子网络中加入 FC 层再使这个空间扩展到类别数的规模,相当于是把计算量分担到了 RCNN 子网络中。
粗看来,light-head 将原来 RFCN 的 score map 的职责两步化了:thin score map 主攻位置信息,RCNN 子网络中的 FC 主攻分类信息。另外,global average pool 的操作被去掉,用于保持精度。
YOLO9000: Better, Faster, Stronger
单阶段检测模型的先驱工作 YOLO 迎来了全面的更新:
在卷积层添加 BN,舍弃 Dropout
更大尺寸的输入
使用 Anchor Boxes,并在头部运用卷积替代全连接层
使用聚类方法得到更好的先验,用于生成 Anchor Boxes
参考 Fast R-CNN 的方法对位置坐标进行 log/exp 变换使坐标回归的损失保持在合适的数量级
passthrough 层:类似 ResNet 的 skip-connection,将不同尺寸的 feature map 拼接到一起
多尺度训练
更高效的网络 Darknet-19,类似 VGG 的网络,在 ImageNet 上以较少的参数量达到跟当前最佳相当的精度
YOLOv2 的改进
此次改进后,YOLOv2 吸收了很多工作的优点,达到跟 SSD 相当的精度和更快的推断速度。
SSDLite 是在介绍 MobileNets V2 的论文 Inverted Residuals and Linear Bottlenecks: Mobile Networks for Classification, Detection and Segmentation(https://arxiv.org/abs/1801.04381) 中提出的。
MobileNets 是一系列大面积应用深度可分离卷积的网络结构,试图以较小的参数量来达到跟大型网络相当的精度,以便能够在移动端部署。在本文中,作者提出了对 MobileNets 的改进版本,通过移动跳跃连接的位置并去掉某些 ReLU 层来实现更好的参数利用。可参考这个问题了解更多关于这一改进的解释。
在检测方面,SSDLite 的改进之处在于将 SSD 的检测头部中的卷积运算替换为深度可分离卷积,降低了头部计算的参数量。另外,这项工作首次给出了检测模型在移动设备 CPU 上单核运行的速度,提供了现在移动终端执行类似任务性能的一个参考。
从基础网络的不同层级提取习得的 feature map 并通过一定的连接将它们整合,是近年来检测模型的重要趋势。这些针对检测头部网络的改进也越来越多地体现着研究者们对检测任务要求的表述和探索。另一方面,面向实时性的改进则继续推动这检测任务在应用领域的发展。
本篇为读者展现检测领域多样性的一个视角,跟其他任务联合,有 YOLO9000、Mask R-CNN;改进损失函数,有 Focal Loss;利用 GAN 提升检测模型的鲁棒性,有 A-Fast-RCNN;建模目标关联,有 Relation Moduel;还有 mimicking 思路、引入大 batch 训练的 MegDet 和从零训练的 DSOD,再加上未收录的 Cascade R-CNN、SNIP 等,多样性的思路为检测任务的解决上注入着前所未有的活力,也推动着理解视觉这一终极目标的进步。
YOLO9000: Better, Faster, Stronger
这篇文章里,YOLO 的作者不仅提出 YOLOv2,大幅改进了原版 YOLO,而且介绍了一种新的联合训练方式:同时训练分类任务和检测任务,使得检测模型能够泛化到检测训练集之外的目标类上。
YOLO9000 使用了 ImageNet 和 COCO 数据集联合训练,在合并两者的标签时,根据 WordNet 的继承关系构建了了树状的类别预测图:
标签的合并
类似条件概率的方式计算每个子标签的概率值,超出一定的阈值 com 时则选定该类作为输出,训练时也仅对其路径上的类别进行损失的计算和 BP。
YOLO9000 为我们提供了一种泛化检测模型的训练方式,文章的结果显示 YOLO9000 在没有 COCO 标注的类别上有约 20 的 mAP 表现,能够检测的物体类别超过 9000 种。当然,其泛化性能也受检测标注类别的制约,在有类别继承关系的类上表现不错,而在完全没有语义联系的类上表现很差。
Mask R-CNN 通过将检测和实例分割联合训练的方式同时提高了分割和检测的精度。在原有 Faster R-CNN 的头部中分类和位置回归两个并行分支外再加入一个实例分割的并行分支,并将三者的损失联合训练。
Mask R-CNN 的头部结构
在分割方面,文章发现对每个类别单独生成二值掩膜(Binary Mask)相比之前工作中的多分类掩膜更有效,这样避免了类间竞争,仍是分类和标记的解耦。文章另外的一个贡献是 RoIAlign 的提出,笔者认为会是检测模型的标配操作。
FAIR 团队在 COCO Chanllege 2017 上基于 Mask R-CNN 也取得了前列的成绩,但在实践领域,实例分割的标注相比检测标注要更加昂贵,而且按照最初我们对图像理解的三个层次划分,中层次的检测任务借用深层次的分割信息训练,事实上超出了任务的要求。
Focal Loss for Dense Object Detection
由于缺少像两阶段模型的样本整理操作,单阶段模型的检测头部常常会面对比两阶段多出 1-2 个数量级的 Region Proposal,文章作者认为,这些 Proposal 存在类别极度不均衡的现象,导致了简单样本的损失掩盖了难例的损失,这一 easy example dominating 的问题是单阶段模型精度不如两阶段的关键。
Focal Loss 随概率变化曲线
于是,文章提出的解决措施即是在不同样本间制造不平衡,让简单样本的损失在整体的贡献变小,使模型更新时更关注较难的样本。具体的做法是根据预测概率给交叉熵的相应项添加惩罚系数,使得预测概率越高(越有把握)的样本,计算损失时所占比例越小。
RetinaNet 结构
以 ResNet 的 FPN 为基础网络,添加了 Focal Loss 的 RetinaNet 取得了跟两阶段模型相当甚至超出的精度。另外,Focal Loss 的应用也不只局限在单阶段检测器,其他要处理类别不均衡问题任务上的应用也值得探索。
Mimicking Very Efficient Network for Object Detection
http://openaccess.thecvf.com/content_cvpr_2017/papers/Li_Mimicking_Very_Efficient_CVPR_2017_paper.pdf
本篇文章是 Mimicking 方法在检测任务上的尝试。mimicking 作为一种模型压缩的方法,采用大网络指导小网络的方式将大网络习得的信息用小网络表征出来,在损失较小精度的基础上大幅提升速度。
Mimicking 方法通常会学习概率输出的前一层,被称为 "Deep-ID",这一层的张量被认为是数据在经过深度网络后得到的一个高维空间嵌入,在这个空间中,不同类的样例可分性要远超原有表示,从而达到表示学习的效果。本文作者提出的 mimicking 框架则是选择检测模型中基础网络输出的 feature map 进行学习,构成下面的结构:
Mimicking 网络结构
图中,上面分支是进行学习的小网络,下面分支的大网络则由较好表现的模型初始化,输入图片后,分别得到不同的 feature map,小网络同时输入 RPN 的分类和位置回归,根据这一 RoI Proposal,在两个分支的 feature map 上提取区域 feature,令大网络的 feature 作为监督信息跟小网络计算 L2 Loss,并跟 RPN 的损失构成联合损失进行学习。而对 RCNN 子网络,可用分类任务的 mimicking 方法进行监督。
文章在 Pascal VOC 上的实验显示这种 mimicking 框架可以在相当的精度下实现 2 倍以上的加速效果。
MegDet: A Large Mini-Batch Object Detector
https://arxiv.org/abs/1711.07240
这篇文章提出了多卡 BN 的实现思路,使得检测模型能够以较大的 batch 进行训练。
之前的工作中,两阶段模型常常仅在一块 GPU 上处理 1-2 张图片,生成数百个 RoI Proposal 供 RCNN 子网络训练。这样带来的问题是每次更新只学习了较少语义场景的信息,不利于优化的稳定收敛。要提高 batch size,根据 Linear Scaling Rule,需要同时增大学习率,但较大的学习率又使得网络不易收敛,文章尝试用更新 BN 参数的方式来稳定优化过程(基础网络的 BN 参数在检测任务上 fine-tuning 时通常固定)。加上检测中常常需要较大分辨率的图片,而 GPU 内存限制了单卡上的图片个数,提高 batch size 就意味着 BN 要在多卡(Cross-GPU)上进行。
BN 操作需要对每个 batch 计算均值和方差来进行标准化,对于多卡,具体做法是,单卡独立计算均值,聚合(类似 Map-Reduce 中的 Reduce)算均值,再将均值下发到每个卡,算差,再聚合起来,计算 batch 的方差,最后将方差下发到每个卡,结合之前下发的均值进行标准化。
CGBN 实现流程
更新 BN 参数的检测模型能够在较大的 batch size 下收敛,也大幅提高了检测模型的训练速度,加快了算法的迭代速度。
DSOD: Learning Deeply Supervised Object Detectors from Scratch
https://arxiv.org/abs/1708.01241
R-CNN 工作的一个深远影响是在大数据集(分类)上 pre-train,在小数据集(检测)fine-tune 的做法,本文指出这限制了检测任务上基础网络结构的调整(需要在 ImageNet 上等预训练的分类网络),也容易引入分类任务的 bias,因而提出从零训练检测网络的方法。
作者认为,由于 RoI 的存在,两阶段检测模型从零训练难以收敛,从而选择 Region-free 的单阶段方法进行尝试。一个关键的发现是,从零训练的网络需要 Deep Supervision,文中采用紧密连接的方式来达到隐式 Deep Supervision 的效果,因而 DSOD 的基础网络部分类似 DenseNet,浅层的 feature map 也有机会得到更接近损失函数的监督。
DSOD 结构
文章的实验显示,DSOD 从零开始训练也可以达到更 SSD 等相当的精度,并且模型的参数更少,但速度方面有所下降。
A-Fast-RCNN: Hard Positive Generation via Adversary for Object Detection
https://arxiv.org/abs/1704.03414
本文将 GAN 引入检测模型,用 GAN 生成较难的样本以提升检测网络应对遮挡 (Occlusion)、形变 (Deformation) 的能力。
对于前者,作者设计了 ASDN(Adversarial Spatial Dropout Network),在 feature map 层面生成 mask 来产生对抗样本。对于 feature map,在旁支上为每个位置生成一个概率图,根据一定的阈值将部分 feature map 上的值 drop 掉,再传入后面的头部网络。
ASDN
类似的,ASTN(Adversarial Spatial Transformer Network) 在旁支上生成旋转等形变并施加到 feature map 上。整体上,两个对抗样本生成的子网络串联起来,加入到 RoI 得到的 feature 和头部网络之间。
ASDN 和 ASTN 被串联
文中的实验显示,在 VOC 上,对抗训练对 plant, bottle 等类别的检测精度有提升,但对个别类别却有损害。这项工作是 GAN 在检测任务上的试水,在 feature 空间而不是原始数据空间生成对抗样本的思路值得借鉴。
Relation Networks for Object Detection
https://arxiv.org/abs/1711.11575
Attention 机制在自然语言处理领域取得了有效的进展,也被 SENet 等工作引入的计算机视觉领域。本文试图用 Attention 机制建模目标物体之间的相关性。
理解图像前背景的语义关系是检测任务的潜在目标,权威数据集 COCO 的收集过程也遵循着在日常情景中收集常见目标的原则,本文则从目标物体间的关系入手,用 geometric feature(fG) 和 appearance feature(fA) 来表述某一 RoI,并联合其他 RoI 建立 relation 后,生成一个融合后的 feature map。计算如下图:
Relation Module
作者将这样的模块插入两阶段检测器的头部网络,并用改装后的 duplicate removal network 替代传统的 NMS 后处理操作,形成真正端到端的检测网络。在 Faster R-CNN, FPN, Deformable ConvNets 上的实验显示,加入 Relation Module 均能带来精度提升。
Relation Module 应用在头部网络和替代 NMS
检测领域在近年来取得的进展只是这场深度模型潮流的一个缩影。理解图像、理解视觉这一机器视觉的中心问题上,仍不断有新鲜的想法出现。推动整个机器视觉行业跃进的同时,深度模型也越来越来暴露出自身的难收敛、难解释等等问题,整个领域仍在负重前行。
本系列文章梳理了检测任务上深度方法的经典工作和较新的趋势,并总结了常用的测评集和训练技巧,期望为读者建立对这一任务的基本认识。在介绍对象的选择和章节的划分上,都带有笔者自己的偏见,本文仅仅可作为一个导读,更多的细节应参考实现的代码,更多的讨论应参考文章作者的扩展实验。
事实上,每项工作都反映着作者对这一问题的洞察,而诸多工作间的横向对比也有助于培养独立和成熟的视角来评定每项工作的贡献。另外,不同文献间的相互引述、所投会议期刊审稿人的意见等,都是比本文更有参考价值的信息来源。
在工业界还有更多的问题,比如如何做到单模型满足各种不同场景的需求,如何解决标注中的噪声和错误干扰,如何针对具体业务类型(如人脸)设计特定的网络,如何在廉价的硬件设备上做更高性能的检测,如何利用优化的软件库、模型压缩方法进行加速等等,就不在本文讨论之列。