目标检测综述

千里之行,始于足下

只为记录一下自己的目标检测方面的笔记,纸质容易丢;同时,也是自己的第一篇博客,鬼知道应该怎么去写!努力吧,少年!!!

目标检测方法综述笔记

在过去的20年时间里,人们普遍认为,目标检测的发展大致经历了两个历史时期,分别是2014年以前的传统的目标检测时期和2014年以后的基于深度学习的目标检测时期。

1 传统目标检测

早期的目标检测大多是基于手工构建的。由于当时缺乏有效的图像表示,人们别无选择,只能设计复杂的特征表示,以及各种加速技术来用尽有限的计算资源。传统目标类别检测则通过使用 AdaBoost算法框架、HOG特征和支持向量机等方法,根据选定的特征和分类器,检测出有限的几种类别。

1.1 Viola Jones Detectors

Viola Jones算法是第一种能实时处理且效果较好的人脸检测算法,此算法的提出标志着人脸检测进入实际应用阶段。P.Viola和M.Jones在没有任何约束条件(如肤色分割)的情况下首次实现了人脸的实时检测。在同等的检测精度下,检测器的速度是其他算法的数十倍甚至数百倍。这种检测算法,后来被称为“维奥拉-琼斯”(VJ)检测器”,在此以作者的名字命名,以纪念他们的重大贡献。

VJ检测器采用最直接的检测方法,即,滑动窗口:查看图像中所有可能的位置和比例,看看是否有窗口包含人脸。虽然这似乎是一个非常简单的过程,但它背后的计算远远超出了计算机当时的能力。VJ检测器结合了 “ 积分图像 ”、“ 特征选择 ” 和 “ 检测级联 ” 三种重要技术,大大提高了检测速度。

   积分图像:积分图像是一种计算方法,以加快盒滤波或卷积过程。与当时的其他目标检测算法一样,在VJ检测器中使用Haar小波作为图像的特征表示。积分图像使得VJ检测器中每个窗口的计算复杂度与其窗口大小无关。

   特征选择:作者没有使用一组手动选择的Haar基过滤器,而是使用Adaboost算法从一组巨大的随机特征池 ( 大约180k维 ) 中选择一组对人脸检测最有帮助的小特征。

   检测级联:在VJ检测器中引入了一个多级检测范例 ( 又称“检测级联”,detection cascades ),通过减少对背景窗口的计算,而增加对人脸目标的计算,从而减少了计算开销。

1.2 HOG Detector

方向梯度直方图(HOG)特征描述符最初是由N.Dalal和B.Triggs在2005年提出的。HOG可以被认为是对当时的尺度不变特征变换(scale-invariant feature transform)和形状上下文(shape contexts)的重要改进。为了平衡特征不变性 ( 包括平移、尺度、光照等 ) 和非线性 ( 区分不同对象类别 ),将HOG描述符设计为在密集的均匀间隔单元网格上计算,并使用重叠局部对比度归一化 ( 在“块”上 ) 来提高精度。虽然HOG可以用来检测各种对象类,但它的主要动机是行人检测问题。若要检测不同大小的对象,则HOG检测器在保持检测窗口大小不变的情况下,多次对输入图像进行重新标度。多年来,HOG检测器一直是许多目标检测器和各种计算机视觉应用的重要基础。

这个玩意在行人再识别(reid)里经常可以看到,就是传统检测的典型方法

1.3 Deformable Part-based Model (基于可变形部件的模型,DPM)

不能那么书面了,by the way,DPM是reid领域的典型数据集Mars的检测方法。

DPM算法由Felzenszwalb于2010年提出,是一种基于部件的检测方法,对目标的形变具有很强的鲁棒性。虽然今天的物体探测器在检测精度方面已经远远超过了DPM,但仍然受到DPM的许多有价值的见解的影响,如混合模型、硬负挖掘、边界盒回归等。

目前DPM已成为众多分类、分割、姿态估计等算法的核心部分,P. Felzenszwalb和R. Girshick也因此于2010年被VOC授予"终身成就奖"。(一听就知道这个可牛)

DPM算法采用了改进后的HOG特征,SVM分类器和滑动窗口(Sliding Windows)检测思想,针对目标的多视角问题,采用了多组件(Component)的策略,针对目标本身的形变问题,采用了基于图结构(Pictorial Structure)的部件模型策略。此外,将样本的所属的模型类别,部件模型的位置等作为潜变量(Latent Variable),采用多示例学习(Multiple-instance Learning)来自动确定。

note:

