计算机视觉

计算机视觉是一门研究如何使机器“看”的科学,更进一步的说,就是是指用摄影机和电脑代替人眼对目标进行识别、跟踪和测量等机器视觉,并进一步做图形处理,使电脑处理成为更适合人眼观察或传送给仪器检测的图像。作为一个科学学科,计算机视觉研究相关的理论和技术,试图建立能够从图像或者多维数据中获取‘信息’的人工智能系统。
深度学习在计算机视觉领域四大基本任务中的应用,包括:

任务名称输入输出评估方法
图像分类(a)图片物体的类别准确率(accuracy)
定位、检测(b)图片方框在图片中的位置(x,y,w,h)检测评价函数 intersection-over-union ( IOU )
语义分割(c)图片从像素的角度分割出图片中的不同对象,对原图中的每个像素都进行标注像素精度,均像素精度等
实例分割(d)图片在像素层面识别目标轮廓average precision,IU/IoU

在这里插入图片描述
在这里插入图片描述

1.图像分类(image classification)

(1)任务要求:
给定一张输入图像,图像分类任务旨在判断该图像所属类别

(2)图像分类常用数据集
以下是几种常用分类数据集,难度依次递增。

数据集简介
MNIST60k训练图像、10k测试图像、10个类别、图像大小1×28×28、内容是0-9手写数字
CIFAR-1050k训练图像、10k测试图像、10个类别、图像大小3×32×32
CIFAR-10050k训练图像、10k测试图像、100个类别、图像大小3×32×32
ImageNet1.2M训练图像、50k验证图像、1k个类别。2017年及之前,每年会举行基于ImageNet数据集的ILSVRC竞赛,这相当于计算机视觉界奥林匹克

http://rodrigob.github.io/are_we_there_yet/build/ 上列举了各算法在各数据集上的性能排名。

(3)图像分类经典网络结构

  • 基本架构
    conv代表卷积层、bn代表批量归一层、pool代表汇合层(池化层)。最常见的网络结构顺序是conv -> bn -> relu -> pool,其中卷积层用于提取特征、汇合层用于减少空间大小。随着网络深度的进行,图像的空间大小将越来越小,而通道数会越来越大。

  • 网络设计
    当面对你的实际任务时,如果你的目标是解决该任务而不是发明新算法,那么不要试图自己设计全新的网络结构,也不要试图从零复现现有的网络结构。找已经公开的实现和预训练模型进行微调。去掉最后一个全连接层和对应softmax,加上对应你任务的全连接层和softmax,再固定住前面的层,只训练你加的部分。如果你的训练数据比较多,那么可以多微调几层,甚至微调所有层。

LeNet-5

  • 60k参数;
  • 网络基本架构为:conv1 (6) -> pool1 -> conv2 (16) -> pool2 -> fc3 (120) -> fc4 (84) -> fc5 (10) -> softmax。括号中的数字代表通道数,网络名称中有5表示它有5层conv/fc层;
  • 当时,LeNet-5被成功用于ATM以对支票中的手写数字进行识别。LeNet取名源自其作者姓LeCun。
    在这里插入图片描述

AlexNet

  • 60M参数,ILSVRC 2012的冠军网络;
  • 网络基本架构为:conv1 (96) -> pool1 -> conv2 (256) -> pool2 -> conv3 (384) -> conv4 (384) -> conv5 (256) -> pool5 -> fc6 (4096) -> fc7 (4096) -> fc8 (1000) -> softmax
  • AlexNet有着和LeNet-5相似网络结构,但更深、有更多参数。conv1使用11×11的滤波器、步长为4使空间大小迅速减小(227×227 -> 55×55);
  • AlexNet的关键点是:(1). 使用了ReLU激活函数,使之有更好的梯度特性、训练更快。(2). 使用了随机失活(dropout)。(3). 大量使用数据扩充技术;
  • AlexNet的意义在于它以高出第二名10%的性能取得了当年ILSVRC竞赛的冠军,这使人们意识到卷积神经网络的优势。此外,AlexNet也使人们意识到可以利用GPU加速卷积神经网络训练。AlexNet取名源自其作者名Alex。
    在这里插入图片描述

VGG-16/VGG-19

  • 138M参数,ILSVRC 2014的亚军网络;
  • VGG-16的基本架构为:conv1^2 (64) -> pool1 -> conv2^2 (128) -> pool2 -> conv3^3 (256) -> pool3 -> conv4^3 (512) -> pool4 -> conv5^3 (512) -> pool5 -> fc6 (4096) -> fc7 (4096) -> fc8 (1000) -> softmax。 ^3代表重复3次;
  • VGG网络的关键点是:(1). 结构简单,只有3×3卷积和2×2汇合两种配置,并且重复堆叠相同的模块组合。卷积层不改变空间大小,每经过一次汇合层,空间大小减半。(2). 参数量大,而且大部分的参数集中在全连接层中。网络名称中有16表示它有16层conv/fc层。(3). 合适的网络初始化和使用批量归一(batch normalization)层对训练深层网络很重要。在原论文中无法直接训练深层VGG网络,因此先训练浅层网络,并使用浅层网络对深层网络进行初始化。在BN出现之后,伴随其他技术,后续提出的深层网络可以直接得以训练。
  • VGG-19结构类似于VGG-16,有略好于VGG-16的性能,但VGG-19需要消耗更大的资源,因此实际中VGG-16使用得更多。由于VGG-16网络结构十分简单,并且很适合迁移学习,因此至今VGG-16仍在广泛使用。VGG-16和VGG-19取名源自作者所处研究组名(Visual Geometry Group)。
    在这里插入图片描述

