7

目标检测综述

 3 years ago
source link: https://flashgene.com/archives/166086.html
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

本站内容均来自兴趣收集,如不慎侵害的您的相关权益,请留言告知,我们将尽快删除.谢谢.

总体介绍

目标检测是计算机视觉里面十分重要的任务,其主要解决检测在数字图像中某一类别可见的实例。最终的目的是为了开发一种计算模型和技术,来提供计算机视觉应用所需要的一个基础的信息即:目标在哪?

作为计算机视觉中众多基础问题中的一个,目标检测成为了许多其他计算机视觉任务的基础,比如:实例分割,目标跟踪和姿态估计等。从应用的角度来看,目标检测一般被分为两个研究课题:目标检测的理论研究和目标检测的实际应用。前者是在某一框架下模仿人类视觉和感知检测不同类型的物体,后者则是在特定的应用场景下,如:行人检测、面部检测以及文本检测等。

深度学习的飞速发展使得目标检测重获新生,以至于其获得了重大突破,并使其成为了研究的热点。目标检测如今已经广泛的应用于现实生活中的各种应用之中:无人驾驶、机器人视觉、视频监控等。

目标检测中的难点与挑战

关于目标检测到底存在什幺困难与挑战?事实上,这个问题并不是那幺容易回答或者答案比较笼统。因为不同的目标检测任务会遇到不同的问题和障碍。当然也存在一些计算机视觉上普遍存在的问题,例如:目标的旋转性、尺度的变换、精准的目标定位、密集与遮挡目标以及检测速度的提升等。

目标检测的发展(1999~2019)

里程碑意义的检测器

传统的检测器

如果今天的目标检测器是在由于深度学习提供源源不断的动力而熠熠生辉,那幺追溯到20年前则可以被认为是冷兵器时代了。大多数早期的算法都是基于人工设计的特征提取器,由于缺失了有效的图像特征表达,人们不得不设计基于经验的特征表达。

Viola Jones Detectors

18年前,P. Viola 和 M. Jones 已经实现了人脸的实时识别而且不需要任何的限制。当时,”Viola-Jones(VJ)”检测器在相同的检测精度的情况下,已经比任何其他算法快十甚至上百倍。其靠着以下三个重要技术提升速度:

1) \(\ Integral\ image\) :积分图是用来加速 box filtering 和卷积计算的方法。

2) \(\ Feature\ selection\) :作者使用 Adaboost 算法来替换了人工选择的 Haar basis filters。使其更有效的从大量随机的特征中选取一小部分对面部检测有益的特征。

3)

\(\ Detection\ cascades\)

:VJ 检测器提出了一种多阶段检测方式使其花更少的计算在背景窗口,更多的面部目标上。

Histogram of Oriented Gradients (HOG)

HOG 主要是针对尺度不变特征转换和 shape context 而做的改进。为了均衡特征不变性和非线性的特性,HOG 设计了密集均匀的网格和使用 local contrast normalization 来改善精度。虽然 HOG 能被用来检测不同种类的类,但它最初是由行人检测的问题而提出的。为了检测不同 size 的目标,HOG 会多次 rescale 输入图片,但是 detection window的 size 保持不变。HOG 在很长段时间内成为了许多检测器的基础,并应用于计算机视觉应用中很多年。

Deformable Part-based Model (DPM)

DPM 作为 VOC-07,08和09的 winner成为了传统目标检测方法的巅峰之作,其是 HOG 的延续。

DPM 的训练阶段可以认为是学习一种分解目标的方式,推理阶段则是对目标不同部分识别的整合。例如,一个车的识别问题可以认为是车窗、车身和车轮的识别。这就是众所周知的 “star-model”,后来被发展为”mixture models”用以解决现实世界中变化多样的目标。

典型的 DPM 检测器由一个 root-filter 和许多的 part-filters 组成。其被发展成为一种弱监督的学习方法,所有的 part-filters 能作为隐变量进行学习。R.Girshick 进一步将其推导为一种多实例学习的特殊情况,同时”hard negative mining”、”bounding box regression”和”context priming”等技术也被应用到其中以提升精度。

虽然今天的目标检测器已经远远超越了 DPM 其所用的技巧对后来的目标检测有着深远的影响。P. Felzenszwalb 与 R. Girshick 也被 PASCAL VOC 奖以终生成就的奖项。

CNN base Two-stage Detectors