其实吧,简单了解知道该方法即可,当然里边的思想看个人兴趣,有的还是很重要的。个人是不会过度深究的,毕竟2014年以后的深度学习方法才是重点

2 基于深度学习的方式检测

随着手工特征的性能趋于饱和,目标检测在2010年之后达到了一个稳定的水平。2012年卷积神经网络在世界范围内重生,也就是AlexNet在比赛中使用CNN大幅提升目标分类的准确度之后,学者便一直尝试将CNN用于目标检测领域。

R. Girshick等人在2014年率先打破僵局,提出了具有CNN特征的区域(R-CNN)用于目标检测。从那时起,目标检测开始以前所未有的速度发展。

在这方面,主要有两种主流的算法:一类是结合region proposal、CNN网络的,基于分类的 R-CNN 系列目标检测框架(two stage);另一类则是将目标检测转换为回归问题的算法(one stage)。

2.1 基于分类的检测算法(two stage)

Region proposal(候选区域)是通过 Selective Search等算法,根据图像中纹理、边缘、颜色等信息,检测较少区域的同时保证了较高的召回率。

2.1.1 OverFeat算法

OverFeat是最先将深度学习应用到目标检测中的算法之一。

严格来说,OverFeat并没有使用region proposal,但其思路被后面的R-CNN系列沿用并改进。该算法通过多尺度的滑动窗口结合 AlexNet提取图像特征,完成检测。在 ILSVRC 2013 数据集上的平均准确率(mean Average Precision,mAP)为 24.3%,检测效果较传统算法有显著改进,但依旧存在较高错误率。

可是好多地方都没有说这个算法,都是直接从R-CNN开始的。但是不能否认前人的工作吖。

2.1.2 R-CNN

Ross Girshick等人提出了R-CNN模型。R-CNN利用Selective Search获得候选区域(约2000个)。随即对候选区域大小进行归一化,用作CNN网络的标准输入。再使用AlexNet获得候选区域中的特征,最后利用多个 SVM 进行分类以及线性回归微调定位框(Bounding-box)。

但是,R-CNN对近2 000个候选区域分别做特征提取,而候选区域之间存在许多重复区域,导致大量且重复的运算,运行缓慢,平均每幅图片的处理时间为 34 s。同时,对每一步的数据进行存储,极为损耗存储空间。另外,对候选区域进行归一化操作,会对最终结果产生影响。

就是慢,SPP-Net解决了重复的问题

2.1.3 SPP-Net

针对R-CNN对所有候选区域分别提取特征的缺点,SPP-Net一次性对整张图片作卷积操作提取特征。使得特征提取从 R-CNN 的近 2 000 次变为提取1次整张图片特征,大大减少了工作量。

另外,SPP-Net在最后一个卷积层后、全连接层前添加空间金字塔池化层(SPP层),提取固定尺寸的特征向量,避免对候选区域大小进行归一化的复杂操作。

以上两点改进使得 SPP-Net 的检测速度比 R-CNN快 38~102倍,SPPNet虽然有效地提高了检测速度,但仍然存在一些不足:第一,训练仍然是多阶段的,第二,SPPNet只对其全连接层进行微调,而忽略了之前的所有层。次年晚些时候,Fast RCNN被提出并解决了这些问题。

2015,Fast RCNN被提出并解决了这些问题

发展很快的有没有,edg牛逼

2.1.4 Fast-RCNN

Fast R-CNN算法在SPP-Net的基础上,将SPP层简化为ROI Pooling层,并将全连接层的输出作SVD分解,得到两个输出向量:softmax的分类得分以及 Bounding box外接矩形框的窗口回归。这种改进将分类问题和边框回归问题进行了合并;用 softmax 代替 SVM,将所有的特征都存储在显存中,减少了磁盘空间的占用;SVD分解则在几乎不影响精度的情况了,极大加快检测速度。

Fast R-CNN 使用 VGG16 代替 AlexNet,平均准确率达到 70.0%,且训练速度较 R-CNN 提升 9 倍,检测速度达到每幅图片 0.3 s(除去 region proposal 阶段)。Fast R-CNN 依然使用 Selective Search 方法选取候选区域,这一步骤包含大量计算。

Fast RCNN成功地融合了 R-CNN 和 SPPNet 的优点,但其检测速度仍然受到建议检测候选区域的限制 。由此可见,改进Selective Search是Fast R-CNN速度提升的关键。然后,一个问题自然而然地出现了:“ 我们能用CNN模型生成候选区域吗? ” 稍后,Faster R-CNN 解决了这个问题。