GoogLeNet

  • 5M参数,ILSVRC 2014的冠军网络;
  • GoogLeNet试图回答在设计网络时究竟应该选多大尺寸的卷积、或者应该选汇合层。其提出了Inception模块,同时用1×1、3×3、5×5卷积和3×3汇合,并保留所有结果;
  • 网络基本架构为:conv1 (64) -> pool1 -> conv2^2 (64, 192) -> pool2 -> inc3 (256, 480) -> pool3 -> inc4^5 (512, 512, 512, 528, 832) -> pool4 -> inc5^2 (832, 1024) -> pool5 -> fc (1000);
  • GoogLeNet的关键点是:(1). 多分支分别处理,并级联结果。(2). 为了降低计算量,用了1×1卷积降维。GoogLeNet使用了全局平均汇合替代全连接层,使网络参数大幅减少。
  • GoogLeNet取名源自作者所处单位(Google),其中L大写是为了向LeNet致敬,而Inception的名字来源于盗梦空间中的"we need to go deeper"梗。

在这里插入图片描述

Inception v3/v4

  • 在GoogLeNet的基础上进一步降低参数。其和GoogLeNet有相似的Inception模块,但将7×7和5×5卷积分解成若干等效3×3卷积,并在网络中后部分把3×3卷积分解为1×3和3×1卷积。这使得在相似的网络参数下网络可以部署到42层。
  • 此外,Inception v3使用了批量归一层。Inception v3是GoogLeNet计算量的2.5倍,而错误率较后者下降了3%。
  • Inception v4在Inception模块基础上结合了residual模块(见下文),进一步降低了0.4%的错误率。

在这里插入图片描述

ResNet

  • ILSVRC2015的冠军网络;
  • ResNet旨在解决网络加深后训练难度增大的现象,提出了residual模块,包含两个3×3卷积和一个短路连接(左图)。短路连接可以有效缓解反向传播时由于深度过深导致的梯度消失现象,这使得网络加深之后性能不会变差。
  • 短路连接是深度学习又一重要思想,除计算机视觉外,短路连接也被用到了机器翻译、语音识别/合成领域。
  • 此外,具有短路连接的ResNet可以看作是许多不同深度而共享参数的网络的集成,网络数目随层数指数增加。
  • ResNet的关键点是:(1). 使用短路连接,使训练深层网络更容易,并且重复堆叠相同的模块组合。(2). ResNet大量使用了批量归一层。(3). 对于很深的网络(超过50层),ResNet使用了更高效的瓶颈(bottleneck)结构(右图)。ResNet在ImageNet上取得了超过人的准确率。
  • 在这里插入图片描述
    下图对比了上述几种网络结构:
    在这里插入图片描述

preResNet

  • ResNet的改进;
  • preResNet整了residual模块中各层的顺序:相比经典residual模块(a),(b)将BN共享会更加影响信息的短路传播,使网络更难训练、性能也更差;©直接将ReLU移到BN后会使该分支的输出始终非负,使网络表示能力下降;(d)将ReLU提前解决了(e)的非负问题,但ReLU无法享受BN的效果;(e)将ReLU和BN都提前解决了(d)的问题。preResNet的**短路连接(e)**能更加直接的传递信息,进而取得了比ResNet更好的性能。
    在这里插入图片描述

ResNeXt

  • ResNet的另一改进;
  • 传统的方法通常是靠加深或加宽网络来提升性能,但计算开销也会随之增加。ResNeXt旨在不改变模型复杂度的情况下提升性能。受精简而高效的Inception模块启发,ResNeXt将ResNet中非短路那一分支变为多个分支,和Inception不同的是,每个分支的结构都相同;
  • ResNeXt的关键点是:(1). 沿用ResNet的短路连接,并且重复堆叠相同的模块组合。(2). 多分支分别处理。(3). 使用1×1卷积降低计算量。其综合了ResNet和Inception的优点。此外,ResNeXt巧妙地利用分组卷积进行实现。ResNeXt发现,增加分支数是比加深或加宽更有效地提升网络性能的方式。ResNeXt的命名旨在说明这是下一代(next)的ResNet。

在这里插入图片描述

Stochastic depth

  • ResNet的改进,基本架构使用ResNet-110或152;
  • 旨在缓解梯度消失和加速训练。类似于随机失活(dropout),其以一定概率随机将residual模块失活
  • 失活的模块直接由短路分支输出,而不经过有参数的分支。在测试时,前馈经过全部模块;
  • 随机深度说明residual模块是有信息冗余的。

在这里插入图片描述