在手工特征的性能达到饱和,目标检测在2010后进入了瓶颈。然而,同时世界见证了卷积神经网络重生后的学习鲁棒性以及高层语义特征的表达能力。目标检测开始以前所未有的速度进行发展了。

RCNN

RCNN 的思路并不复杂:首先,它需要通过选择搜索提取一系列的目标建议框。然后每一个建议区域会被 resize 到一个固定的尺寸送入 CNN 模型之中(其是在 ImageNet 中进行预训练的)提取特征。最后,线性的 SVM 分类器进行预测每个区域目标的存在性,并识别其类别。RCNN 在 VOC07 上的 mAP 由 \(33.7\%\) (DPM-v5)上升到 \(58.5\%\) 。

虽然 RCNN 的取得了巨大的进步,但是仍然有明显的缺陷:大量重叠区域冗余的特征的计算以致检测速度十分慢。

SPPNet

K.He 在2014年提出了 Spatial Pyramid Pooling Networks (SPPNet)。之前的 CNN 模型需要一个固定尺寸的输入。SPPNet 的主要贡献在于引入了 Spatial Pyramid Pooling(SPP) layer,其可以使 CNN 在不需要关注输入的尺寸同时,产生一个固定长度的特征图。当 SPPNet进行目标检测的时候,特征图能由最初的输入一次计算获得,然后生成任意区域的固定长度的特征表达,这样的做法避免了重复计算卷积过后的特征。SPPNet 在没有精度损失的情况下,比 RCNN 快了20倍。

SPPNet 存在的问题在于:训练仍然是多阶段的,SPPNet 只 fine-tune 了其全连接层,同时忽略了之前所有的层。

Fast RCNN

Fast RCNN 能在同一个网络配置下训练检测器和 bounding box 的回归,其在 VOC07 的表现为:比 RCNN 快200倍的同时,mAP 由 \(58.5\%\) 提升至 \(70.0\%\) 。虽然Fast RCNN整合了 RCNN 和 SPPNet 所有的优点,但它的检测速度仍然受到了建议检测的限制。

Faster RCNN

Faster RCNN 的主要贡献在于其提出了Region Proposal Network(RPN),一个几乎无 cost 的区域建议。从 RCNN 到 Faster-RCNN,大多数的独立模块,例如:建议检测、特征提取、以及 bounding box 的回归,都被整合到一个端到端的网络里了。

虽然 Faster-RCNN 突破了 RCNN 的瓶颈,但仍然在其子检测阶段有着冗余的计算。但之后的一些模型有改善这个问题:RFCN、Light head RCNN。

Feature Pyramid Networks(FPN)

2017年基于 Faster RCNN 的 FPN 的提出使得定位更加精准。原因在于深层的特征图更容易表达高层语义,其对种类的识别十分有益。但是,对于目标的定位却用处不大。因此,FPN是一种自顶而下的结构,并带有横向的连接,以此来建立所有尺度的高层语义以及融合。FPN 对于检测尺度变化范围大的目标显现出了巨大的优势,其现在已经成为了许多新的检测器的基础模块了。

CNN based One-stage Detectors

You Only Look Once (YOLO)

YOLO 是由 R. Joseph 在2015年提出的,也是深度学习时代第一个一阶段检测器。YOLO 检测速度非常的快:其中较快的版本可在 VOC07 精度 \(52.7 \%\) 的情况下达到 155fps;增强版本在 fps 为45的情况下,VOC07的 mAP 达到 \(63.4 \%\) 和VOC12的 mAP 达到 \(57.9 \%\) 。从 YOLO 的名字便可得知,其摈弃了建议检测加上验证的方式,取而代之的是使用单个神经网络来检测。它将图片划分为一个一个区域,然后预测每个区域的 bounding boxes 和概率。在之后的 V3和 V4版本中,继续改进其精度的同时保持着较高的速度。

Single Shot MultiBox Detector (SSD)

同年 W. Liu 提出了 SSD ,它是深度学习时代第二个一阶段检测器。SSD 的贡献在于其多推理和多分辨率检测技术,使用它们提高了一阶段检测器的检测精度,特别是对于小目标。SSD 与之前所有的检测器的区别在于:前者在不同的层检测不同尺度的目标,后者只在最高层检测。

RetinaNet