2.1.5 Faster-RCNN

Faster R-CNN使用RPN网络(Region Proposal Networks)替代 Selective Search 算法,使目标识别实现真正端到端的计算。

RPN 使得 Faster R-CNN 在 region proposal 阶段只需10 ms,检测速度达到5 f/s(包括所有步骤),并且检测精度也得到提升,达到 73.2%。但是,Faster R-CNN 仍然使用 ROI Pooling,导致之后的网络特征失去平移不变性,影响最终定位准确性;ROI Pooling后每个区域经过多个全连接层,存在较多重复计算;Faster R-CNN 在特征图上使用锚点框对应原图,而锚点框经过多次下采样操作,对应原图一块较大的区域,导致 Faster R-CNN检测小目标的效果并不是很好。

2.1.6 R-FCN

R-FCN使用全卷积网络ResNet代替VGG,提升特征提取与分类的效果;针对全卷积网络不适应平移敏感性的缺陷,该算法使用特定的卷积层生成包含目标空间位置信息的位置敏感分布图(Position Sensitive Score Map);ROI Pooling 层后不再连接全连接层,避免重复计算。

R-FCN的准确率达到 83.6%,测试每张图片平均花费170 ms,比Faster-RCNN快了2.5~20倍。但是R-FCN在得到 Score map 需要生成一个随类别数线性增长的channel数,这一过程虽然提升了目标检测精度,但减慢了检测速度,导致其难以满足实时性要求。

2.1.7 Mask R-CNN

Mask R-CNN是一种在 Faster R-CNN 基础上加以改进的算法,增加了对实例分割的关注。该算法在分类和定位回归以外,加入了关于实例分割的并行分支,并将三者的损失联合训练。实例分割要求实例定位的精准度达到像素级,而Faster R-CNN 因为 ROI Pooling 层的等比例缩放过程中引入了误差,导致空间量化较为粗糙,无法准确定位。

Mask R-CNN 提出双线性差值 RoIAlign 获得更准确的像素信息,使得掩码(mask)准确率提升 10%到50%;Mask R-CNN 还使用 ResNeXt基础网络,在COCO 数据集上的检测速度为 5 f/s,检测准确性从 Fast-RCNN的19.7%提升至39.8%。

Mask R-CNN在检测精度、实例分割方面都达到目前最高的层次。其后一些算法在性能上有所提升,但基本维持在同一水平。但是该算法的检测速度依旧难以满足实时要求,并且实例分割目前也还面临着标注代价过于昂贵的问题。

基于深度学习目标检测模型性能对比

目标检测综述_第1张图片

算法都在一点点的改进,你可不能停呀。大部分了解就好啦,要熟练掌握最重要的,坚持看下去,加油!

2.2 基于回归的检测算法(one stage)

2.2.1 YOLO

从R-CNN到Faster-RCNN,目标检测始终遵循“region proposal+分类”的思路,训练两个模型必定导致参数、训练量增加,速度变慢。由此,YOLO提出了一种one stage的思路。

YOLO由R. Joseph等人于2015年提出。它是深度学习时代的第一个单级检测器。

YOLO v1(2016)将图片划分为 S × S 的网格(cell),各网格只负责检测中心落在该网格的目标,每个网格需要预测两个尺度的bounding box和类别信息,一次性预测所有区域所含目标的bounding box、目标置信度以及类别概率完成检测。

YOLO 采用以 cell为中心的多尺度区域取代 region proposal,舍弃了一些精确度以换取检测速度的大幅提升,检测速度可以达到 45 f/s,足以满足实时要求;检测精度为63.4%,较Faster R-CNN的73.2%,差距较大。

YOLO在极大提高检测速度的情况下,也存在以下问题:(1)因为每个网格值预测两个bounding box,且类别相同,因此对于中心同时落在一个网格总的物体以及小物体的检测效果差,多物体环境下漏检较多;(2)由于YOLO关于定位框的确定略显粗糙,因此其目标位置定位准确度不如 Fast-RCNN;(3)对于外型非常规的物体检测效果不佳。

2.2.2 SSD

Faster-RCNN 检 测 检 测 精 度 高 但 检 测 速 度 慢 ,YOLO 检测精度不高但检测速度快,SSD则结合两者的优点,在 YOLO的基础上借鉴了 RPN的思路,在保证高精度检测的同时,兼顾检测速度。

为不同层的特征图具有对应大小的感受野,特定层的特征图只需要训练对应尺度的对象检测。因此,SSD 结合高层和底层的特征图,使用多尺度区域特征进行回归。