DenseNet

  • 其目的也是避免梯度消失;
  • 和residual模块不同,dense模块中任意两层之间均有短路连接。也就是说,每一层的输入通过级联(concatenation)包含了之前所有层的结果,即包含由低到高所有层次的特征;
  • 和之前方法不同的是,DenseNet中卷积层的滤波器数很少。DenseNet只用ResNet一半的参数即可达到ResNet的性能;
  • 实现方面,作者在大会报告指出,直接将输出级联会占用很大GPU存储。后来,通过共享存储,可以在相同的GPU存储资源下训练更深的DenseNet。但由于有些中间结果需要重复计算,该实现会增加训练时间。

在这里插入图片描述

SENet

  • ILSVRC 2017的冠军网络;
  • SENet通过额外的分支**(gap-fc-fc-sigm)**来得到每个通道的[0, 1]权重,自适应地校正原各通道激活值响应。以提升有用的通道响应并抑制对当前任务用处不大的通道响应。
    在这里插入图片描述

2.目标定位(object localization)

(1)任务要求:在图像分类的基础上,我们还想知道图像中的目标具体在图像的什么位置,通常是以包围盒的(bounding box)形式

(2)基本思路:多任务学习,网络带有两个输出分支。一个分支用于做图像分类,即全连接+softmax判断目标类别,和单纯图像分类区别在于这里还另外需要一个“背景”类。另一个分支用于判断目标位置,即完成回归任务输出四个数字标记包围盒位置(例如中心点横纵坐标和包围盒长宽),该分支输出结果只有在分类分支判断不为“背景”时才使用。

卷积神经网络CNN已经可以完成了图像识别的任务了,我们只需要添加一些额外的功能来完成定位任务即可:

思路1:看做回归问题,预测出(x,y,w,h)四个参数的值,从而得出方框的位置

在这里插入图片描述
1.先解决简单的分类问题, 搭一个识别图像的神经网络。在AlexNet VGG GoogleLenet上fine-tuning一下
在这里插入图片描述

2.在上述神经网络的尾部展开(也就说CNN前面保持不变,我们对CNN的结尾处作出改进:加了两个头:“分类头”和“回归头”),成为classification + regression模式
在这里插入图片描述
3.Regression那个部分用欧氏距离损失,使用SGD训练
4.预测阶段把2个头部拼上,完成不同的功能
这里需要进行两次fine-tuning(意思应该是先训练好分类模型,在再分类模型之上进行微调):
第一次在ALexNet上做,第二次将头部改成regression head,前面不变,做一次fine-tuning
Regression的部分加在哪?

有两种处理方法:
  • 加在最后一个卷积层后面(如VGG)
  • 加在最后一个全连接层后面(如R-CNN)

regression的训练参数收敛的时间要长得多,所以上面的网络采取了用classification的网络来计算出网络共同部分的连接权值

思路2:取图像窗口,同样是classification + regression模式,取不同的大小的“框”,让框出现在不同的位置,得出这个框的判定得分,取得分最高的那个框

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
根据得分的高低,我们选择了右下角的黑框作为目标位置的预测。
注:有的时候也会选择得分最高的两个框,然后取两框的交集作为最终的位置预测。

疑惑:框要取多大?
取不同的框,依次从左上角扫到右下角。非常粗暴啊。

总结一下思路:
对一张图片,用各种大小的框(遍历整张图片)将图片截取出来,输入到CNN,然后CNN会输出这个框的得分(classification)以及这个框图片对应的x,y,h,w(regression)。
暴力搜索的方法太耗时,做个优化:
在这里插入图片描述
优化成这样:把全连接层改为卷积核为1*1的卷积层,大大减少训练参数,这样可以提提速:
在这里插入图片描述

3.目标检测(object detection)

(1)任务要求:在目标定位中,通常只有一个或固定数目的目标,而目标检测更一般化,其图像中出现的目标种类和数目都不定(多物体识别+定位多个物体)。因此,目标检测是比目标定位更具挑战性的任务。

(2) 目标检测常用数据集

数据集简介
PASCAL VOC包含20个类别。通常是用VOC07和VOC12的trainval并集作为训练,用VOC07的测试集作为测试。
MS COCOCOCO比VOC更困难。COCO包含80k训练图像、40k验证图像、和20k没有公开标记的测试图像(test-dev),80个类别,平均每张图7.2个目标。通常是用80k训练和35k验证图像的并集作为训练,其余5k图像作为验证,20k测试图像用于线上测试。

(3)目标检测的常用评价指标

指标说明
交并比(intersection over union, IoU)算法预测的包围盒和真实包围盒交集的面积除以这两个包围盒并集的面积,取值为[0, 1]。交并比度量了算法预测的包围盒和真实包围盒的接近程度,交并比越大,两个包围盒的重叠程度越高
mAP (mean average precision)目标检测中的常用评价指标,计算方法如下。当预测的包围盒和真实包围盒的交并比大于某一阈值(通常为0.5),则认为该预测正确。对每个类别,我们画出它的查准率-查全率(precision-recall)曲线,平均准确率是曲线下的面积。之后再对所有类别的平均准确率求平均,即可得到mAP,其取值为[0, 100%]
基于候选区域的目标检测算法