尽管一阶段检测器保有较快的速度,然而在精度上一直落后于两阶段的检测器。T.-Y. Lin 发现了背后的原因,并在2017年提出了 RetinaNet。他认为密集检测器在训练时遇到的前景和背景类别极度的不均衡是主要原因,并提出了 Focal Loss 来使检测器更多关注难的、易分错的样本。这使得单阶段的检测器的精度追上了两阶段的检测器。

目标检测数据集及衡量指标

常用数据集

衡量指标

在早期的目标检测,没有广泛接受的针对检测性能的评价标准。例如:行人检测的早期研究中,漏检率和每个窗口的误检(miss rate vs. false positives per-window FPPW)经常被使用作为指标。可是,把 FPPW 作为整张图片的检测性能评价室友缺陷的。在2009年,the Caltech pedestrian detection benchmark 的创立,评价标准由 FPPW 转化为 false positives per image(FPPI)。

最近几年,频繁用于目标检测的评价标准的是”Average Precision (AP)”,最开始是 VOC2007提出的。AP 是在不同的召回率(recall)下定义的平均检测准确率,而且通常是针对一个类别的评价而言的。mean AP(mAP)则是所有类别的平均 AP 来作为最后指标的表现。为了衡量目标的位置精度,则使用预测框和真值框的交并比(the Intersection over Union (IoU))大于某一阈值,如0.5,就认为是成功检测,否则则认为是漏检。

在2014年后,由于 MS-COCO 数据集的流行,研究人员更加关注 bounding box 的位置精度了。因此,不再使用一个固定的 IoU 阈值,MS-COCO AP 是0.5到0.95之间的许多 IoU 阈值的平均值。衡量指标的变化使得研究者更加追求目标的位置精度,也促使更多现实世界的应用形成。

目标检测的技术革新

早期进行目标检测的卷积神经网络

早期进行目标检测的 CNN 是在1990年,其中 Y. LeCun 做出了巨大贡献。由于计算资源的限制,那时候的 CNN 模型比起今天既小又浅的。尽管如此,在早期,计算的效率依然被认为是基于 CNN 的目标检测需要突破的难题。Y. LeCun 做出了一系列的改进,如:权重共享、空间位移网络等。使用这种方法,整张图像的任意位置的特征都能被在一次前向传播中提取。这基本上可以认为是今天全卷积神经网络(FCN)的原型。

多尺度目标检测

不同尺寸和不同纵横比物体的多尺度检测是目标检测中主要的技术挑战之一。在过去二十年里,多尺度目标检测经历了多个历史阶段。

Feature pyramids + sliding windows(2014年以前)随着在 VJ 检测器之后的算力的提升,研究者开始将更多的注意力放在基于 feature pyramids + sliding windows 的检测上。在2004到2014期间,许多具有里程碑意义的检测器都是基于这种策略进行研发的,如 HOG、DPM 甚至深度学习时期的 Overfeat。早期的检测器像 VJ 和 HOG 之类的,都是以固定的纵横比来检测目标的。为了实现变化纵横比的检测,混合模型被提出,即训练多个模型,每个模型有着不同的额纵横比。

目标建议(object proposals)是指一组可能含有任意物体的候选 boxes,第一次提出是在2010年。使用目标建议可以帮助避免竭力使用滑窗在整个图像上进行搜索。目标建议检测的算法应该具有以下要求:召回率高;位置精度高;在满足前者的同时,减少处理时间。在2014年后,目标建议检测已经从 the bottom-up vision 到 overfitting to a specific set of object classes,而且检测器和建议生成器的界线已经变得模糊了。

2013-2016年,由于 GPU 算力的增强,人们解决多尺度检测的方式也越来越直接和暴力,其直接预测 bounding boxes 在特征图上的坐标。这种方法的好处就是十分简单而且易于实施,不好的地方在于对于一些小目标位置可能不是足够精准。

Multi-reference detection 是用于多尺度检测最普遍的框架,它主要的想法则是在图像的不同位置预设一系列具有不同大小和纵横比的 reference boxes(也就是 anchor boxes)。anchor-based 模型的典型的 loss 一般分为两部分:类别损失(常用交叉熵损失)、位置损失(常用L1\L2 回归损失)

\[\begin{aligned} L(p, p^*, t, t^*) &= L_{cls}(p, p^*)+ \beta I(t)L_{loc}(t, t^*), \\ I(t) &= \begin{cases} 1,&\ IoU\{a, a^*\} \gt \eta \\ 0,&\ otherwise \end{cases} \end{aligned} \tag{1} \]