结果:SSD300的mAP能达到73.2%,基本与**Faster R-CNN(VGG16)**持平,而检测速度达到59 f/s,比Faster R-CNN快6.6倍。但是SSD具有以下问题:(1)小目标对应到特征图中很小的区域,无法得到充分训练,因此 SSD 对于小目标的检测效果依然不理想;(2)无候选区域时,区域回归难度较大,容易出现难以收敛等问题;(3)SSD不同层的特征图都作为分类网络的独立输入,导致同一个物体被不同大小的框同时检测,重复运算。

2.2.3 YOLOv2以及YOLO9000

YOLOv虽然检测速度快,但是它在物体定位方面不够准确,并且召回率低,因此它的检测精度比较低。YOLOv2(2017)通过在每一个卷积层后添加 batch normalization、多尺度训练,加入 K-mean 维度聚类等方式,使得检测速度和精度的再次提升。该算法能够在76.8%正确率的同时达到 67 f/s的检测速度,78.6%的正确率时达到40 f/s。

同时,YOLOv2还专门训练了一个由19个卷积层和5个池化层组成的Darknet-19网络作为模型的主干网络,用于提取特征并减少模型的计算量。同文还提出了YOLO9000,该算法采用wordTree层次分类,混合检测数据、识别数据集,在分类和检测数据集上同时训练,实现9 418类的检测。

无论是 YOLO 系列还是 SSD 算法,都沿用 R-CNN系列算法先在大数据集上进行分类预训练,再在小数据集上 fine-tune 的方法。但 fine-tune 预训练模型有以下问题:(1)预训练模型,往往无法迁移到如医疗图像等特定数据上;(2)预训练模型结构基本固定,难以修改; (3)预训练样本和最终检测目标有所区别,得到的模型未必是检测目标的最佳模型。

2.2.4 YOLOv3

YOLOv3(2018) 在 YOLOv2的基础上,使用全新设计的 Darknet-53 残差网络并结合特征金字塔网络 ( feature pyramid networks,FPN)( Seferbekov 等,2018) 进行多尺度融合预测,其基本思想是先利用特征提取网络得到一定尺寸的特征图(如 13 × 13),然后将输入图像分成对应个数(13 × 13)的网格单元,如果真实目标的中心坐标落在某一网格单元,则由该网格单元来预测该目标,因为每个网格单元都会预测固定数量的边界框(采用 YOLOv2 中的 K 均值聚类算法(K-means) 获 得 3 个初始尺寸不同的边界框),最终选择与真实值的 IOU 最大的边界框来预测该目标。

YOLOv3 的Darknet-53 相对于 YOLOv2 的 Darknet-19 改进了两个方面:1) YOLOv3 中做特征图尺寸变化的池化(pooling)层基本由卷积层来实现,减少了模型的运算量;2)针对 YOLOv2 中直筒型网络结构层数太多所产生的梯度问题引入了 ResNet 网络中的残差结构(residual blocks),ResNet 的残差结构训练深层网络的难度较小,因此可以将网络做到 53 层来提升检测精度,这些改变使得 YOLOv3 用 1 /3 的时间达到与 SSD 相当的精度。另外 YOLOv3 采用了FPN架构,在三个不同尺度的特征图上进行检测,提高了网络对小目标的检测效果。

2.2.5 YOLOv4

2020年Bochkovskiy等提出了YOLOv4,该模型选择了CSPDarknet53作为主干网络,同时模型中加入了很多普遍适用的算法。例如加权残差连接、跨阶段部分连接、自对抗训练、跨小批量标准化和DropBlock正则化等。这些调优的手段使得该模型实现了当时最优的实验结果。

2.2.5 YOLOv5和YOLOvx

。。。

目标检测综述_第2张图片

算法不断发展,找最新的用就ok!

前文也说了,第一篇欸!个人也不知道能不能对大家有点用,有用请点个赞支持一下下吧!帅气的小哥哥,美丽的小姐姐!!!See you next time!

参考文献

[1]方路平,何杭江,周国民.目标检测算法研究综述[J].计算机工程与应用,2018,54(13):11-18+33.

[2]赵永强,饶元,董世鹏,张君毅.深度学习目标检测方法综述[J].中国图象图形学报,2020,25(04):629-654.

[3] 王灿,卜乐平.基于卷积神经网络的目标检测算法综述[J].舰船电子工程,2021,41(09):161-169.

你可能感兴趣的:(目标检测,人工智能,计算机视觉)