基本思路
使用不同大小的窗口在图像上滑动,在每个区域,对窗口内的区域进行目标定位。即,将每个窗口内的区域前馈网络,其分类分支用于判断该区域的类别,回归分支用于输出包围盒。基于滑动窗的目标检测动机是,尽管原图中可能包含多个目标,但滑动窗对应的图像局部区域内通常只会有一个目标(或没有)。因此,我们可以沿用目标定位的思路对窗口内区域逐个进行处理。但是,由于该方法要把图像所有区域都滑动一遍,而且滑动窗大小不一,这会带来很大的计算开销。

以下是各种选定候选框的方法的性能对比,比如EdgeBoxes和Selective Search;提取候选框用到的算法“选择性搜索”到底怎么选出这些候选框的呢?那个就得好好看看它的论文了,这里就不介绍了
在这里插入图片描述

R-CNN(Region-CNN)

R-CNN 先利用一些非深度学习的类别无关的无监督方法,在图像中找到一些可能包含目标的候选区域。之后,对每个候选区域前馈网络,进行目标定位,即两分支(分类+回归)输出。其中,我们仍然需要回归分支的原因是,候选区域只是对包含目标区域的一个粗略的估计,我们需要有监督地利用回归分支得到更精确的包围盒预测结果。R-CNN的重要性在于当时目标检测已接近瓶颈期,而R-CNN利于在ImageNet预训练模型微调的方法一举将VOC上mAP由35.1%提升至53.7%,确定了深度学习下目标检测的基本思路。一个有趣之处是R-CNN论文开篇第一句只有两个词"Features matter." 这点明了深度学习方法的核心。
在这里插入图片描述
基本思路
1.训练(或者预加载)一个分类模型(比如AlexNet)
在这里插入图片描述
2.对该模型做fine-tuning,将分类数从1000改为20,去掉最后一个全连接层
在这里插入图片描述
3.特征提取,提取图像的所有候选框(选择性搜索),对于每一个区域:修正区域大小以适合CNN的输入,做一次前向运算,将第五个池化层的输出(就是对候选框提取到的特征)存到硬盘
在这里插入图片描述
4.训练一个SVM分类器(二分类)来判断这个候选框里物体的类别,每个类别对应一个SVM,判断是不是属于这个类别,是就是positive,反之nagative
比如下图,就是狗分类的SVM
在这里插入图片描述
5.使用回归器精细修正候选框位置:对于每一个类,训练一个线性回归模型去判定这个框是否框得完美
在这里插入图片描述

候选区域(region proposal)
候选区域生成算法通常基于图像的颜色、纹理、面积、位置等合并相似的像素,最终可以得到一系列的候选矩阵区域。这些算法,如selective searchEdgeBoxes,通常只需要几秒的CPU时间,而且,一个典型的候选区域数目是2k,相比于用滑动窗把图像所有区域都滑动一遍,基于候选区域的方法十分高效。另一方面,这些候选区域生成算法的查准率(precision)一般,但查全率(recall)通常比较高,这使得我们不容易遗漏图像中的目标。

SPP Net

SPP:Spatial Pyramid Pooling(空间金字塔池化)
特点:
(1)结合空间金字塔方法实现CNNs的对尺度输入
一般CNN后接全连接层或者分类器,他们都需要固定的输入尺寸,因此不得不对输入数据进行crop或者warp,这些预处理会造成数据的丢失或几何的失真。SPP Net的第一个贡献就是将金字塔思想加入到CNN,实现了数据的多尺度输入
如下图所示,在卷积层和全连接层之间加入了SPP layer。此时网络的输入可以是任意尺度的,在SPP layer中每一个pooling的filter会根据输入调整大小,而SPP的输出尺度始终是固定的:
在这里插入图片描述
(2)只对原图提取一次卷积特征
在R-CNN中,每个候选框先resize到统一大小,然后分别作为CNN的输入,这样是很低效的。
所以SPP Net根据这个缺点做了优化:只对原图进行一次卷积得到整张图的feature map,然后找到每个候选框zaifeature map上的映射patch,将此patch作为每个候选框的卷积特征输入到SPP layer和之后的层。节省了大量的计算时间,比R-CNN有一百倍左右的提速。
在这里插入图片描述

Fast R-CNN

