打算机视觉中关于图像识别有四大类任务:
分类-Classification:办理“是什么?”的问题,即给定一张图片或一段视频判断里面包含什么类别的目标。
定位-Location:办理“在哪里?”的问题,即定位出这个目标的的位置。
检测-Detection:办理“是什么?在哪里?”的问题,即定位出这个目标的的位置并且知道目标物是什么。
分割-Segmentation:分为实例的分割(Instance-level)和场景分割(Scene-level),办理“每一个像素属于哪个目标物或场景”的问题。
目标检测要办理的核心问题
除了图像分类之外,目标检测要办理的核心问题是:
1.目标可能涌如今图像的任何位置。
2.目标有各种不同的大小。
3.目标可能有各种不同的形状。
如果用矩形框来定义目标,则矩形有不同的宽高比。由于目标的宽高比不同,因此采取经典的滑动窗口+图像缩放的方案办理通用目标检测问题的本钱太高。
目标检测的运用目标检测在很多领域都有运用需求。个中被广为研究的是人脸检测,行人检测,车辆检测等主要目标的检测。人脸检测在SIGAI上一篇文章“人脸识别算法蜕变史”中已经大略先容,后面我们会针对这个问题撰写综述文章。
行人检测
行人检测在视频监控,人流量统计,自动驾驶中都有主要的地位,后续也会有干系综述文章。
车辆检测
车辆检测在智能交通,视频监控,自动驾驶中有主要的地位。车流量统计,车辆违章的自动剖析等都离不开它,在自动驾驶中,首先要办理的问题便是确定道路在哪里,周围有哪些车、人或障碍物。
其他运用
交通标志如交通灯、行驶规则标志的识别对付自动驾驶也非常主要,我们须要根据红绿灯状态,是否许可旁边转、掉头等标志确定车辆的行为。
交通标志检测
除了这些常见目标的检测之外,很多领域里也须要检测自己感兴趣的目标。比如工业中材质表面的毛病检测,硬刷电路板表面的毛病检测等。
表面毛病检测
农业中农作物表面的病虫害识别也须要用到目标检测技能:
农作物病虫害检测
人工智能在医学中的运用目前是一个热门的话题,医学影像图像如MRI的肿瘤等病变部位检测和识别对付诊断的自动化,供应优质的治疗具有主要的意义。
肿瘤检测
目标检测干系算法
DPM算法
与人脸、行人等特定类型的目标检测不同,通用目标检测要同时检测出图像中的多类目标,难度更大。处理这一问题的经典方法是DPM(Deformable Part Model),正如其名,这是可变形的组件模型,是一种基于组件的检测算法。该模型由Felzenszwalb在2008年提出,并揭橥了一系列的CVPR,NIPS文章,蝉联三届PASCAL VOC目标检测冠军,拿下了2010年PASCAL VOC的“终生造诣奖”。
在深度卷积神经网络(DCNN)涌现之前,DPM算法一贯是目标检测领域最精良的算法,它的基本思想是先提取DPM人工特色(如下图所示),再用latentSVM分类。这种特色提取办法存在明显的局限性,首先,DPM特色打算繁芜,打算速率慢;其次,人工特色对付旋转、拉伸、视角变革的物体检测效果差。这些弊端很大程度上限定了算法的运用处景。
DPM目标检测流程
Alexnet
当代深度神经网络的想法早在2006年就被 Geoffrey Hinton 提出,直到2012年,Alex Krizhevsky凭借著名的Alexnet卷积神经网络模型以领先第二名10%的成绩夺得ILSVRC2012图像分类比赛冠军,深度学习技能才真正走进主流学术界和工业界的视野。深度神经网络的涌现颠覆了传统的特色提取办法,凭借其强大的表达能力,通过丰富的演习数据和充分的演习能够自主学习有用的特色。这比较传统的人工创造特色并根据特色设打算法的办法是质的飞跃。
AlexNet 网络构造
通过卷积神经网络可以学到物体在各个层次的抽象表达(关于卷积神经网络的事理以及为什么会有效,SIGAI会在接下来的文章中先容):
深度学习得到的层次特色表达
OverFeat
2013年纽约大学Yann LeCun团队中Zhang xiang等提出的OverFeat在ILSVRC2013比赛中得到了多项第一,他们改进了Alexnet,提出了利用同一个卷积网络完成了多个任务的方法。该方法充分利用了卷积神经网络的特色提取功能,它把分类过程中提取到的特色同时又用于定位检测等各种任务,只须要改变网络的末了几层,就可以实现不同的任务,而不须要从头开始演习全体网络的参数。这充分表示和发掘了CNN特色共享的优点。
该文紧张的亮点是:
1.共享卷基层用于多任务学习。
2.全卷积网络思想。
3.在特色层进行滑窗操作(Sliding Window)避免大量重复运算,这也是后来的系列算法不断沿用和改进的经典做法。
OverFeat几个明显的毛病:
1.采取了多尺度贪婪的划窗策略,导致打算量还是很大 。
2.由于当时并没有太精良的backbone网络,共享特色层的表征能力不是太强,没有考虑多尺度特色领悟,对小目标效果差,整体的检测效果不尽如人意。ILSVRC 2013数据集上的mAP(可以大略的理解为检测准确率)为24.3%。
经典的卷积神经网络有一个问题是它只能接管固定大小的输入图像,这是由于第一个全连接层和它之前的卷积层之间的权重矩阵大小是固定的,而卷积层、全连接层本身对输入图像的大小并没有限定。而在做目标检测时,卷积网络面临的输入候选区域图像大小尺寸是不固定的。
下面用一个例子解释怎么让一个已经设计好的DCNN模型,可以支持任意大小图片输入,个中一种方案是全卷积网络(FCN),即去掉所有全连接层,全部由卷积层来替代:
FCN并不是把5×5的图片展平成一维向量再进行打算,而是直接采取5×5的卷积核对一整张图片进行卷积运算。比如16×16大小的特色图片,那么会是什么样的结果?请看下面的示意图:
这个时候就会创造,网络末了的输出是一张2×2大小的特色图片。可以创造采取FCN网络,可以输入任意大小的图片。须要把稳的是网络末了输出的特色图片大小不再总是1×1而是一个与输入图片大小干系。
OverFeat有很多创新,但是不能算是目标检测范例的Pipeline,以是我们单独提了出来。下面将从R-CNN开始先容目前基于DCNN物体检测发展脉络。
卷积神经网络用于目标检测之后,进展神速,在短期内大幅度的提高了算法的精度,推动这一技能走向实用。
基于DCNN的目标检测算法发展路线图
R-CNN
Region CNN(简称R-CNN)由Ross Girshick
(江湖人称RBG大神,Felzenszwalb的学生)提出,是利用深度学习进行目标检测的里程碑之作,奠定了这个子领域的根本。这篇文章思路清奇,在DPM方法经历多年瓶颈期后,显著提升了检测率(ILSVRC 2013数据集上的mAP为31.4%)。RBG是这个领域神一样的存在,后续的一些改进方法如Fast R-CNN、Faster R-CNN、YOLO等干系事情都和他有关。
R-CNN检测时的紧张步骤为:
1.利用Selective Search算法从待检测图像中提取2000个旁边的区域候选框,这些候选框可能包含要检测的目标。
2.把所有侯选框缩放成固定大小(原文采取227×227)。
3.用DCNN提取每个候选框的特色,得到固定长度的特色向量。
4.把特色向量送入SVM进行分类得到种别信息,送入全连接网络进行回归得到对应位置坐标信息。
R-CNN不采取滑动窗口方案的缘故原由一是打算本钱高,会产生大量的待分类窗口;其余不同类型目标的矩形框有不同的宽高比,无法利用统一尺寸的窗口对图像进行扫描。用于提取特色的卷积网络有5个卷积层和2个全连接层,其输入是固定大小的RGB图像,输出为4096维特色向量。对候选区域的分类采取线性支持向量机,对每一张待检测图像打算所有候选区域的特色向量,送入支持向量机中进行分类;同时送入全连接网络进行坐标位置回归。
R-CNN虽然设计奥妙,但仍存在很多缺陷:
1.重复打算。R-CNN虽然不再是穷举,但通过Proposal(Selective Search)的方案依然有两千个旁边的候选框,这些候选框都须要单独经由backbone网络提取特色,打算量依然很大,候选框之间会有重叠,因此有不少实在是重复打算。
2.演习测试不简洁。候选区域提取、特色提取、分类、回归都是分开操作,中间数据还须要单独保存。
3.速率慢。前面的缺陷终极导致R-CNN出奇的慢,GPU上处理一张图片须要十几秒,CPU上则须要更永劫光。
4.输入的图片Patch必须逼迫缩放成固定大小(原文采取227×227),会造成物体形变,导致检测性能低落。
SPPNet
此后MSRA的Kaiming He等人在R-CNN的根本上提出了SPPNet,该方法虽然还依赖候选框的天生,但将提取候选框特色向量的操作转移到卷积后的特色图上进行,将R-CNN中的多次卷积变为一次卷积,大大降落了打算量(这一点参考了OverFeat)。
R-CNN的卷积网络只能接管固定大小的输入图像。为了适应这个图像尺寸,要么截取这个尺寸的图像区域,这将导致图像未覆盖全体目标;要么对图像进行缩放,这会产生扭曲。在卷积神经网络中,卷积层并不哀求输入图像的尺寸固定,只有第一个全连接层须要固定尺寸的输入,由于它和前一层之间的权重矩阵是固定大小的,其他的全连接层也不哀求图像的尺寸固定。如果在末了一个卷积层和第一个全连接层之间做一些处理,将不同大小的图像变为固定大小的全连接层输入就可以办理问题。
SPPNet引入了Spatial Pyramid pooling层,对卷积特色图像进行空间金字塔采样得到固定长度的输出,可对特色层任意长宽比和尺度区域进行特色提取。详细做法是对特色图像区域进行固天命量的网格划分,对不同宽高的图像,每个网格的高度和宽度是不规定的,对划分的每个网格进行池化,这样就可以得到固定长度的输出。下图是SPP操作示意图:
比较R-CNN,SPPNet的检测速率提升了30倍以上。下图是R-CNN和SPPNet 检测流程的比较:
下图是SPPNet的事理:
SPPNet 检测框架图
SPPNet和R-CNN一样,它的演习要经由多个阶段,中间特色也要进行存储;backbone网络参数沿用了分类网络的初始参数,没有针对检测问题进行优化。
Fast RCNN
Ross Girshick 针对SPPNet做了进一步改进提出的FRCNN ,其紧张创新是RoI Pooling 层,它将不同大小候选框的卷积特色图统一采样成固定大小的特色。ROI池化层的做法和SPP层类似,但只利用一个尺度进行网格划分和池化。该层可以直接求导,演习时直接将梯度传导到backbone网络进行优化。FRCNN针对R-CNN和SPPNet在演习时是多阶段的和演习的过程中很耗费韶光空间的问题进行改进。将深度网络和后面的SVM分类两个阶段整合到一起,利用一个新的网络直接做分类和回归。使得网络在Pascal VOC上的演习韶光从R-CNN的84小时缩短到9.5小时,检测韶光更是从45秒缩短到0.32秒。
主要的是Fast RCNN的backbone网络也可以参与演习了!
!
!
Faster RCNN
SPPNet和Faster RCNN都须要独立的候选区域天生模块,这个模块打算量很大,而且不易用GPU加速。针对这个问题,Shaoqin Ren 等人在Faster RCNN根本上提出Faster R-CNN ,在主干网络中增加了RPN (Region Proposal Network)网络,通过一定规则设置不同尺度的锚点(Anchor)在RPN的卷积特色层提取候选框来代替Selective Search等传统的候选框天生方法,实现了网络的端到端演习。候选区域天生、候选区域特色提取、框回归和分类全过程一气呵成,在演习过程中模型各部分不仅学习如何完本钱身的任务,还自主学习如何相互合营。这也是第一个真正意义上的深度学习目标检测算法。
注:Shaoqin Ren实现的matlab版本中RPN阶段和FRCNN阶段是分开演习的,但是在实际的实践中(RBG实现的Python版本)创造二者可以一起优化演习,而且精度没有丢失,可以说Faster RCNN真正实现了端到真个演习。
Fast RCNN(左) 和 Faster RCNN(右)框架构造比拟
R-FCN
由于现在的主流网络层数越来越多,基于Faster RCNN检测框架的方法的打算量受到了3个成分的影响:
1.根本网络的繁芜度
2.候选框数量的多少
3.分类和位置回归子网络的繁芜度(每个候选框的box都会独立进行前向打算)。
一样平常来说直接优化前两点性价比不太高。如果直接优化RoI-wise subnetwork是否可行呢,将子网络的深度尽可能减少?分类是要增加物体的平移不变性(不同的位置都是同一个物体);目标检测时减少物体的平移变革(目标检测须要得到物体所在的位置)。常日我们所用的网络都是ImageNet的分类任务演习得到的,在目标检测的时候进行Finetune。由于得到的初始模型基于分类任务,那么会倾向于平移不变性,这和目标检测就涌现了抵牾。
MSRA的Jifeng Dai等人提出了R-FCN,通过position-positive score maps(位置敏感得分图)来办理这个抵牾。位置敏感得分图通过预测RoI中不同部位的种别投票表决产生该RoI的种别预测。引用原文中的例子,“如果我们的算法要识别婴儿,那么把一个目标区域分成九宫格,个中算法认为个中五个格子中的区域分别像婴儿的头、四肢和躯干,那么根据投票机制,就认为这个目标区域里的是一个婴儿。这很符合我们人类的判断逻辑。”
R-FCN沿用了 Faster RCNN 的框架构造,不同的是在Faster R-CNN的根本上通过引入位置敏感得分图,将RoI-wise subnetwork消灭了,直接在位置敏感得分图上利用ROI Pooling进行信息采样领悟分类和位置信息。
R-FCN 网络框架构造
ResNet101为例,不同检测框架复用卷积网络层数
Mask R-CNN
2017年Kaiming He等提出了Mask R-CNN ,并得到ICCV2017 Best Paper Award。作者指出,Faster R-CNN在做下采样和RoI Pooling时都对特色图大小做了取整操作,这种做法对付分类任务基本没有影响,但对检测任务会有一定影响,对语义分割这种像素级任务的精度影响则更为严重。为此,作者对网络中涉及特色图尺寸变革的环节都不该用取整操作,而是通过双线性差值补充非整数位置的像素。这使得下贱特色图向上游映射时没有位置偏差,不仅提升了目标检测效果,还使得算法能知足语义分割任务的精度哀求。
以上先容的检测方法都属于two-stage的方案,即分为候选区域天生和区域分类两步,接下来我们将先容几种single-stage的经典方法。
YOLO系列
2015年,随着YOLO算法的涌现,深度学习目标检测算法开始有了两步(two-stage)和单步(single-stage)之分。差异于R-CNN系列为代表的两步检测算法,YOLO舍去了候选框提取分支(Proposal阶段),直接将特色提取、候选框回归和分类在同一个无分支的卷积网络中完成,使得网络构造变得大略,检测速率较Faster R-CNN也有近10倍的提升。这使得深度学习目标检测算法在当时的打算能力下开始能够知足实时检测任务的需求。
算法将待检测图像缩放到统一尺寸,为了检测不同位置的目标,将图像平分成的网格,如果某个目标的中央落在一个网格单元中,此网格单元就卖力预测该目标。
YOLOv1只针对末了7x7的特色图进行剖析,使得它对小目标的检测效果不佳,当多个目标涌如今一个Grid Cell时不随意马虎区分。
YOLOv1事理图
YOLOv1在7X7特色图上对每个Grid cell进行操作
YOLOv2改进了YOLOv1的网络构造,除加入时下热门的批量归一化层以及残差网络构造以外,还针对性的演习了一个高分辨率的分类网络(448x448)然后利用该网络演习检测网络,单单通过提升输入的分辨率,mAP得到了4%的提升。YOLOv1利用单个grid cell拼接玉成连接层完成边框的预测,导致丢失较多的空间信息,定位不准,作者在这一版本中进行了优化改进:
1.借鉴了Faster R-CNN中的Anchor思想,但是作者在实践中创造用基于规则选择的Anchor效果并没有得到提升,实验中作者对Pascal VOC和COCO的数据集进行了统计剖析(聚类剖析)选择针对行的Anchor的尺寸性能的到了明显提升。
2.作者在利用anchor boxes时创造模型收敛不稳定,尤其是在早期迭代的时候。大部分的不稳定征象涌如今预测box的 (x,y) 坐标的优化上。因此作者就没有采取直接预测offset的方法,而利用了预测相对付grid cell的坐标位置的办法,利用logistic函数把ground truth归一化到0到1之间,坐标值被归一化后,模型优化会更稳定。
YOLOv3在YOLOv2的根本上利用了全新设计的Darknet53残差网络并结合FPN网络构造,在网络后两个特色图上采样后于网络前期相应尺寸的特色图聚合再经由卷积网络后得到预测结果。这些改进使得YOLOv3用三分之一的韶光达到与SSD相称的精确度。在 COCO test-dev 上 mAP@0.5 达到 57.9%,与RetinaNet(FocalLoss论文所提出的单阶段网络)的结果附近,但速率快4倍。
YOLOv3的模型比之前的版本繁芜了不少,可以通过改变模型构造的大小来权衡速率与精度。
YOLOv3的改进点:
1. 多尺度预测(FPN)
2. 更好的Backbone网络(Darknet53残差网络)
3. 分类丢失采取binary cross-entropy丢失函数更换Softmax丢失函数(Softmax会选择分数最高的种别剖断为当前框所属的种别,而现实中一个目标可能属于多个种别标签)
SSD
SSD对YOLO进行了改进,达到了和两阶段方法相称的精度,同时又保持了较快的运行速率。SSD也采取了网格划分的思想,和Faster RCNN不同的是它将所有的操作整合在一个卷积网络中完成。为了检测不同尺度的目标,SSD对不同卷积层的特色图像进行滑窗扫描;在前面的卷积层输出的特色图像中检测小的目标,在后面的卷积层输出的特色图像中检测大的目标。它的紧张特点是:
1.基于多尺度特色图像的检测:在多个尺度的卷积特色图上进行预测,以检测不同大小的目标,一定程度上提升了小目标物体的检测精度。
2.借鉴了Faster R-CNN中的Anchor boxes思想,在不同尺度的特色图上采样候选区域,一定程度上提升了检测的召回率以及小目标的检测效果。下图是SSD的事理:
FPN
FPN(Feature Pyramid Network)方法同时利用低层特色高分辨率和高层特色的高语义信息,通过领悟这些不同层的特色达到提升预测的效果的浸染。FPN中预测是在每个领悟后的特色层上单独进行的,这和常规的特色领悟办法有所不同。
FPN 网络构造如下图d(个中YOLO利用b构造,SSD利用c构造)所示,它的构造具有相称的灵巧性,可以和各种特色提取网络结合作为检测算法的根本网络。在后文中会看到,目前大多数state-of-art的模型都采取了这种构造。个中RetinaNet在FPN的根本上利用了ResNet网络提取特色,并用Focal Loss丢失改进单步目标检测算法中普遍存在的前景类和背景类丢失不屈衡的问题。这些基于FPN构造的检测算法能够在增加网络深度、获取更丰富语义信息的同时从浅层特色图中获取更丰富且高分辨率的图像特色,这使得这种网络构造在实际运用中表现出精良的性能。
目前主流检测框架有4种利用特色的形式:
1.图像金字塔。即将图像缩放到不同的大小,然后不同大小的图像天生对应的特色。这种方法的缺陷是增加了韶光本钱。有些算法会在检测时采取这种图像金字塔的方案。
2.单一尺度特色层。SPPNet,Fast RCNN,Faster RCNN采取这种办法,即仅采取网络末了一层卷积层的特色。
3.SSD采取这种多尺度特色领悟的办法,但是没有上采样过程,即从网络不同层抽取不同尺度的特色做预测,这种办法不会增加额外的打算量。SSD算法中没有用到足够低层的特色(在SSD中,最低层的特色是VGG网络的conv4_3),而足够低层的特色对付检测小物体是很有帮助的。
4.FPN采取bottom-up与top-down的构造,实现了低层特色和高层语义特色的领悟,提高了特色映射的信息密度和分辨率,提高了小目标物体的检测效果;差异于SSD,FPN每层都是独立预测的。
COCO2017排行榜
末了我们来看通用目标检测算法的最新进展。下图是MSCOCO 2017年目标检测竞赛的领先算法:
个中排名第一的模型为旷视科技(face++)提交的MegDet。他们的方案没有在检测算法方面做过多优化(采取的是ResNet50+FPN),而是在并行演习规模上做了优化。演习硬件环境是由128个GPU组成的集群,通过改进跨GPU批量归一化算法和学习率变革策略,将batch size增大到256张,这使得批量归一化层中利用的批均值和方差更能够反应总体特色,有效提升了归一化效果,从而大幅提升演习速率并且得到了非常好的结果。
排名第二的方案PAN改进了FPN算法,如下图所示。它在FPN的根本上不仅增加了一个降采样网络(b),还聚合利用了多个不同尺度特色图上的预测候选框(c)。该模型不仅在这一届的COCO目标检测竞赛中名列第二,而且取得了语义分割任务的冠军。
第三名的模型出自MSRA之手,他们同样没有对检测算法本身做过多改进,在FPN根本上利用了Xception网络构造和SoftNMS,但与以往不同的是利用了可变卷积层DCN(deformable convnet)替代了传统卷积,使得卷积层能够根据图片的语义信息调度卷积核感想熏染点的位置,达到提升网络特色提取能力的目的。下图是可变卷积层的事理:
排名第四的结果是用以FPN+ResNeXt网络为作为根本网络的Mask R-CNN算法得到的。后面大多数成绩精良的模型都是R-FCN、FPN、Faster-RCNN等经典模型结合DCN、Attention机制、前辈分类网络构造和模型领悟等技能而形成的算法。
@《SIGAI人工智能平台》
版权声明
本文版权归"大众号:SIGAI,(ID:SIGAICN),SIGAI授权转载,禁止二次转载!