\(IoU\{a, a^*\}\) 代表了 anchor \(a\) 和它的真值 \(a^*\) 的 IoU,大于某一阈值表示其含有目标,定义为正样本进行计算位置的损失,否则不进行计算。

最近两年最流行的多分辨率检测是在网络不同的层检测不同尺度的目标。因为 CNN 在前向传播的时候,很自然的形成了特征金字塔。在深层的网络更容易检测大目标,浅层的网络更容易检测小目标。Multi-reference 和 multi-resolution detection 已经成为了目标检测系统最基础的两个模块了。

Bounding Box Regression

Bounding box(BB)的回归是目标检测中的一项重要的技术,在过去20年,BB 的回归经历了三个历史阶段:没有 BB 回归(2008以前)、从 BB 到 BB(2008-2013)以及从特征到 BB (2013以后)

大多数早期的检测方法如 VJ 和 HOG 没有使用 BB 回归,经常是直接使用滑窗作为检测的结果。为了获取精确的位置信息,研究者不得不建立更密集的金字塔和更密的进行滑窗。

第一次使用 BB 回归是在DPM。BB 回归在那时候是用作的后处理模块。

在 Faster RCNNN 后,BB 回归不再作为独立的后处理模块,而是直接和检测器整合到一起,端到端地训练。同一时间,BB 回归进化为直接在 CNN 的特征上进行预测 BB 。为了得到更加鲁棒的预测,使用了 smooth L1 loss

\[\begin{aligned} L(t)= \begin{cases} 5t^2,&\lvert t \rvert \leq 0.1\\ \lvert t \rvert-0.05,&\ otherwise \end{cases} \end{aligned} \tag{2} \]

或者使用根方函数

\[L(x,x^*)=(\sqrt{x}-\sqrt{x^*})^2 \tag{3} \]

作为回归的 loss,一些研究者也会选择标准化坐标来获得鲁棒性的结果。

Context Priming

可见目标常常是在环境中的特殊背景之中的。我们的大脑常常会利用目标与环境之间的联系来利于视觉感知。Context Priming 一直以来被利用改善检测,其经历了三个发展阶段:使用 local context 进行检测;使用 global context 进行检测;context interactives。

Local context 是指围绕在目标周围区域所包含的视觉信息。早在2000年,Sinha 和 Torralba 发现面部的边界轮廓是潜在能改善面部识别的性能的。Dalal 和 Triggs 也发现混合一系列小的背景信息也是能提高行人检测的精度的。深度学习常常使用增大感受野和目标建议区域的 size 来利用 local context。

Global context 把场景结构当作一个额外的目标检测的信息来源。早期,整合场景元素的统计学上的 summary 来进行利用 global context。对于如今深度学习的检测器,通过增大感受野(甚至比输入图片都大)或者 global pooling 来整合 global context。在 RNN 中,则是将 global context 当作序列信息来进行学习。

Context interactive 指的是通过可见元素的互动来传递的一段信息,比如:constrains 和 dependencies。对于大多数目标检测器,目标实例是被单独地检测和识别的,没有挖掘它们之间的联系。最近的研究者发现,可以通过考虑 context interactives 来提高检测器。其方法有两种:一是挖掘两个单独目标之间的关系,二是挖掘目标和背景之间的依赖。

Non-Maxium Suppression(NMS)

NMS 是用来去除可能检测同一目标的其他冗余检测框的后处理过程。在早期 NMS 由于检测模型的输出并不清晰所以并不是总是被使用。其发展经历了三个阶段:greedy selection;bounding box aggregation;learning to NMS。

Greedy selection 是老版本,但是在目标检测中最流行的方法。其使用的思路是十分简单和直接:对于一系列有重叠区域的 bounding boxes,其中检测分数最高的 bounding box会被保留,然后它邻近的 IoU 超过一定阈值的框都会被去除。其表现为一种贪心的方式。其仍然存在很多问题,例如:最高分数的 box 也许不是最合适的;它可能抑制掉密集情况下其周围的检测框;它也无法抑制 FP 的情况。

BB aggregation 是;一种 combine 或者 cluster 许多重叠的 bounding boxes 到最后一个检测框的思路。这种方式的在于,其充分利用了目标之间的关系和它们之间的空间布局。