在这里插入图片描述

  • R-CNN的弊端是需要多次前馈网络,这使得R-CNN的运行效率不高,预测一张图像需要47秒。即使使用了selective search等预处理步骤来提取潜在的bounding box作为输入,但是RCNN仍会有严重的速度瓶颈,原因也很明显,就是计算机对所有region进行特征提取时会有重复计算,Fast-RCNN正是为了解决这个问题诞生的:

  • Fast RCNN方法解决了RCNN方法三个问题:(1)测试时速度慢 ,RCNN一张图像内候选框之间大量重叠,提取特征操作冗余。 Fast R-CNN将整张图像归一化后直接送入深度网络。在邻接时,才加入候选框信息,在末尾的少数几层处理每个候选框;(2)训练时速度慢 ,在训练时,Fast R-CNN先将一张图像送入网络,紧接着送入从这幅图像上提取出的候选区域。这些候选区域的前几层特征不需要再重复计算;(3)训练所需空间大,RCNN中独立的分类器和回归器需要大量特征作为训练样本。 Fast R-CNN把类别判断和位置精调统一用深度网络实现,不再需要额外存储。

  • Fast R-CNN同样基于候选区域进行目标检测,但受SPPNet启发,在Fast R-CNN中,不同候选区域的卷积特征提取部分是共享的。也就是说,我们先将整副图像前馈网络,并提取conv5卷积特征。之后,基于在原始图像上运行候选区域生成算法的结果在卷积特征上进行采样,这一步称为兴趣区域汇合。最后,对每个候选区域,进行目标定位,即两分支(分类+回归)输出。

  • 兴趣区域汇合(region of interest pooling, RoI pooling) ,这个网络层可以把不同大小的输入映射到一个固定尺度的特征向量,而我们知道,conv、pooling、relu等操作都不需要固定size的输入,因此,在原始图片上执行这些操作后,虽然输入图片size不同导致得到的feature map尺寸也不同,不能直接接到一个全连接层进行分类,但是可以加入这个神奇的ROI Pooling层,对每个region都提取一个固定维度的特征表示,再通过正常的softmax进行类型识别。

  • 之前RCNN的处理流程是先提proposal,然后CNN提取特征,之后用SVM分类器,最后再做bounding box regression,而在Fast-RCNN中,作者巧妙的把bounding box regression放进了神经网络内部,与region分类和并成为了一个multi-task模型,实际实验也证明,这两个任务能够共享卷积特征,并相互促进。Fast-RCNN很重要的一个贡献是成功的让人们看到了Region Proposal+CNN这一框架实时检测的希望,原来多类检测真的可以在保证准确率的同时提升处理速度,也为后来的Faster-RCNN做下了铺垫。

Faster R-CNN

Fast R-CNN存在的问题:存在瓶颈:选择性搜索,找出所有的候选框,这个也非常耗时。那我们能不能找出一个更加高效的方法来求出这些候选框呢?Faster R-CNN不再使用现有的无监督候选区域生成算法,而利用候选区域网络从conv5特征中产生候选区域,并且将候选区域网络集成到整个网络中端到端训练,相当于加入一个提取边缘的神经网络Region Proposal Network(RPN),也就说找到候选框的工作也交给神经网络来做了。Faster R-CNN的测试时间是0.2秒,接近实时。后来有研究发现,通过使用更少的候选区域,可以在性能损失不大的条件下进一步提速
在这里插入图片描述
RPN简介:
  • 在feature map上滑动窗口
  • 建一个神经网络用于物体分类+框位置的回归
  • 滑动窗口的位置提供了物体的大体位置信息
  • 框的回归提供了框更精确的位置

在这里插入图片描述
候选区域网络(region proposal networks, RPN) 在卷积特征上的通过两层卷积(3×3和1×1卷积),输出两个分支。其中,一个分支用于判断每个锚盒是否包含了目标,另一个分支对每个锚盒输出候选区域的4个坐标。候选区域网络实际上延续了基于滑动窗进行目标定位的思路,不同之处在于候选区域网络在卷积特征而不是在原图上进行滑动。由于卷积特征的空间大小很小而感受野很大,即使使用3×3的滑动窗,也能对应于很大的原图区域。Faster R-CNN实际使用了3组大小(128×128、256×256、512×512)、3组长宽比(1:1、1:2、2:1),共计9个锚盒,这里锚盒的大小已经超过conv5特征感受野的大小。对一张1000×600的图像,可以得到20k个锚盒。

锚盒(anchor box) 是预先定义形状和大小的包围盒。使用锚盒的原因包括:(1). 图像中的候选区域大小和长宽比不同,直接回归比对锚盒坐标修正训练起来更困难。(2)conv5特征感受野很大,很可能该感受野内包含了不止一个目标,使用多个锚盒可以同时对感受野内出现的多个目标进行预测。(3)使用锚盒也可以认为这是向神经网络引入先验知识的一种方式。我们可以根据数据中包围盒通常出现的形状和大小设定一组锚盒。锚盒之间是独立的,不同的锚盒对应不同的目标,比如高瘦的锚盒对应于人,而矮胖的锚盒对应于车辆。
在这里插入图片描述
最后总结各大目标检测算法的步骤:

算法步骤
RCNN1. 在图像中确定约1000-2000个候选框 (使用选择性搜索);2. 每个候选框内图像块缩放至相同大小,并输入到CNN内进行特征提取 ;3. 对候选框中提取出的特征,使用分类器判别是否属于一个特定类 ;4. 对于属于某一特征的候选框,用回归器进一步调整其位置
Fast RCNN1. 在图像中确定约1000-2000个候选框 (使用选择性搜索);2. 对整张图片输进CNN,得到feature map;3. 找到每个候选框在feature map上的映射patch,将此patch作为每个候选框的卷积特征输入到SPP layer和之后的层;4. 对候选框中提取出的特征,使用分类器判别是否属于一个特定类 ;5. 对于属于某一特征的候选框,用回归器进一步调整其位置
Faster RCNN1. 对整张图片输进CNN,得到feature map;2. 卷积特征输入到RPN,得到候选框的特征信息;3. 对候选框中提取出的特征,使用分类器判别是否属于一个特定类 ;4. 对于属于某一特征的候选框,用回归器进一步调整其位置

R-FCN

