来源:
https://zhuanlan.zhihu.com/p/33277354
目前目标检测领域的深度学习方法主要分为两类:two stage的目标检测算法;one stage的目标检测算法。前者是先由算法生成一系列作为样本的候选框,再通过卷积神经网络进行样本分类;后者则不用产生候选框,直接将目标边框定位的问题转化为回归问题处理。正是由于两种方法的差异,在性能上也有不同,前者在检测准确率和定位精度上占优,后者在算法速度上占优。
目标检测算法脉络
1. two stage的方法
在早期深度学习技术发展进程中,主要都是围绕分类问题展开研究,这是因为神经网络特有的结构输出将概率统计和分类问题结合,提供一种直观易行的思路。国内外研究人员虽然也在致力于将其他如目标检测领域和深度学习结合,但都没有取得成效,这种情况直到R-CNN算法出现才得以解决。
1.1 R-CNN
2014年加州大学伯克利分校的Ross B. Girshick提出R-CNN算法,其在效果上超越同期的Yann Lecun提出的端到端方法OverFeat算法,其算法结构也成为后续two stage的经典结构。
R-CNN算法利用选择性搜索(Selective Search)算法评测相邻图像子块的特征相似度,通过对合并后的相似图像区域打分,选择出感兴趣区域的候选框作为样本输入到卷积神经网络结构内部,由网络学习候选框和标定框组成的正负样本特征,形成对应的特征向量,再由支持向量机设计分类器对特征向量分类,最后对候选框以及标定框完成边框回归操作达到目标检测的定位目的。
虽然R-CNN算法相较于传统目标检测算法取得了50%的性能提升,但其也有缺陷存在:训练网络的正负样本候选区域由传统算法生成,使得算法速度受到限制;卷积神经网络需要分别对每一个生成的候选区域进行一次特征提取,实际存在大量的重复运算,制约了算法性能。
图1.1 R-CNN
1.2 SPP-Net
图1.2 spatial pyramid pooling layer
针对卷积神经网络重复运算问题,2015年微软研究院的何恺明等提出一种SPP-Net算法,通过在卷积层和全连接层之间加入空间金字塔池化结构(Spatial Pyramid Pooling)代替R-CNN算法在输入卷积神经网络前对各个候选区域进行剪裁、缩放操作使其图像子块尺寸一致的做法。
利用空间金字塔池化结构有效避免了R-CNN算法对图像区域剪裁、缩放操作导致的图像物体剪裁不全以及形状扭曲等问题,更重要的是解决了卷积神经网络对图像重复特征提取的问题,大大提高了产生候选框的速度,且节省了计算成本。但是和R-CNN算法一样训练数据的图像尺寸大小不一致,导致候选框的ROI感受野大,不能利用BP高效更新权重。
1.3 Fast R-CNN
针对SPP-Net算法的问题,2015年微软研究院的Ross B. Girshick又提出一种改进的Fast R-CNN算法,借鉴SPP-Net算法结构,设计一种ROI pooling的池化层结构,有效解决R-CNN算法必须将图像区域剪裁、缩放到相同尺寸大小的操作。
提出多任务损失函数思想,将分类损失和边框回归损失结合统一训练学习,并输出对应分类和边框坐标,不再需要额外的硬盘空间来存储中间层的特征,梯度能够通过RoI Pooling层直接传播。但是其仍然没有摆脱选择性搜索算法生成正负样本候选框的问题。
图1.3 Fast R-CNN
1.4 Faster R-CNN
为了解决Fast R-CNN算法缺陷,使得算法实现two stage的全网络结构,2015年微软研究院的任少庆、何恺明以及Ross B Girshick等人又提出了Faster R-CNN算法。设计辅助生成样本的RPN(Region Proposal Networks)网络,将算法结构分为两个部分,先由RPN网络判断候选框是否为目标,再经分类定位的多任务损失判断目标类型,整个网络流程都能共享卷积神经网络提取的的特征信息,节约计算成本,且解决Fast R-CNN算法生成正负样本候选框速度慢的问题,同时避免候选框提取过多导致算法准确率下降。
但是由于RPN网络可在固定尺寸的卷积特征图中生成多尺寸的候选框,导致出现可变目标尺寸和固定感受野不一致的现象。
图1.4 Faster R-CNN
1.5 MR-CNN
2015年巴黎科技大学提出MR-CNN算法,结合样本区域本身的特征,利用样本区域周围采样的特征和图像分割的特征来提高识别率,可将检测问题分解为分类和定位问题。
图1.5 MR-CNN
分类问题由Multi-Region CNN Model和Semantic Segmentation-Aware CNN Model组成。前者的候选框由Selective Search得到,对于每一个样本区域,取10个区域分别提取特征后拼接,这样可以强制网络捕捉物体的不同方面,同时可以增强网络对于定位不准确的敏感性,其中adaptive max pooling即ROI max pooling;后者使用FCN进行目标分割,将最后一层的feature map和前者产生的feature map拼接,作为最后的feature map。
为了精确定位,采用三种样本边框修正方法,分别为Bbox regression、Iterative localization以及Bounding box voting。Bbox regression:在Multi-Region CNN Model中整幅图经过网路的最后一层卷积层后,接一个Bbox regression layer,与RPN不同,此处的regression layer是两层FC以及一层prediction layer,为了防止Selective Search得到的框过于贴近物体而导致无法很好的框定物体,将候选框扩大为原来的1.3倍再做。
Iterative localization:初始的框是Selective Search得到的框,然后用已有的分类模型对框做出估值,低于给定阈值的框被筛掉,剩下的框用Bbox regression的方法调整大小,并迭代筛选。Bounding box voting:首先对经过Iterative localization处理后的框应用NMS, IOU = 0.3,得到检测结果,然后对于每一个框,用每一个和其同一类的而且IOU >0.5的框加权坐标,得到最后的目标样本框。
1.6 HyperNet
2016年清华大学提出HyperNet算法,其利用网络多个层级提取的特征,且从较前层获取的精细特征可以减少对于小物体检测的缺陷。将提取到的不同层级feature map通过最大池化降维或逆卷积扩增操作使得所有feature map尺寸一致,并利用LRN正则化堆叠,形成Hyper
Feature maps,其具有多层次抽象、合适分辨率以及计算时效性的优点。接着通过region proposal generation module结构进行预测和定位,仅保留置信度最高的N个样本框进行判断。
图1.6 HyperNet
1.7 CRAFT
图1.7 CRAFT
R-CNN系列算法的第一阶段是生成目标proposals,第二阶段是对目标proposals进行分类,2016年中科院自动化所提出的CRAFT算法分别对Faster R-CNN中的这两个阶段进行了一定的改进。
对于生成目标proposals阶段,在RPN的后面加了一个二值的Fast R-CNN分类器来对RPN生成的proposals进行进一步的筛选,留下一些高质量的proposals;对于第二阶段的目标proposals分类,在原来的分类器后又级联了N个类别(不包含背景类)的二值分类器以进行更精细的目标检测。
1.8 R-FCN
图1.8 R-FCN
随着全卷积网络的出现,2016年微软研究院的Jifeng Dai等提出R-FCN算法。相较于Faster R-CNN算法只能计算ROI pooling层之前的卷积网络特征参数,R-FCN算法提出一种位置敏感分布的卷积网络代替ROI pooling层之后的全连接网络,解决了Faster R-CNN由于ROI
Pooling层后面的结构需要对每一个样本区域跑一次而耗时比较大的问题,使得特征共享在整个网络内得以实现,解决物体分类要求有平移不变性和物体检测要求有平移变化的矛盾,但是没有考虑到region proposal的全局信息和语义信息。
1.9 MS-CNN
针对Faster R-CNN算法的遗留问题,2016年加州大学圣地亚哥分校的Z Cai提出了MS-CNN算法,通过利用Faster R-CNN算法结构的多个不同层级输出的特征结果来检测目标,将不同层级的检测器互补形成多尺度的强检测器,应用浅层特征检测小尺寸目标,应用深层特征检测大尺寸目标。并且利用去卷积层代替图像上采样来增加图像分辨率,减少内存占用,提高运行速度。
图1.9 MS-CNN的特征网络
1.10 PVANet
针对的就是算法的运算速度提升问题,2016年底Intel图像技术团队提出了一个轻量级的网络,取得了state-of-the-art的效果。PVANet主要分为特征抽取网络和检测网络,基于多层少通道的基本原则,在网络浅层采用C.ReLU结构,在网络深层采用Inception模块,其中前者是将K×K卷积结构表示1×1 - K×K - 1×1的卷积层的堆叠,后者设计原则是由于为了检测图像中的大目标,需要足够大的感受野,可通过堆叠3×3的卷积核实现,但是为了捕获小目标,则需要小一点的感受野,可通过1×1的卷积核实现,且可以避免大卷积核造成的参数冗余问题。
PVANet应用多尺度特征级联最大化目标检测任务的多尺度性质,权重衰减策略采用一定迭代次数内loss不再下降,则将学习速率降低常数倍的方式,通过batch normalization和residual连接实现高效的训练。
图1.10 PVANet
1.11 FPN
2017年Facebook的Tsung-Yi Lin等提出了FPN算法,利用不同层的特征图进行不同尺寸的目标预测。原来多数的目标检测算法都是只采用深层特征做预测,低层的特征语义信息比较少,但是目标位置准确;高层的特征语义信息比较丰富,但是目标位置比较粗略
。
另外虽然也有些算法采用多尺度特征融合的方式,但是一般是采用融合后的特征做预测,而FPN算法不一样的地方在于预测是在不同特征层独立进行的,利用深层特征通过上采样和低层特征做融合。
FPN算法主网络是ResNet,结构主要是一个自底向上的线路横向连接一个自顶向下的线路。自底向上其实就是网络的前向过程,在前向过程中,feature map的大小在经过某些层后会改变,而在经过其他一些层的时候不会改变,FPN算法将不改变feature map大小的层归为一个stage,因此每次抽取的特征都是每个stage的最后一个层输出,这样就能构成特征金字塔。
自顶向下的过程采用上采样进行,而横向连接则是将上采样的结果和自底向上生成的相同大小的feature map并一一对应进行融合,在融合之后还会再采用3×3的卷积核对每个融合结果进行卷积,目的是消除上采样的混叠效应。
图1.11 FPN
1.12 Mask R-CNN
为了解决R-CNN算法为代表的two stage的方法问题,2017年Facebook的何恺明等提出了Mask R-CNN算法,取得了很好的识别效果。
Mask R-CNN算法将ROI_Pooling层替换成了ROI_Align,并且在边框识别的基础上添加分支FCN层(mask层),用于语义Mask识别,通过RPN网络生成目标候选框,再对每个目标候选框分类判断和边框回归,同时利用全卷积网络对每个目标候选框预测分割掩膜。
加入的掩膜预测结构解决了特征图像和原始图像上的ROI不对准问题,避免对ROI边界做任何量化,而用双线性插值到对准特征,再用池化操作融合。掩膜编码了输入图像的空间布局,用全卷积网络预测每个目标候选框的掩膜能完整的保留空间结构信息,实现目标像素级分割定位。
图1.12 Mask R-CNN
1.13 A-Fast-RCNN
A-Fast-RCNN算法是2017年卡内基梅隆大学提出的,其将对抗学习引入到目标检测问题中,通过对抗网络生成一下遮挡和变形的训练样本来训练检测网络,从而使得网络能够对遮挡和变形问题更加的鲁棒。使用对抗网络生成有遮挡和有形变的两种特征,两种网络分别为ASDN和ASTN。
ASDN利用Fast R-CNN中ROI池化层之后的每个目标proposal卷积特征作为对抗网络的输入,给定一个目标的特征,ASDN尝试生成特征某些部分被dropout的掩码,导致检测器无法识别该物体。
在前向传播过程中,首先使用ASDN在ROI池化层之后生成特征掩码,然后使用重要性采样法生成二值掩码,使用该掩码将特征对应部位值清零,修改后的特征继续前向传播计算损失,这个过程生成了困难的特征,用于训练检测器。
ASTN主要关注特征旋转,定位网络包含三层全连接层,前两层是ImageNet预训练的FC6和FC7,训练过程与ASDN类似,ASTN对特征进行形变,将特征图划分为4个block,每个block估计四个方向的旋转,增加了任务的复杂度。两种对抗网络可以相结合,使得检测器更鲁棒,ROI池化层提取的特征首先传入ASDN丢弃一些激活,之后使用ASTN对特征进行形变。
图1.13 A-Fast-RCNN
1.14 CoupleNet
针对R-FCN算法没有考虑到region proposal的全局信息和语义信息的问题,2017年中科院自动化所提出CoupleNet算法,其在原来R-FCN的基础上引入了proposal的全局和语义信息,通过结合局部、全局以及语义的信息,提高了检测的精度。
图1.14 CoupleNet
CoupleNet结构利用三支并行网络实现检测,上面的支路网络使用原本的R-FCN结构的位置敏感分布图提取目标的局部信息;中间的支路网络用于提取目标的全局信息,对于一个region proposal,依次通过K×K的ROI Pooling,K×K的conv以及1×1的conv;下面的支路网络用于提取目标的语义信息,对于一个region proposal,首先选择以这个proposal为中心,面积是原来2倍的proposal,同样依次通过K×K的ROI Pooling,K×K的conv以及1×1的conv。最后先各自通过1×1的conv调整激活值的尺寸,然后把Local FCN和Global FCN结果对应位置元素相加,再通过一个softmax实现分类。
1.15 MegDet
基于CNN的物体检测研究一直在不断进步,从R-CNN到Fast/Faster R-CNN,再Mask R-CNN,主要的改进点都在于新的网络架构、新的范式、或者新的损失函数设计,然而mini-batch大小,这个训练中的关键因素并没有得到完善的研究。
由于输入图片尺寸的增长,图像检测所需显存量也会同比例增长,这也使得已有的深度学习框架无法训练大mini-batch的图像检测模型,而小mini-batch的物体检测算法又常常会引入不稳定的梯度、BN层统计不准确、正负样本比例失调以及超长训练时间的问题。因此,2017年12月Face++提出一种大mini-batch的目标检测算法MegDet。
图1.15 多GPU的Batch Normalization
MegDet算法可以使用远大于以往的mini-batch大小训练网络(比如从16增大到256),这样同时也可以高效地利用多块GPU联合训练(在论文的实验中最多使用了128块GPU),大大缩短训练时间。
同时,解决了BN统计不准确的问题,也提出了一种学习率选择策略以及跨GPU的Batch Normalization方法,两者共同使用就得以大幅度减少大mini-batch物体检测器的训练时间(比如从33小时减少到仅仅4个小时),同时还可以达到更高的准确率。
1.16 Light-Head R-CNN
2017年12月Face++提出了一种为了使two stage的检测算法Light-Head R-CNN,主要探讨了R-CNN如何在物体检测中平衡精确度和速度。Light-Head R-CNN提出了一种更好的two-stage detector设计结构,使用一个大内核可分卷积和少量通道生成稀疏的特征图。
该设计的计算量使随后的ROI子网络计算量大幅降低,检测系统所需内存减少。将一个廉价的全连接层附加到池化层上,充分利用分类和回归的特征表示。因其轻量级头部结构,该检测器能够实现速度和准确率之间的最优权衡,不管使用的是大主干网络还是小主干网络。
基于ResNet101网络达到了新的state-of-the-art的结果40.6,超过了Mask R-CNN和RetinaNet。同时如果是用一个更小的网络,比如类似Xception的小模型,达到了100+FPS,30.7mmap,效率上超过了SSD和YOLO。
图1.16 Light-Head R-CNN
2. one stage的方法
以R-CNN算法为代表的two stage的方法由于RPN结构的存在,虽然检测精度越来越高,但是其速度却遇到瓶颈,比较难于满足部分场景实时性的需求。因此出现一种基于回归方法的one stage的目标检测算法,不同于two stage的方法的分步训练共享检测结果,one stage的方法能实现完整单次训练共享特征,且在保证一定准确率的前提下,速度得到极大提升。
2.1 OverFeat
2013年Yann Lecun在纽约大学的团队提出了著名的OverFeat算法,其利用滑动窗口和规则块生成候选框,再利用多尺度滑动窗口增加检测结果,解决图像目标形状复杂、尺寸不一问题,最后利用卷积神经网络和回归模型分类、定位目标。该算法首次将分类、定位以及检测三个计算机视觉任务放在一起解决,获得同年ILSVRC 2013任务3(分类+定位)的冠军,但其很快就被同期的R-CNN算法取代。
图2.1 用于检测的高效卷积
2.2 YOLO
2015年华盛顿大学的Joseph Redmon等提出的YOLO算法继承了OverFeat算法这种基于回归的one stage方法,速度能达到每秒45帧,由于其速度优势迅速成为端到端方法的领先者。YOLO算法是基于图像的全局信息进行预测的,整体结构简单,通过将输入图像重整到448×448像素固定尺寸大小,并划分图像为7×7网格区域,通过卷积神经网络提取特征训练,直接预测每个网格内的边框坐标和每个类别置信度,训练时采用P-Relu激活函数。但是存在定位不准以及召回率不如基于区域提名方法的问题,且对距离很近的物体和很小的物体检测效果不好,泛化能力相对较弱。
图2.2 YOLO
2.3 YOLOv2 & YOLO9000
经过Joseph Redmon等的改进,YOLOv2和YOLO9000算法在2017年CVPR上被提出,并获得最佳论文提名,重点解决召回率和定位精度方面的误差。采用Darknet-19作为特征提取网络,增加了批量归一化(Batch Normalization)的预处理,并使用224×224和448×448两阶段训练ImageNet预训练模型后fine-tuning。
相比于原来的YOLO是利用全连接层直接预测bounding box的坐标,YOLOv2借鉴了Faster R-CNN的思想,引入anchor机制,利用K-Means聚类的方式在训练集中聚类计算出更好的anchor模板,在卷积层使用anchorboxes操作,增加候选框的预测,同时采用较强约束的定位方法,大大提高算法召回率。结合图像细粒度特征,将浅层特征与深层特征相连,有助于对小尺寸目标的检测。
图2.3 YOLOv2在VOC2007上的速度和精度
2.4 G-CNN
由于巨大的proposal数量使得后续检测效率降低,2016年马里兰大学的M Najibi等提出一种起始于网格迭代的G-CNN算法。通过初始化对图像划分回归后得到更加接近物体的候选框,再利用回归框作为原始窗口进行回归调整,解决了以往的基于区域提名方法通过海量潜在候选框直接进行目标搜索,抑制负样本的缺陷。
在训练阶段,首先在图像中获取叠加的多尺度的规则网格(实际网格相互叠加),然后通过ground truth与每一个网格的IOU进行每一个网格ground truth的分配,并完成训练过程,使得网格在回归过程中渐渐接近ground truth。在检测阶段,对于每一个样本框针对每一类获得置信分数,用最可能类别的回归器来更新样本框的位置。
图2.4 G-CNN
2.5 SSD
针对YOLO类算法的定位精度问题,2016年12月北卡大学教堂山分校的Wei Liu等提出SSD算法,将YOLO的回归思想和Faster R-CNN的anchor box机制结合。通过在不同卷积层的特征图上预测物体区域,输出离散化的多尺度、多比例的default boxes坐标,同时利用小卷积核预测一系列候选框的边框坐标补偿和每个类别的置信度。
在整幅图像上各个位置用多尺度区域的局部特征图边框回归,保持YOLO算法快速特性的同时,也保证了边框定位效果和Faster R-CNN类似。但因其利用多层次特征分类,导致其对于小目标检测困难,最后一个卷积层的感受野范围很大,使得小目标特征不明显。
图2.5 SSD和YOLO网络结构对比
2.6 R-SSD
2017年首尔大学提出了R-SSD算法,解决了SSD算法中不同层feature map都是独立作为分类网络的输入,容易出现相同物体被不同大小的框同时检测出来的情况,还有对小尺寸物体的检测效果比较差的情况。R-SSD算法一方面利用分类网络增加不同层之间的feature map联系,减少重复框的出现;另一方面增加feature pyramid中feature map的个数,使其可以检测更多的小尺寸物体
。
特征融合方式采用同时利用pooling和deconvolution进行特征融合,这种特征融合方式使得融合后每一层的feature map个数都相同,因此可以共用部分参数,具体来讲就是default boxes的参数共享。
图2.6 三种特征融合方式
2.7 DSSD
为了解决SSD算法检测小目标困难的问题,2017年北卡大学教堂山分校的Cheng-Yang Fu等提出DSSD算法,将SSD算法基础网络从VGG-16更改为ResNet-101,增强网络特征提取能力,其次参考FPN算法思路利用去卷积结构将图像深层特征从高维空间传递出来,与浅层信息融合,联系不同层级之间的图像语义关系,设计预测模块结构,通过不同层级特征之间融合特征输出预测物体类别信息。
DSSD算法中有两个特殊的结构:Prediction模块;Deconvolution模块。前者利用提升每个子任务的表现来提高准确性,并且防止梯度直接流入ResNet主网络。后者则增加了三个Batch Normalization层和三个3×3卷积层,其中卷积层起到了缓冲的作用,防止梯度对主网络影响太剧烈,保证网络的稳定性。
图2.7 SSD和DSSD网络结构对比
2.8 DSOD
2017年复旦大学提出DSOD算法,其并不是在mAP上和其他检测算法做比较,看谁的算法更有效或者速度更快,而是从另一个角度切入说明fine-tune和直接训练检测模型的差异其实是可以减小的,也就是说训练一个检测模型可以不需要大量的数据和预训练好的模型。
这是由于预训练模型的限制导致:迁移模型结构灵活性差,难以改变网络结构;分类任务预训练模型和检测任务训练会有学习偏差;虽然微调会减少不同目标类别分布的差异性,但深度图等特殊图像迁移效果差异较大。
SSD算法是在六个尺度的特征图上进行检测,将这六个检测结果综合起来,DSOD算法则则根据DenseNet的设计原理,将相邻的检测结果一半一半的结合起来。DSOD算法是基于SSD算法基础上做的修改,采用的特征提取网络是DenseNet。
采用Dense Block结构,能避免梯度消失的情况。同时利用Dense Prediction结构,也能大大减少模型的参数量,特征包含更多信息。设计stem结构能减少输入图片信息的丢失,stem结构由3×3卷积和2×2的max pool层组成,其还可以提高算法检测的mAP。
图2.8 DSOD预测层
2.9 RON
2017年清华大学提出了RON算法,结合two stage名的方法和one stage方法的优势,更加关注多尺度对象定位和负空间样本挖掘问题。
RON算法通过设计方向连接结构,利用多尺度表征显著改善各种多尺度物体检测,同时为了减少对象搜索空间,在卷积特征图创建objectness prior引导目标对象搜索,训练时将检测器进行联合优化。并通过多任务损失函数联合优化了反向连接、objectness prior和对象检测,因此可直接预测各种特征图所有位置的最终检测结果。
图2.9 RON
3. 总结
随着深度学习技术在图像各领域的研究深入,出现越来越多的新理论、新方法。two stage的方法和基于回归思想的one stage方法两者相互借鉴,不断融合,取得了很好的效果,也为我们展示了一些未来发展趋势:
参考上下文特征的多特征融合;
多尺度的对象定位;
结合循环神经网络(RNN)的图像语义分析。
部分目标检测算法精度和速度对比
编译:蓝三金
来源:
https://blog.csdn.net/qq_20084101/article/details/80432960
图像的语义分割是将输入图像中的每个像素分配一个语义类别,以得到像素化的密集分类。虽然自 2007 年以来,语义分割/场景解析一直是计算机视觉社区的一部分,但与计算机视觉中的其他领域很相似,自 2014 年 Long 等人首次使用全卷积神经网络对自然图像进行端到端分割,语义分割才有了重大突破。
图1:输入图像(左),FCN-8s 网络生成的语义分割图(右)(使用 pytorch-semseg 训练)
FCN-8s 架构在 Pascal VOC 2012 数据集上的性能相比以前的方法提升了 20%,达到了 62.2% 的 mIOU。这种架构是语义分割的基础,此后一些新的和更好的体系结构都基于此。
全卷积网络(FCNs)可以用于自然图像的语义分割、多模态医学图像分析和多光谱卫星图像分割。与 AlexNet、VGG、ResNet 等深度分类网络类似,FCNs 也有大量进行语义分割的深层架构。
本文作者总结了 FCN、SegNet、U-Net、FC-Densenet E-Net 和 Link-Net、RefineNet、PSPNet、Mask-RCNN 以及一些半监督方法,例如 DecoupledNet 和 GAN-SS,并为其中的一些网络提供了 PyTorch 实现。在文章的最后一部分,作者总结了一些流行的数据集,并展示了一些网络训练的结果。
网络架构
一般的语义分割架构可以被认为是一个编码器——解码器网络。编码器通常是一个预训练的分类网络,像 VGG、ResNet,然后是一个解码器网络。这些架构之间的不同主要在于解码器网络。解码器的任务是将编码器学习到的可判别特征(较低分辨率)从语义上映射到像素空间(较高分辨率),以获得密集分类。
不同于分类任务中深度网络的最终结果(即类存在的概率)被视为唯一重要的事,语义分割不仅需要在像素级有判别能力,还需要有能将编码器在不同阶段学到的可判别特征映射到像素空间的机制。不同的架构采用不同的机制(跳远连接、金字塔池化等)作为解码机制的一部分。
一些上述架构和加载数据的代码可在以下链接获得:
Pytorch:
https://github.com/meetshah1995/pytorch-semseg
这篇论文对语义分割(包括 Recurrent Style Networks)作了一个更正式的总结。
Fully Convolution Networks(FCNs)全卷积网络
我们将当前分类网络(AlexNet, VGG net 和 GoogLeNet)修改为全卷积网络,通过对分割任务进行微调,将它们学习的表征转移到网络中。然后,我们定义了一种新架构,它将深的、粗糙的网络层语义信息和浅的、精细的网络层的表层信息结合起来,来生成精确的分割。我们的全卷积网络在 PASCAL VOC(在 2012 年相对以前有 20% 的提升,达到了62.2% 的平均 IU),NYUDv2 和 SIFT Flow 上实现了最优的分割结果,对于一个典型的图像,推断只需要三分之一秒的时间。
图2:FCN 端到端密集预测流程
关键特点:
特征是由编码器中的不同阶段合并而成的,它们在语义信息的粗糙程度上有所不同。低分辨率语义特征图的上采样使用通过双线性插值滤波器初始化的反卷积操作完成。从 VGG16、Alexnet 等现代分类器网络进行知识转移的优秀样本来实现语义细分。
图3:将全连接层转换成卷积层,使得分类网络可以输出一个类的热图。
如上图所示,像 VGG16 分类网络的全连接层(fc6,fc7)被转换为全卷积层。它生成了一个低分辨率的类的热图,然后用双线性初始化的反卷积,并在上采样的每一个阶段通过融合(简单地相加)VGG16 中的低层(conv4和conv3)的更加粗糙但是分辨率更高的特征图进一步细化特征。在这里可以找到更加详细的 netscope 风格的网络可视化。
在传统的分类 CNNs 中,池化操作用来增加视野,同时减少特征图的分辨率。这对于分类任务来说非常有用,因为分类的最终目标是找到某个特定类的存在,而对象的空间位置无关紧要。因此,在每个卷积块之后引入池化操作,以使后续块能够从已池化的特征中提取更多抽象、突出类的特征。
图4:FCN-8s 网络架构
另一方面,池化和带步长的卷积对语义分割是不利的,因为这些操作造成了空间信息的丢失。下面列出的大多数架构主要在解码器中使用了不同的机制,但目的都在于恢复在编码器中降低分辨率时丢失的信息。如上图所示,FCN-8s 融合了不同粗糙度(conv3、conv4和fc7)的特征,利用编码器不同阶段不同分辨率的空间信息来细化分割结果。
图5:训练 FCNs 时卷积层的梯度
第一个卷积层捕捉低层次的几何信息,因为这完全依赖数据集,你可以注意到梯度调整了第一层的权重以使模型适应数据集。VGG 中更深层的卷积层有非常小的梯度流,因为这里捕获的高层次的语义概念足够用于分割。
图6:反卷积(卷积转置)
空洞卷积
语义分割架构的另一个重要方面是,对特征图使用反卷积,将低分辨率分割图上采样至输入图像分辨率机制,或者花费大量计算成本,使用空洞卷积在编码器上部分避免分辨率下降。即使在现代 GPUs 上,空洞卷积的计算成本也很高。
论文链接:
https://arxiv.org/abs/1411.4038
SegNet
SegNet 的新颖之处在于解码器对其较低分辨率的输入特征图进行上采样的方式。具体地说,解码器使用了在相应编码器的最大池化步骤中计算的池化索引来执行非线性上采样。这种方法消除了学习上采样的需要。经上采样后的特征图是稀疏的,因此随后使用可训练的卷积核进行卷积操作,生成密集的特征图。我们提出的架构与广泛采用的 FCN 以及众所周知的 DeepLab-LargeFOV,DeconvNet 架构进行比较。比较的结果揭示了在实现良好的分割性能时所涉及的内存与精度之间的权衡。
图7:SegNet 架构
关键特点:
SegNet 在解码器中使用去池化对特征图进行上采样,并在分割中保持高频细节的完整性。编码器不使用全连接层(和 FCN 一样进行卷积),因此是拥有较少参数的轻量级网络。
图8:去池化
如上图所示,编码器中的每一个最大池化层的索引都存储了起来,用于之后在解码器中使用那些存储的索引来对相应特征图进行去池化操作。这有助于保持高频信息的完整性,但当对低分辨率的特征图进行去池化时,它也会忽略邻近的信息。
论文链接:
https://arxiv.org/abs/1511.00561
U-Net
U-Net 架构包括一个捕获上下文信息的收缩路径和一个支持精确本地化的对称扩展路径。我们证明了这样一个网络可以使用非常少的图像进行端到端的训练,并且在 ISBI 神经元结构分割挑战赛中取得了比以前最好的方法(一个滑动窗口的卷积网络)更加优异的性能。我们使用相同的网络,在透射光显微镜图像(相位对比度和 DIC)上进行训练,以很大的优势获得了 2015 年 ISBI 细胞追踪挑战赛。此外,网络推断速度很快。一个 512x512 的图像分割在最新的 GPU 上花费了不到一秒。
图9:U-Net 架构
关键特点:
U-Net 简单地将编码器的特征图拼接至每个阶段解码器的上采样特征图,从而形成一个梯形结构。该网络非常类似于 Ladder Network 类型的架构。
通过跳远拼接连接的架构,在每个阶段都允许解码器学习在编码器池化中丢失的相关特性。
U-Net 在 EM 数据集上取得了最优异的结果,该数据集只有 30 个密集标注的医学图像和其他医学图像数据集,U-Net 后来扩展到 3D 版的 3D-U-Net。虽然 U-Net 的发表是因为在生物医学领域的分割、网络实用性以及从非常少的数据中学习的能力,但现在已经成功应用在其他几个领域,例如卫星图像分割,同时也成为许多 kaggle 竞赛中关于医学图像分割获胜的解决方案中的一部分。
论文链接:
https://arxiv.org/abs/1505.04597
Fully Convolutional DenseNet
在文中我们扩充了 DenseNets,以解决语义分割的问题。我们在城市场景基准数据集(如 CamVid 和 Gatech )上获得了最优异的结果,没有使用进一步的后处理模块和预训练模型。此外,由于模型的优异结构,我们的方法比当前发布的在这些数据集上取得最佳的网络参数要少得多。
图10:全卷积 DenseNet 架构
全卷积 DenseNet 使用 DenseNet 作为它的基础编码器,并且也以类似于 U-Net 的方式,在每一层级上将编码器和解码器进行拼接。
论文链接:
https://arxiv.org/abs/1611.09326
E-Net 和 Link-Net
在这篇文章中,我们提出了一种新的深度神经网络架构,称为 ENet(efficient neural network),专门为需要低延迟操作的任务创建。ENet 比当前网络模型快 18 倍,少了 75 倍的 FLOPs,参数数量降低了 79 倍,并且提供相似甚至更好的准确率。我们在 CamVid、Cityscapes 和 SUN 数据集上进行了测试,展示了与现有的最优方法进行比较的结果,以及网络准确率和处理时间之间的权衡。
LinkNet 可以在 TX1 和 Titan X 上,分别以 2fps 和 19fps 的速率处理分辨率为 1280x720 的图像。
图11:(左)LinkNet 架构,(右)LinkNet 中使用的编码器和解码器模块
LinkNet 架构类似于一个梯形网络架构,编码器的特征图(横向)和解码器的上采样特征图(纵向)相加。还需要注意的是,由于它的通道约减方案(channel reduction scheme),解码器模块包含了相当少的参数。大小为 [H, W, n_channels] 的特征图先通过 1*1 卷积核得到大小为 [H, W, n_channels / 4] 的特征图,然后使用反卷积将其变为 [2*H, 2*W, n_channels / 4],最后使用 1*1 卷积使其大小变为 [2*H, 2*W, n_channels / 2],因此解码器有着更少的参数。这些网络在实现相当接近于最优准确率的同时,可以实时地在嵌入式 GPU 上进行分割。
相关链接:
https://arxiv.org/abs/1606.02147
https://codeac29.github.io/projects/linknet/
Mask R-CNN
该方法被称为 Mask R-CNN,以 Faster R-CNN 为基础,在现有边界框识别分支基础上添加一个并行的预测目标掩码的分支。Mask R-CNN 很容易训练,仅仅在 Faster R-CNN 上增加了一点小开销,运行速度为 5fps。此外,Mask R-CNN 很容易泛化至其他任务。例如,可以使用相同的框架进行姿态估计。我们在 COCO 所有的挑战赛中都获得了最优结果,包括实例分割,边界框目标检测,和人关键点检测。在没有使用任何技巧的情况下,Mask R-CNN 在每项任务上都优于所有现有的单模型网络,包括 COCO 2016 挑战赛的获胜者。
图12:Mask R-CNN 分割流程
原始 Faster-RCNN 架构和辅助分割分支
Mask R-CNN 架构相当简单,它是流行的 Faster R-CNN 架构的扩展,在其基础上进行必要的修改,以执行语义分割。
关键特点:
在 Faster R-CNN 上添加辅助分支以执行语义分割。对每个实例进行的 RoIPool 操作已经被修改为 RoIAlign ,它避免了特征提取的空间量化,因为在最高分辨率中保持空间特征不变对于语义分割很重要。Mask R-CNN 与 Feature Pyramid Networks(类似 于PSPNet,它对特征使用了金字塔池化)相结合,在 MS COCO 数据集上取得了最优结果。
在 2017-06-01 的时候,在网络上还没有 Mask R-CNN 的工作实现,而且也没有在 Pascal VOC 上进行基准测试,但是它的分割掩码显示了它与真实标注非常接近。
论文链接:
https://arxiv.org/abs/1703.06870
PSPNet
在文中我们利用基于不同区域的上下文信息集合,通过我们的金字塔池化模块,使用金字塔场景解析网络(PSPNet)来发挥全局上下文信息的能力。我们的全局先验表征在场景解析任务中产生了良好的质量结果,而 PSPNet 为像素级的预测提供了一个更好的框架,该方法在不同的数据集上达到了最优性能。它首次在 2016 ImageNet 场景解析挑战赛 PASCAL VOC 2012 基准和 Cityscapes 基准中出现。
图13:PSPNet 架构
使用 netscope 实现的可视化的空间金字塔池化
关键特点
:
PSPNet 通过引入空洞卷积来修改基础的 ResNet 架构,特征经过最初的池化,在整个编码器网络中以相同的分辨率进行处理(原始图像输入的 1/4),直到它到达空间池化模块。在 ResNet 的中间层中引入辅助损失,以优化整体学习。在修改后的 ResNet 编码器顶部的空间金字塔池化聚合全局上下文。
图 14:图片展示了全局空间上下文对语义分割的重要性。它显示了层之间感受野和大小的关系。在这个例子中,更大、更加可判别的感受野(蓝)相比于前一层(橙)可能在细化表征中更加重要,这有助于解决歧义。
PSPNet 架构目前在 CityScapes、ADE20K 和 Pascal VOC 2012 中有最优结果。
论文链接:
https://arxiv.org/abs/1612.01105
RefineNet
在文中提出了 RefineNet,一个通用的多路径优化网络,它明确利用了整个下采样过程中可用的所有信息,使用远程残差连接实现高分辨率的预测。通过这种方式,可以使用早期卷积中的细粒度特征来直接细化捕捉高级语义特征的更深的网络层。RefineNet 的各个组件使用遵循恒等映射思想的残差连接,这允许网络进行有效的端到端训练。
图15:RefineNet 架构
建立 RefineNet 的块 - 残差卷积单元,多分辨率融合和链式残差池化
RefineNet 解决了传统卷积网络中空间分辨率减少的问题,与 PSPNet(使用计算成本高的空洞卷积)使用的方法非常不同。提出的架构迭代地池化特征,利用特殊的 RefineNet 模块增加不同的分辨率,并最终生成高分辨率的分割图。
关键特点:
使用多分辨率作为输入,将提取的特征融合在一起,并将其传递到下一个阶段。引入链式残差池化,可以从一个大的图像区域获取背景信息。它通过多窗口尺寸有效地池化特性,利用残差连接和学习权重方式融合这些特征。所有的特征融合都是使用 sum(ResNet 方式)来进行端到端训练。使用普通 ResNet 的残差层,没有计算成本高的空洞卷积。
论文链接:
https://arxiv.org/abs/1611.06612
G-FRNet
在文中提出了 Gated Feedback Refinement Network (G-FRNet),这是一种用于密集标记任务的端到端深度学习框架,解决了现有方法的局限性。最初,GFRNet 进行粗略地预测,然后通过在细化阶段有效地集成局部和全局上下文信息,逐步细化细节。我们引入了控制信息前向传递的门控单元,以过滤歧义。
图16:G-FRNet 架构
门控细化单元
上述大多数架构都依赖于从编码器到解码器的简单特征,使用拼接、去池化或简单的加和。然而,在编码器中,从高分辨率(较难判别)层到对应的解码器中相应的上采样特征图的信息,不确定是否对分割有用。在每个阶段,通过使用门控细化反馈单元,控制从编码器传送到解码器的信息流,这样可以帮助解码器解决歧义,并形成更相关的门控空间上下文。
另一方面,本文的实验表明,在语义分割任务中,ResNet 是一个远优于 VGG16 的编码器。这是我在以前的论文中找不到的。
论文链接:
http://www.cs.umanitoba.ca/~ywang/papers/cvpr17.pdf
半监督语义分割
DecoupledNet
与现有的将语义分割作为基于区域分类的单一任务的方法相反,我们的算法将分类和分割分离,并为每个任务学习一个单独的网络。在这个架构中,通过分类网络识别与图像相关的标签,然后在分割网络中对每个识别的标签执行二进制分割。它通过利用从桥接层获得的特定类的激活图来有效地减少用于分割的搜索空间。
图17:DecoupledNet 架构
这也许是第一个使用全卷积网络进行语义分割的半监督方法。
关键特点:
分离分类和分割任务,从而使预训练的分类网络能够即插即用(plug and play)。分类和分割网络之间的桥接层生成突出类的特征图(k 类),然后输入分割网络,生成一个二进制分割图(k 类)但是,这个方法在一张图像中分割 k 类需要传递 k 次。
论文链接:
https://arxiv.org/abs/1506.04924
基于 GAN 的方法
基于生成对抗网络(GANs),我们提出了一种半监督框架,它包含一个生成器网络以提供用于多类别分类器的额外训练样本,以此作为 GAN 框架中的判别器,从 K 个可能的类中为样本分配一个标签 y 或者将其标记为一个假样本(额外的类)。为了确保 GANs 生成的图像质量更高,并改进像素分类,我们通过添加弱标注数据来扩展上述框架,即我们向生成器提供类级别的信息。
论文链接:
https://arxiv.org/abs/1703.09695
图18:弱监督(类级别标签) GAN
图19:半监督GAN
数据集
结果
图20:FCN-8s 生成的样本语义分割图(使用 pytorch-semseg 训练)来自 Pascal VOC 验证集
原文地址:
https://meetshah1995.github.io/semantic-segmentation/deep-learning/pytorch/visdom/2017/06/01/semantic-segmentation-over-the-years.html
译者 | 王柯凝
出品 | AI科技大本营
【 AI 科技大本营导读】目前,计算机视觉是深度学习领域最热门的研究领域之一。计算机视觉实际上是一个跨领域的
交叉学科
,包括计算机科学(图形、算法、理论、系统、体系结构),数学(信息检索、机器学习),工程学(机器人、语音、自然语言处理、图像处理),物理学(光学 ),生物学(神经科学)和心理学(认知科学)等等。许多科学家认为,计算机视觉为人工智能的发展开拓了道路。
那么什么是计算机视觉呢? 这里给出了几个比较严谨的定义:
✦ “
对图像中的客观对象构建明确而有意义的描述
”(
Ballard&Brown,1982
)
✦ “从一个或多个数字图像中计算三维世界的特性”(Trucco&Verri,1998)
✦ “基于感知图像做出对客观对象和场景有用的决策”(Sockman&Shapiro,2001)
▌
为什么要学习计算机视觉?
一个显而易见的答案就是,这个研究领域已经衍生出了一大批快速成长的、有实际作用的应用,例如:
人脸识别
: Snapchat 和 Facebook 使用人脸检测算法来识别人脸。
图像检索
:Google Images 使用基于内容的查询来搜索相关图片,算法分析查询图像中的内容并根据最佳匹配内容返回结果。
游戏和控制
:使用立体视觉较为成功的游戏应用产品是:微软 Kinect。
监测
:用于监测可疑行为的监视摄像头遍布于各大公共场所中。
生物识别技术
:指纹、虹膜和人脸匹配仍然是生物识别领域的一些常用方法。
智能汽车
:计算机视觉仍然是检测交通标志、灯光和其他视觉特征的主要信息来源。
视觉识别是计算机视觉的关键组成部分,如图像分类、定位和检测。神经网络和深度学习的最新进展极大地推动了这些最先进的视觉识别系统的发展。在本文中,我将分享 5 种主要的计算机视觉技术,并介绍几种基于计算机视觉技术的深度学习模型与应用。
▌
1 、图像分类
给定一组各自被标记为单一类别的图像,我们对一组新的测试图像的类别进行预测,并测量预测的准确性结果,这就是图像分类问题。图像分类问题需要面临以下几个挑战
☟☟☟
:
视点变化,
尺度变化,
类内变化,
图像变形,
图像遮挡,
照明条件和
背景杂斑
我们怎样来编写一个图像分类算法呢?
计算机视觉研究人员提出了一种基于数据驱动的方法
。
该算法并不是直接在代码中指定每个感兴趣的图像类别,而是为计算机每个图像类别都提供许多示例,然后设计一个学习算法,查看这些示例并学习每个类别的视觉外观。也就是说,首先积累一个带有标记图像的训练集,然后将其输入到计算机中,由计算机来处理这些数据。
因此,可以按照下面的步骤来分解:
输入是由 N 个图像组成的训练集,共有 K 个类别,每个图像都被标记为其中一个类别。
然后,使用该训练集训练一个分类器,来学习每个类别的外部特征。
最后,预测一组新图像的类标签,评估分类器的性能,我们用分类器预测的类别标签与其真实的类别标签进行比较。
目前较为流行的图像分类架构是卷积神经网络(CNN)——将图像送入网络,然后网络对图像数据进行分类。卷积神经网络从输入“扫描仪”开始,该输入“扫描仪”也不会一次性解析所有的训练数据。比如输入一个大小为 100*100 的图像,你也不需要一个有 10,000 个节点的网络层。相反,你只需要创建一个大小为 10 *10 的扫描输入层,扫描图像的前 10*10 个像素。然后,扫描仪向右移动一个像素,再扫描下一个 10 *10 的像素,这就是滑动窗口。
输入数据被送入卷积层,而不是普通层。每个节点只需要处理离自己最近的邻近节点,卷积层也随着扫描的深入而趋于收缩。除了卷积层之外,通常还会有池化层。池化是过滤细节的一种方法,常见的池化技术是最大池化,它用大小为 2*2 的矩阵传递拥有最多特定属性的像素。
现在,大部分图像分类技术都是在 ImageNet 数据集上训练的, ImageNet 数据集中包含了约 120 万张高分辨率训练图像。测试图像没有初始注释(即没有分割或标签),并且算法必须产生标签来指定图像中存在哪些对象。
现存的很多计算机视觉算法,都是被来自牛津、 INRIA 和 XRCE 等顶级的计算机视觉团队在 ImageNet 数据集上实现的。通常来说,计算机视觉系统使用复杂的多级管道,并且,早期阶段的算法都是通过优化几个参数来手动微调的。
第一届 ImageNet 竞赛的获奖者是 Alex Krizhevsky(NIPS 2012) ,
他在 Yann LeCun 开创的神经网络类型基础上,设计了一个深度卷积神经网络
。该网络架构除了一些最大池化层外,还包含 7 个隐藏层,前几层是卷积层,最后两层是全连接层。在每个隐藏层内,激活函数为线性的,要比逻辑单元的训练速度更快、性能更好。除此之外,当附近的单元有更强的活动时,它还使用竞争性标准化来压制隐藏活动,这有助于强度的变化。
就硬件要求而言, Alex 在 2 个 Nvidia GTX 580 GPU (速度超过 1000 个快速的小内核)上实现了非常高效的卷积网络。 GPU 非常适合矩阵间的乘法且有非常高的内存带宽。这使他能在一周内完成训练,并在测试时快速的从 10 个块中组合出结果。如果我们能够以足够快的速度传输状态,就可以将网络分布在多个内核上。
随着内核越来越便宜,数据集越来越大,大型神经网络的速度要比老式计算机视觉系统更快。在这之后,已经有很多种使用卷积神经网络作为核心,并取得优秀成果的模型,如
ZFNet(2013),GoogLeNet(2014), VGGNet(2014), RESNET(2015),DenseNet(2016)等。
▌
2 、对象检测
识别图像中的对象这一任务,通常会涉及到为各个对象输出边界框和标签。这不同于分类/定位任务——对很多对象进行分类和定位,而不仅仅是对个主体对象进行分类和定位。在对象检测中,你只有 2 个对象分类类别,即对象边界框和非对象边界框。例如,在汽车检测中,你必须使用边界框检测所给定图像中的所有汽车。
如果使用图像分类和定位图像这样的滑动窗口技术,我们则需要将卷积神经网络应用于图像上的很多不同物体上。由于卷积神经网络会将图像中的每个物体识别为对象或背景,因此我们需要在大量的位置和规模上使用卷积神经网络,但是这需要很大的计算量!
为了解决这一问题,神经网络研究人员建议使用区域(region)这一概念,这样我们就会找到可能包含对象的“斑点”图像区域,这样运行速度就会大大提高。第一种模型是基于区域的卷积神经网络( R-CNN ),其算法原理如下:
在 R-CNN 中,首先使用选择性搜索算法扫描输入图像,寻找其中的可能对象,从而生成大约 2,000 个区域建议;
然后,在这些区域建议上运行一个 卷积神网络;
最后,将每个卷积神经网络的输出传给支持向量机( SVM ),使用一个线性回归收紧对象的边界框。
实质上,我们将对象检测转换为一个图像分类问题。但是也存在这些问题:训练速度慢,需要大量的磁盘空间,推理速度也很慢。
R-CNN 的第一个升级版本是 Fast R-CNN,通过使用了 2 次增强,大大提了检测速度:
在建议区域之前进行特征提取,因此在整幅图像上只能运行一次卷积神经网络;
用一个 softmax 层代替支持向量机,对用于预测的神经网络进行扩展,而不是创建一个新的模型。
Fast R-CNN 的运行速度要比 R-CNN 快的多,因为在一幅图像上它只能训练一个 CNN 。 但是,择性搜索算法生成区域提议仍然要花费大量时间。
Faster R-CNN 是基于深度学习对象检测的一个典型案例
。
该算法用一个快速神经网络代替了运算速度很慢的选择性搜索算法:通过插入区域提议网络( RPN ),来预测来自特征的建议。 RPN 决定查看“哪里”,这样可以减少整个推理过程的计算量。