Learning to NMS 是把 NMS 当作一种对raw bounding boxes 进行重新打分的 filter 来进行学习。这种方法目前来看最有前景的做法,即:使目标检测变为一种端到端的模型,不再使用人工设计(hand-crafted)的后处理。

Hard Negative Mining

目标检测模型训练的本质就是不均衡数据学习的问题。在这种情况下,基于滑窗进行检测的模型,背景和目标的不均衡性甚至达到 \(10^4-10^5\) 当今模型数据集需要目标纵横比的预测,不均衡比进一步扩大到 \(10^6-10^7\) 。在这种情况下,使用所有的背景数据则对模型是有害的,巨大数量的易分类的负样本会在学习过程占主导地位。Hard negative mining(HNM)便是解决训练过程中数据不均衡的问题。

Bootstrap 是指训练以背景样本的一小部分开始,然后逐渐加入新的易分错的背景到训练过程里。最开始 Bootstrap 是用于减少背景样本的计算量,后来被 DPM 和 HOG 当作解决数据不均衡问题的方法。

由于算力的改善,bootstrap 很快就被丢弃了。为了缓解训练的不均衡问题,Faster-RCNN 和 YOLO 只是简单地改变正负框的权重。很快,研究者发现权重平衡法不能完全解决数据不均衡问题。在2016年后,bootstrap 再次被应用到深度学习模型中,比如:SSD 和 OHEM中,只有一小部分样本(那些会产生较大 loss)会进行后向传播。在 RefineDet 中,”anchor refinementi module” 被设计到模型用于过滤简单易分类的负样本。另外,像 Focal Loss 则是通过改变 loss 来使网络更加关注难分类的样本。

目标检测的加速

过去20年里已经形成了一些成熟的加速技巧,如下图所示。

特征图的共享计算

在不同目标检测的不同计算阶段,特征的提取占了大量的计算。对于基于滑窗的检测器来说,位置和 scales 导致了计算的冗余性。前者导致了毗邻的框有重叠区域,后者在毗邻的 scales 特征的关联性导致计算的冗余性。

空间计算的冗余性和加速

最常用来减少空间计算冗余性的方法是共享特征图的计算,即在 sliding window 进行之前,只计算一次全图象的特征图。如图所示是用来加快 HOG 的行人检测。可是,这种方法的缺点也是显然的。特征图的分辨率(即滑窗在特征图上的最小步长)会首先于 cell size。如果一个目标在两个 cells 之间的话,就会造成漏检。当然特征图共享的思路也被广泛地应用于深度学习的模型里。

为了减少 the scale computational redundancy,最有成功的办法就是直接 scale the features,而不是 scale 图像本身,第一次应用是在 VJ检测器。可是,这样的办法无法应用到像 HOG-like 这样的 feature,因为有 blur effect。为了解决这个问题,P.Dollar 通过统计学研究发现邻近 scale 的 HOG 和 integral channel features有强的相关性。这种相关性可以用于加速;特征金字塔的计算。此外,建立检测器金字塔可以避免 scale computational redundancy。检测不同 scale 的目标使用多个检测器来计算一张特征图,而不是去 rescale 图像或者特征。

分类器的加速

基于滑窗的传统检测器,由于其较低的计算复杂性常常使用线性分类器而不是非线性的分类器。但是使用非线性分类器的检测器,比如使用 SVM,虽然能够获得较高的精度,但是同时带来了很高的计算成本。一旦训练集比较大,检测速度就会变得极慢。当时常常使用”model approximation”来进行加速

Network Pruning and Quantification

模型剪枝和网络量化使两种比较常见用于 CNN 模型加速的,前者使用于简化模型结构或者权重以达到减小它的规模的目的,后者指的是减小 activations or weights of the code-length。

Network Pruning

最早进行模型剪枝研究是 Y.LeCun,他提出一种叫做”optimal brain damage”来压缩多层感知网络的参数。这种方法中的 loss 函数是由二阶导数近似计算得到的,达到去除一些不重要权重的目的。传统的模型剪枝简单地去掉一些不重要的权重,这样在 convolutional filter 中可能会引起一些 sparse connectivity patterns,因此不能直接用于压缩 CNN。一个简单解决这个问题的办法就是用独立的权重代替整个 filters。

Network Quantification