Faster R-CNN在RoI pooling之后,需要对每个候选区域单独进行两分支预测。R-FCN旨在使几乎所有的计算共享,以进一步加快速度。由于图像分类任务不关心目标具体在图像的位置,网络具有平移不变性。但目标检测中由于要回归出目标的位置,所以网络输出应当受目标平移的影响。为了缓和这两者的矛盾,R-FCN显式地给予深度卷积特征各通道以位置关系。在RoI汇合时,先将候选区域划分成3×3的网格,之后将不同网格对应于候选卷积特征的不同通道,最后每个网格分别进行平均汇合。R-FCN同样采用了两分支(分类+回归)输出
在这里插入图片描述

小结

基于候选区域的目标检测算法通常需要两步:第一步是从图像中提取深度特征,第二步是对每个候选区域进行定位(包括分类和回归)。其中,第一步是图像级别计算,一张图像只需要前馈该部分网络一次,而第二步是区域级别计算,每个候选区域都分别需要前馈该部分网络一次。因此,第二步占用了整体主要的计算开销。R-CNN, Fast R-CNN, Faster R-CNN, R-FCN这些算法的演进思路是逐渐提高网络中图像级别计算的比例,同时降低区域级别计算的比例。R-CNN中几乎所有的计算都是区域级别计算,而R-FCN中几乎所有的计算都是图像级别计算。

基于直接回归的目标检测算法

基本思路
基于候选区域的方法由于有两步操作,虽然检测性能比较好,但速度上离实时仍有一些差距。基于直接回归的方法不需要候选区域,直接输出分类/回归结果。这类方法由于图像只需前馈网络一次,速度通常更快,可以达到实时。

YOLO

将图像划分成7×7的网格,其中图像中的真实目标被其划分到目标中心所在的网格及其最接近的锚盒。对每个网格区域,网络需要预测:每个锚盒包含目标的概率(不包含目标时应为0,否则为锚盒和真实包围盒的IoU)、每个锚盒的4个坐标、该网格的类别概率分布。每个锚盒的类别概率分布等于每个锚盒包含目标的概率乘以该网格的类别概率分布。相比基于候选区域的方法,YOLO需要预测包含目标的概率的原因是,图像中大部分的区域不包含目标,而训练时只有目标存在时才对坐标和类别概率分布进行更新。YOLO的优点在于:(1). 基于候选区域的方法的感受野是图像中的局部区域,而YOLO可以利用整张图像的信息。(2). 有更好的泛化能力。YOLO的局限在于:(1). 不能很好处理网格中目标数超过预设固定值,或网格中有多个目标同时属于一个锚盒的情况。(2). 对小目标的检测能力不够好。(3). 对不常见长宽比的包围盒的检测能力不强。(4). 计算损失时没有考虑包围盒大小。大的包围盒中的小偏移和小的包围盒中的小偏移应有不同的影响。

在这里插入图片描述

SSD

相比YOLO,SSD在卷积特征后加了若干卷积层以减小特征空间大小,并通过综合多层卷积层的检测结果以检测不同大小的目标。此外,类似于Faster R-CNN的RPN,SSD使用3×3卷积取代了YOLO中的全连接层,以对不同大小和长宽比的锚盒来进行分类/回归。SSD取得了比YOLO更快,接近Faster R-CNN的检测性能。后来有研究发现,相比其他方法,SSD受基础模型性能的影响相对较小。

在这里插入图片描述

FPN

之前的方法都是取高层卷积特征。但由于高层特征会损失一些细节信息,FPN融合多层特征,以综合高层、低分辨率、强语义信息和低层、高分辨率、弱语义信息来增强网络对小目标的处理能力。此外,和通常用多层融合的结果做预测的方法不同,FPN在不同层独立进行预测。FPN既可以与基于候选区域的方法结合,也可以与基于直接回归的方法结合。FPN在和Faster R-CNN结合后,在基本不增加原有模型计算量的情况下,大幅提高对小目标的检测性能。

在这里插入图片描述

RetinaNet

RetinaNet认为,基于直接回归的方法性能通常不如基于候选区域方法的原因是,前者会面临极端的类别不平衡现象。基于候选区域的方法可以通过候选区域过滤掉大部分的背景区域,但基于直接回归的方法需要直接面对类别不平衡。因此,RetinaNet通过改进经典的交叉熵损失以降低对已经分的很好的样例的损失值,提出了焦点(focal)损失函数,以使模型训练时更加关注到困难的样例上。RetinaNet取得了接近基于直接回归方法的速度,和超过基于候选区域的方法的性能。
在这里插入图片描述
在这里插入图片描述

小结

目标检测常用技巧:
非最大抑制(non-max suppression, NMS):目标检测可能会出现的一个问题是,模型会对同一目标做出多次预测,得到多个包围盒。NMS旨在保留最接近真实包围盒的那一个预测结果,而抑制其他的预测结果。
在线困难样例挖掘(online hard example mining, OHEM):目标检测的另一个问题是类别不平衡,图像中大部分的区域是不包含目标的,而只有小部分区域包含目标。此外,不同目标的检测难度也有很大差异,绝大部分的目标很容易被检测到,而有一小部分目标却十分困难。OHEM和Boosting的思路类似,其根据损失值将所有候选区域进行排序,并选择损失值最高的一部分候选区域进行优化,使网络更关注于图像中更困难的目标。此外,为了避免选到相互重叠很大的候选区域,OHEM对候选区域根据损失值进行NMS。
在对数空间回归:回归相比分类优化难度大了很多。L2 损失对异常值比较敏感,由于有平方,异常值会有大的损失值,同时会有很大的梯度,使训练时很容易发生梯度爆炸。而 L1 损失的梯度不连续。在对数空间中,由于数值的动态范围小了很多,回归训练起来也会容易很多。此外,也有人用平滑的 L1 损失进行优化。预先将回归目标规范化也会有助于训练。

3.语义分割(semantic segmentation)

(1)任务要求
语义分割是目标检测更进阶的任务,目标检测只需要框出每个目标的包围盒,语义分割需要进一步判断图像中哪些像素属于哪个目标。

(2)语义分割常用数据集

数据集简介
PASCAL VOC 20121.5k训练图像,1.5k验证图像,20个类别(包含背景)
MS COCOCOCO比VOC更困难。有83k训练图像,41k验证图像,80k测试图像,80个类别

(3)基本思路
逐像素进行图像分类。我们将整张图像输入网络,使输出的空间大小和输入一致,通道数等于类别数,分别代表了各空间位置属于各类别的概率,即可以逐像素地进行分类。

全卷积网络+反卷积网络 为使得输出具有三维结构,全卷积网络中没有全连接层,只有卷积层和汇合层。但是随着卷积和汇合的进行,图像通道数越来越大,而空间大小越来越小。要想使输出和输入有相同的空间大小,全卷积网络需要使用反卷积和反汇合来增大空间大小。

在这里插入图片描述
反卷积(deconvolution)/转置卷积(transpose convolution) 标准卷积的滤波器在输入图像中进行滑动,每次和输入图像局部区域点乘得到一个输出,而反卷积的滤波器在输出图像中进行滑动,每个由一个输入神经元乘以滤波器得到一个输出局部区域。反卷积的前向过程和卷积的反向过程完成的是相同的数学运算。和标准卷积的滤波器一样,反卷积的滤波器也是从数据中学到的。

反最大汇合(max-unpooling) 通常全卷积网络是对称的结构,在最大汇合时需要记下最大值所处局部区域位置,在对应反最大汇合时将对应位置输出置为输入,其余位置补零。反最大汇合可以弥补最大汇合时丢失的空间信息。反最大汇合的前向过程和最大汇合的反向过程完成的是相同的数学运算。
在这里插入图片描述
(4) 语义分割常用技巧
扩张卷积(dilated convolution) 经常用于分割任务以增大有效感受野的一个技巧。标准卷积操作中每个输出神经元对应的输入局部区域是连续的,而扩张卷积对应的输入局部区域在空间位置上不连续。扩张卷积向标准卷积运算中引入了一个新的超参数扩张量(dilation),用于描述输入局部区域在空间位置上的间距。当扩张量为1时,扩张卷积退化为标准卷积。扩张卷积可以在参数量不变的情况下有效提高感受野。例如,当有多层3×3标准卷积堆叠时,第l 层卷积(l 从1开始)的输出神经元的感受野为2l +1。与之相比,当有多层3×3扩张卷积堆叠,其中第l 层卷积的扩张量为2^{l-1}时,第l 层卷积的输出神经元的感受野为2^{l +1}-1。感受野越大,神经元能利用的相关信息越多。和经典计算机视觉手工特征相比,大的感受野是深度学习方法能取得优异性能的重要原因之一。
在这里插入图片描述
条件随机场(conditional random field, CRF) 是一种概率图模型,常被用于微修全卷积网络的输出结果,使细节信息更好。其动机是距离相近的像素、或像素值相近的像素更可能属于相同的类别。此外,有研究工作用循环神经网络(recurrent neural networks)近似条件随机场。条件随机场的另一弊端是会考虑两两像素之间的关系,这使其运行效率不高。

综合利用低层结果可以弥补随着网络加深丢失的细节和边缘信息,利用方式可以是加和(如FCN)或沿通道方向拼接(如U-net),后者效果通常会更好一些。

在这里插入图片描述

4.实例分割(instance segmentation)

(1)任务要求:
语义分割不区分属于相同类别的不同实例。例如,当图像中有多只猫时,语义分割会将两只猫整体的所有像素预测为“猫”这个类别。与此不同的是,实例分割需要区分出哪些像素属于第一只猫、哪些像素属于第二只猫。

基本思路 目标检测+语义分割。先用目标检测方法将图像中的不同实例框出,再用语义分割方法在不同包围盒内进行逐像素标记。

Mask R-CNN 用FPN进行目标检测,并通过添加额外分支进行语义分割(额外分割分支和原检测分支不共享参数),即Mask R-CNN有三个输出分支(分类、坐标回归、和分割)。此外,Mask R-CNN的其他改进有:(1). 改进了RoI汇合,通过双线性差值使候选区域和卷积特征的对齐不因量化而损失信息。(2). 在分割时,Mask R-CNN将判断类别和输出模板(mask)这两个任务解耦合,用sigmoid配合对率(logistic)损失函数对每个类别的模板单独处理,取得了比经典分割方法用softmax让所有类别一起竞争更好的效果。

在这里插入图片描述

参考文献
V. Badrinarayanan, et al. SegNet: A deep convolutional encoder-decoder architecture for image segmentation. TPAMI, 2017.
Y. Bengio, et al. Representation learning: A review and new perspectives. TPAMI, 2013.
L.-C. Chen, et al. SegNet: A deep convolutional encoder-decoder architecture for image segmentation. PAMI, 2017.
S. Chetlur, et al. cuDNN: Efficient primitives for deep learning. arXiv: 1410.0759, 2014.
J. Cong, and B. Xiao. Minimizing computation in convolutional neural networks. ICANN, 2014.
J. Dai, et al. R-FCN: Object detection via region-based fully convolutional networks. NIPS, 2016.
A. Garcia-Garcia, et al. A review on deep learning techniques applied to semantic segmentation. arXiv: 1704.06857, 2017.
R. Girshick, et al. Rich feature hierarchies for accurate object detection and semantic segmentation. CVPR, 2014.
R. Girshick. Fast R-CNN. ICCV, 2015.
K. He, et al. Spatial pyramid pooling in deep convolutional networks for visual recognition. ECCV, 2014.
K. He, et al. Delving deep into rectifiers: Surpassing human-level performance on ImageNet classification. ICCV, 2015.
K. He, et al. Deep residual learning for image recognition. CVPR, 2016.
K. He, et al. Identity mappings in deep residual networks. ECCV, 2016.
K. He, et al. Mask R-CNN. ICCV, 2017.
J. Hu, et al. Squeeze-and-excitation networks. CVPR, 2018.
G. Huang, et al. Deep networks with stochastic depth. ECCV, 2016.
G. Huang, et al. Densely connected convolutional networks. CVPR, 2017.
J. Huang, et al. Speed/Accuracy trade-offs for modern convolutional object detectors. CVPR, 2017.
A. Krizhevsky, and G. Hinton. Learning multiple layers of features from tiny images. Technical Report, 2009.
A. Krizhevsky, et al. ImageNet classification with deep convolutional neural networks. NIPS, 2012.
A. Lavin, and S. Gray. Fast algorithms for convolutional neural networks. CVPR, 2016.
Y. LeCun, et al. Gradient-based learning applied to document recognition. Proceedings of the IEEE, 1998.
M. Lin, et al. Network in network. ICLR, 2014.
T.-Y. Lin, et al. Microsoft COCO: Common objects in context. ECCV, 2014.
T.-Y. Lin, et al. Feature pyramid networks for object detection. CVPR, 2017.
T.-Y. Lin, et al. Focal loss for dense object detection. ICCV, 2017.
W. Liu, et al. SSD: Single shot multibox detector. ECCV, 2016.
J. Long, et al. Fully convolutional networks for semantic segmentation. CVPR, 2015.
H. Noh, et al. Learning deconvolution network for semantic segmentation. ICCV, 2015.
G. Pleiss, et al. Memory-efficient implementation of DenseNets. arXiv: 1707.06990, 2017.
J. Redmon, et al. You only look once: Unified, real-time object detection. CVPR, 2016.
S. Ren, et al. Faster R-CNN: Towards real-time object detection with region proposal networks. NIPS, 2015.
S. Ren, et al. Object detection networks on convolutional feature maps. TPAMI, 2017.
O. Ronneberger, et al. U-net: Convolutional networks for biomedical image segmentation. MICCAI, 2015.
O. Russakovsky, et al. ImageNet large scale visual recognition challenge. IJCV, 2015.
P. Sermanet, et al. OverFeat: Integrated recognition, localization, and detection using convolutional networks. ICLR, 2014.
A. Shrivastava, et al. Training region-based object detectors with online hard example mining. CVPR, 2016.
K. Simonyan, and A. Zisserman. Very deep convolutional networks for large-scale image recognition. ICLR, 2015.
J. T. Springenberg, et al. Striving for simplicity: The all convolutional net. ICLR Workshop, 2015.
V. Sze, et al. Efficient processing of deep neural networks: A tutorial and survey. Proceedings of IEEE, 2017.
C. Szegedy, et al. Going deep with convolutions. CVPR, 2015.
C. Szegedy, et al. Rethinking the Inception architecture for computer vision. CVPR, 2016.
C. Szegedy, et al. Inception v4, Inception-ResNet and the impact of residual connections on learning. AAAI, 2017.
A. Toshev, and C. Szegedy. DeepPose: Human pose estimation via deep neural networks. CVPR, 2014.
A. Veit, et al. Residual networks behave like ensembles of relatively shallow networks. NIPS, 2016.
S. Xie, et al. Aggregated residual transformations for deep neural networks. CVPR, 2017.
F. Yu, and V. Koltun. Multi-scale context aggregation by dilated convolutions. ICLR, 2016.
M. D. Zeiler, and R. Fergus. Visualizing and understanding convolutional networks. ECCV, 2014.
S. Zheng, et al. Conditional random fields as recurrent neural networks. ICCV, 2015.

内容转自:https://blog.csdn.net/daydayjump/article/details/80746739
https://zhuanlan.zhihu.com/p/31727402
https://www.cnblogs.com/skyfsm/p/6806246.html

Logo

CSDN联合极客时间,共同打造面向开发者的精品内容学习社区,助力成长!

更多推荐