最近对网络量化的研究关注点放在了网络的二值化上,其目的是将其 activations 和权重进行二值化(0或者1)以达到浮点数操作转为逻辑操作。这种方法能显着加快计算和减少网络的储存,因此可以轻松的用于移动设备之中。另外一种思路是用最小二乘法的二值化变量来近似计算卷积,想要更精确的话,则可以考虑使用多个二值卷积的线性组合进行逼近。此外,发展 GPU 对二值计算的加速也是有显着的提升效果。

Network Distillation

知识蒸馏是一个将达巨型网络(“教师网络”)的知识压缩至较小网络(“学生网络”)的框架。最近这种思路已经被用于目标检测加速中了。比较直接的办法就是用教师网络“指导”学生网络的学习、训练(light-weight)让后者能够加速检测。另外一种方法,使 candidate region 得到转换以达到减小学生网络和教师网络的 features 距离。这使得在相同的精度下,得到两倍速度的提升。

轻量级网络的设计

Factorizing Convolutions

Factorizing convolution 是最简单和直接建立轻量级模型的方法。其中有两类方法:如上图(b)所示,将一个大的卷积核在空间维度 factorize 成一系列小的卷积核。比如,将 \(7 \times 7\) 的卷积核换成三个$ 3 \times 3$卷积核,两种卷积核的感受野相同,但是后者效率更高;如上图(c)所示,第二种方法则是将一大组的卷积在通道维度换为两小组卷积,通道数为 \(d\) ,size 为 \(k \times k\) 的卷积核对通道数为 c 的特征图进行计算,替换为先用 \(d^{‘}\) 维卷积核进行卷积,然后用一个非线性的激活函数进行激活,最后再用 \(d\) 维的卷积核进行卷积。计算复杂度由 \(\mathcal{O}(dk^2c)\) 减小为 \(\mathcal{O}(d^{‘}k^2c)+\mathcal{O}(dd^{‘})\)

组卷积

组卷积通过将特征的通道分为多组分别卷积来减少参数量。如图(d)所示,如果我们平均将特征的通道分为 \(m\) 组,计算量则会变为原来的 \(1/m\) 。

深度可分离卷积

如上图(e),深度可分离卷积可以看作组卷积的特殊情况,即组数等于通道数。假设我们有一层卷积核为 \(d\) 维的卷积层和通道数为 \(c\) 的特征图,每个卷积核的大小为 \(k \times k\) 。对于深度可分离卷积每一个 \(k \times k \times c\) 的卷积核分为了 \(c\) 个 \(k \times k \times 1\) 个卷积核,然后它们分别和特征图对应的每个通道进行卷积,最后再用 \(1 \times 1\) 大小的卷积核进行通道的转为,最后的输出通道为 \(d\) 维。计算量便由 \(\mathcal{O}(dk^2c)\) 变为 \(\mathcal{O}(ck^2)+\mathcal{O}(dc)\)

Bottle-neck Design

Bottleneck 常常被用来用减少维度的方式更有效的学习数据的 encoding,最近几年,其常常被用来设计轻量化网络。最常用的一种方法是压缩检测器的输入层,来减少大量的计算。另外一种是压缩检测器的输出使得特征图更薄。

Neural Architecture Search

使用网络结构搜索(NAS)而不是经验来自动地设计网络成为了一大热点。NAS 已经被成功应用到图像分类,目标检测和图像分割任务中了。因而,其表现出在设计轻量级网络有着较好地前景。

目标检测的最新进展

Detection with Better Engines

在众多的计算机视觉的任务中,深层的 CNN 有着重要的作用。检测器的精确度和它提取特征的网络深深联系在一起。一般这部分我们叫 backbone 如:ResNet、VGG 等,将其当作检测器的“发动机”。

GoogLeNet:也是众所周知的 Inception 系列。其最主要的成果便是介绍了 factorize convolution 和 BN。

ResNet:一种通过残差函数来使得网络更容易训练和加深。

DenseNet:ResNet 的成功告诉我们 CNN 中的残差连接使得网络更容易加深并获得更精准的结果。于是提出了一种密集连接的模块,其将每一层到其他每一层进行连接。

SENet:其主要贡献将全局池化和 shuffle 来学习特征图的通道量级的重要性进行整合。

另外,ResNet 的改进版 ResNeXt 也是十分优秀的 backbone。为了加快速度 Xception 引入了深度可分离卷积,成为 Inception 的改进版。

Detection with Better Features

特征表达的质量对于目标检测至关重要。许多研究者在改善图像特征上不懈努力,其主要分为两类方法:特征融合;用大的感受野学习高分辨率特征。

特征融合的重要性

不变性和等变性是图像特征表达的两种重要特性。分类希望得到不变性的特征表达,因为它的目的是学习到高层语义信息;目标定位则是希望等变性的特征表达,因为它需要区分位置和 scale 的变化。在 CNN 中的卷积层、池化层会使不变性增强,等变性减弱。因此,在深层的特征有更多高层的语义信息,其帮助分类,在浅层的特征有更多帮助定位的信息,所以要将两者进行融合。

不同方式的特征融合

Processing Flow

特征融合的方式主要分为两种:bottom-up fusion;top-down fusion,如上图(a)-(b)所示。Bottom-up fusion 将浅层的特征通过跳跃连接喂入较深层,相反 top-down fusion 是将较深层的特征喂入较浅层。不同层的特征图往往在空间和通道有着不同的 size,这时候可以通过调整通道数的数量、上采样低分辨率特征图、下采样高分辨率特征图到合适的尺寸。最简单的方式就是用邻近插值和双线性插值的方法。此外,小数级步长的卷积(a.k.a 转置卷积)是另外一种 resize 特征图和调整通道数量。

Element-wise Operation

From a local point of view,特征融合实际是元素级(element-wise)的运算,主要的方式分为:点和;点乘;concatenation。如上图(c)-(e)。

对位求和是最简单进行特征融合的方式。对位相乘与对位相加十分相近,不过前者能被用来抑制或者加强某一特定区域的特征,这对小目标检测也许有益。特征的 concat 是另一种特征通融合的方式,其优势在于能够整合不同区域的语境信息,缺点在于会增加内存。

Learning High Resolution Features with Large Receptive Fields

感受野和特征分辨率是 CNN 两个很重要的特性,拥有较大感受野的网络能捕捉到更大范围的 context 信息,较小的感受野则只能关注局部的细节。之前提到特征图分辨率越低,小目标的检测就越难。提升特征分辨率最直接的方式就是去除池化层或者减小卷积层的下采样率,然而这样做会造成检测器的”sight”会变得”narrow”,引起一些大目标的漏检。有一个主流的做法同时增加感受野和提升特征分辨率就是引入 dilated convolution(a.k.a atrous convlution)。空洞卷积最开始是在分割任务中提出的。其主要的思路是,扩张卷积核和使用稀疏参数。例如:kernelsize 为 \(3 \times 3\) 空洞率为2的卷积核,其感受野和 \(5 \times 5\) 是一样的,但是只有9个参数。现在空洞卷积已经被广泛用于目标检测,增大感受野的同时不用增加参数量和计算量。

Beyond Sliding Window

Detection as sub-region search

子区域的搜索提供一种新的目标检测方法,最近的方法将目标检测当做路径规划的过程即:从最开始的 grids 最后聚集到期望的真值框。另一种是将目标检测当做反复更新的过程即:不断修正预测框的 corners。

Detection as key points localization

关键点定位在计算机视觉里有着较为广泛的应用,例如:脸部表情识别、人体姿势识别。在图片中的任意目标都是由它左上角和右下角的角点唯一确定的,其中的一个应用思路是用角点预测热图。这种方法的优点在于可以在语义分割的框架中使用,而且不需要设计 anchor boxes。

Improvements of Localization

Bounding Box Refinement

最直接进行改善定位精度的方法就是 bounding box 的修正,其可以看做一种目标检测结果的后处理。如今虽然 bounding box 的回归都被整合到目标检测器里了,然而仍然有一些 unexpected scales 的目标不能很好的被预设的 anchor 所捕捉到,这必然导致位置精度的预测不准。”iterative bounding box refinement”是一种不断将检测结果喂入 BB regressor 进行修正直到预测结果理想为止的方法。但是,一些研究者认为这种方法使用多次,the BB regression 对位置敏感性进行衰退。

Improving Loss Functions for Accurate Localization

目标检测中的定位一直被当做坐标回归的问题。可是,这种范式有两个致命的缺点:第一,回归的 loss 和最终的位置评价是不相关的,如,我们不能保证在较低的回归误差情况下,总是产生更高的 IoU,特别是有较大纵横比的情况;第二,传统的回归方法不能提供位置的置信度,这会在 nms 的时候,可能将位置回归好,但是分类分数低的框进行抑制。为了解决这个问题,有的研究者直接将 IoU 进行当做 loss,一些研究者则是将 IoU 的预测来当做框的质量估计。此外,一些研究者也试着改善 probabilistic inference framework 的位置预测,直接学习位置的概率分布。

Learning with Segmentation

为什幺分割能改善检测

Segmentation helps category recognition

在计算机视觉任务中,目标(人或者车)与 stuff (天空、水或者玻璃)的区别在于前者有封闭的、有定义的边界,而后者没有。作为分割任务的特征能很好的捕获目标的边界,其对分类有帮助。

Segmentation helps accurate localization

目标的真值框取决于它的边界,对于有些物体的形状比较特殊(比如猫有着长尾巴)。这样很难预测出较高的 IoU 定位,然而目标的边界能很好的编码进入分割之中,进一步帮助定位。

Segmentation can be embedded as context

利用分割的语义信息,可以帮助目标检测。比如,飞机更多可能是飞在天上,鱼儿更多可能是游在水中。

分割如何改善检测

Learning with enriched features

最简单的方法就是将分割网络当做特征的提取,然后将其整合进入目标检测网络作为额外的特征。这种方法的优点在于它易于实施,缺点在于分割网络会带来额外的计算。

Learning with multi-task loss functions

另外一种方法就是添加一个分割的分支,然后用多任务的 loss 来训练网络。在大多数情况下,分割分支会被在推理阶段移除。这种方法的优点在于速度不会受到影响,缺点在于需要像素级的标签。最后,有些研究者使用弱监督学习,不使用像素级的标签而是使用 bounding box level 的标签。

Training from Scratch

多数深度学习的检测器首先都是基于较大数据集的预训练。人们常常认为预训练能帮助改善泛化能力于训练速度,问题是我们真的需要进行在如 ImageNet 的数据集进行训练吗?事实上,当在目标检测中做这件事的时候有着一些限制。首先是分类和检测区别,它们的 loss 和各种分布都不一样。另外一个是 域的不匹配(the domain mismatch),许多在 ImageNet 的图片是 RGB,但是检测的图片可能是 RGB-D 或者 3D medical 图片,预训练的知识可能不能很好的进行转换。

最近几年,研究者试着在 scratch 上进行预训练。为了加快训练和改善稳定性,研究者引入了 dense connection 和 BN 在浅层加速后向传播。K.He 等人用随机初始的标准模型来训练检测 COCO 数据集,仅仅花了较少的额外训练时间,模型便收敛了。这意味着 ImageNet 可能预训练会加速收敛,但是没有提供必要的泛化或改善最后的检测精度。

Adversarial Training

The Generative Adversarial Networks (GAN)由 A.Goodfellow 在2014年提出后获得了巨大的关注。GAN 一般由两部分组成:生成器网络和辨别器网络,其进行互相博弈,并使用 minimax optimization 进行优化。生成器学习后将 latent space 映射到特定数据中感兴趣的分布,辨别器则是分辨、判断真实数据分布和生成器生成的数据。GAN 被广泛应用到许多计算机视觉的任务中,如图像生成、图像风格迁移以及图像超分等。最近两年,GAN 被应用到目标检测中以改善小目标和遮挡目标。

为了改善遮挡目标的检测,有一个思路为:用 adversarial training 生成遮挡的 mask,直接使特征去模仿遮挡。此外对抗攻击也引起了研究者的注意,这对像自动驾驶等领域十分重要,因为其在具有鲁棒性之前不能被真正应用到实际当中。

Weakly Supervised Object Detection

目标检测常常需要大量人工标注数据,然而标注数据的过程耗时、昂贵而且效率低。弱监督目标检测(WSOD)使用图片级的标注来替代这个问题。最近,实例学习被应用到 WSOD 中,使用一系列的标注包每一个含有多个实例来替换单独标注。如果我们认为在一张图片中的目标候选为一个包,并且图片级标注作为 label,那幺 WSOD 就成为了多实例学习的过程。

一些其他的研究者认为 WSOD 是一种通过选择最重要的区域来建议排序的过程,然后在图片级标注上训练这些区域。另一个简单的方法是 WSOD 可以用来掩膜图片的不同部分,如果目标检测分数急速下降,目标便有着较高的概率。此外,在训练过程中,交互标注将人的反馈纳入考虑来改善 WSOD。最近,生成对抗训练也被应用到 WSOD 中。

待续~

From Object Detection in 20 Years


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK