之前读了一下这篇综述,《Object Detection in 20 Years: A Survey》,是19年底新出的文章。想写个博客记录一下,但还没读完,就把阅读笔记分章节放上来。
这是第二章。
介绍了Viola Jones Detectors、HOG Detector和Deformable Part-based Model (DPM)三种,其中,HOG Detector:
N. Dalal和B. Triggs [12]最初于2005年提出了定向梯度直方图(HOG)特征描述器。 HOG可被认为是其时间尺度不变特征变换[33,34]和形状上下文[35]的重要改进。为了平衡特征不变性(包括平移,缩放,照度等)和非线性(区分不同的对象类别),将HOG描述符设计为在均匀间隔的像元的密集网格上进行计算,并使用重叠的局部对比度归一化(在“块”上)以提高准确性。尽管HOG可用于检测各种对象类别,但它主要是由行人检测问题引起的。为了检测不同大小的物体,HOG检测器会多次缩放输入图像,同时保持检测窗口的大小不变。多年来,HOG检测器一直是许多对象检测器[13、14、36]和各种计算机视觉应用的重要基础。
补充:HOG特征
在2012年,世界见证了卷积神经网络的重生[40]。由于深度卷积网络能够学习图像的鲁棒且高级的特征表示,因此自然而然的问题是,我们是否可以将其用于对象检测? R. Girshick等通过提出Regions with CNN features(RCNN)来检测物体,率先打破了僵局。从那时起,物体检测开始以前所未有的速度发展。
在深度学习时代,对象检测可以分为两类:“Two-stage检测”和“One-stage检测”,其中前者将检测过程称为“从粗到精”过程,而后者则将其视为“一步完成”。
RCNN背后的思想很简单:它始于通过selective search提取一组object proposals
(object candidate boxes)[42]。 然后将每个proposal重新缩放为固定大小的图像
,并输入到ImageNet上训练的CNN模型中(例如AlexNet [40])以提取特征
。 最后,线性SVM分类器
用于预测每个区域内对象的存在并识别对象类别.
尽管RCNN取得了长足的进步,但它的缺点也很明显:对大量重叠的proposals(从一张图像中提取2000多个框)进行冗余特征计算会导致极慢的检测速度(使用GPU,每张图像14s)。 同年晚些时候,SPPNet [17]提出并克服了这个问题。
总结:
selective search ——> rescale proposal ——> CNN提取特征 ——> SVM分类
参考:
目标检测(1)-Selective Search
目标检测(一) R-CNN
2014年,K. He等人提出了空间金字塔池化
网络(SPPNet)[17]。先前的CNN模型需要固定大小的输入,例如AlexNet的224x224图片[40]。 SPPNet的主要贡献是引入了空间金字塔池化(SPP)层,SPP层使CNN可以生成固定长度的representation,而与感兴趣的图像/区域的大小无关
,而无需对其进行重新缩放。当使用SPPNet进行目标检测时,只从整个图像计算一次特征图
,然后可以生成任意区域的固定长度表示以训练检测器,从而避免了重复计算卷积特征。 SPPNet的速度是R-CNN的20倍以上,而且丝毫没有牺牲任何检测精度(VOC07 mAP = 59.2%)。
尽管SPPNet有效地提高了检测速度,但仍然存在一些缺点:首先,训练仍然是多阶段的;其次,SPPNet仅微调其全连接层,而忽略了之前的所有层。次年晚些时候,提出了Fast RCNN [18]并解决了这些问题。
参考:
目标检测(二) SPPNet,包括:
在2015年,R。Girshick提出了Fast RCNN检测器[18],这是对R-CNN和SPPNet的进一步改进[16,17]。 快速RCNN使我们能够在相同的网络配置下同时训练一个detector和一个bounding box regressor。 在VOC07数据集上,Fast RCNN将mAP从58.5%(RCNN)提高到70.0%,同时检测速度比R-CNN快200倍。
尽管Fast-RCNN成功地集成了R-CNN和SPPNet的优点,但其检测速度仍然受到提议检测的限制(有关更多详细信息,请参见第2.3.2节)。 然后,自然会产生一个问题:“我们可以使用CNN模型生成object proposals吗?” 后来,Faster R-CNN [19]回答了这个问题。
参考:
目标检测(三) Fast R-CNN(RoI Pooling)
2015年,S。Ren等人 在Fast RCNN之后不久,提出了Faster RCNN检测器[19,44]。 Faster RCNN是第一个端到端和第一个近实时深度学习探测器(COCO mAP @ .5 = 42.7%,COCO mAP @ [。5,.95] = 21.9%,VOC07 mAP = 73.2 %,VOC12 mAP = 70.4%,使用ZF-Net [45]时为17fps)。
Faster-RCNN的主要贡献是引入了Region Proposal Newwork(RPN)
,该网络使几乎无代价的region proposal成为可能。 从R-CNN到Faster RCNN,对象检测系统的大多数独立模块,例如提议检测,特征提取,边界框回归等,已逐步集成到统一的端到端
学习框架中。
尽管Faster RCNN突破了Fast RCNN的速度瓶颈,但在后续检测阶段仍存在计算冗余。 后来,人们提出了各种改进措施,包括RFCN [46]和Light head RCNN [47]。 (请参阅第3节中的更多详细信息。)
总结:
这里的RPN和one-stage的检测器思路很像,只不过是“前景/背景二分类”还是“直接多分类”的区别。
参考:
深度学习: RPN (区域候选网络)
【个人整理】faster-RCNN的训练过程以及关键点总结
在2017年 Lin等 基于Faster RCNN提出的特征金字塔网络(FPN)[22]。 在使用FPN之前,大多数基于深度学习的检测器仅在网络的顶层运行检测。 尽管CNN较深层的功能有利于类别识别,但它不利于对象的定位
。 为此,FPN开发了一种具有横向连接的自上而下的体系结构,用于构建各种规模的高级语义。 由于CNN通过其向前传播自然形成一个特征金字塔,因此FPN在检测各种尺度的物体方面显示出了巨大的进步
。FPN现在已成为许多最新探测器的基本构建块。
自己写的One-stage Detectors总结:
【目标检测】【2】One-stage目标检测算法的论文阅读笔记与资料整理
YOLO由R. Joseph等人 在2015年提出,它是深度学习时代的第一个单阶段检测器
[20]。 YOLO非常快:YOLO的快速版本以155fps运行,VOC07 mAP = 52.7%,而增强版以45fps运行,VOC07 mAP = 63.4%和VOC12 mAP = 57.9%。 YOLO是“You Only Look Once”的缩写。从其名称可以看出,作者已经完全放弃了以前的“proposal detection + verification”检测范式。取而代之的是,它遵循了完全不同的哲学:将单个神经网络应用于完整图像。该网络将图像划分为多个区域,并同时预测每个区域的边界框和概率。后来,R。Joseph在YOLO的基础上进行了一系列改进,并提出了v2和v3版本[48,49],该版本进一步提高了检测精度,同时保持了很高的检测速度。
尽管检测速度有了很大提高,但与两级检测器相比,YOLO的定位精度仍然下降,特别是对于一些小物体
。 YOLO的后续版本[48,49]和后者提出的SSD [21]更加关注了这个问题。
SSD [21]由W. Liu等人提出(在2015年),它是深度学习时代的第二个One-stage检测器。 SSD的主要贡献是引入了multi-reference and multi-resolution
检测技术(将在2.3.2节中介绍),该技术显着提高了One-stage检测器的检测精度,尤其是对于某些小物体。 SSD在检测速度和准确性方面均具有优势(VOC07 mAP = 76.8%,VOC12 mAP = 74.9%,COCO mAP @ .5 = 46.5%,mAP @ [。5,.95] = 26.8%,运行快速版本) 以59fps播放)。 SSD与以前的检测器之间的主要区别在于,前者在网络的不同层上检测不同比例的对象,而后者仅在其顶层运行检测
。
尽管速度快且简单,但One-stage的精度已落后于Two-stage多年。 T.-Y. Lin等发现了背后的原因并在2017年提出了RetinaNet [23]。 他们声称,在密集探测器的训练过程中遇到的极端前景-背景类别失衡
是主要原因。 为此,通过重塑标准的交叉熵损失,在RetinaNet中引入了一个名为“focal loss”
的新损失函数,以便检测器在训练过程中将更多的注意力放在困难的,分类错误的示例上。focal loss使一级检测器可以达到两级检测器相当的精度,同时保持很高的检测速度。 (COCO mAP @ .5 = 59.1%,mAP @ [。5,.95] = 39.1%)。
参考:
类别不平衡问题:论文阅读: RetinaNet
focal loss:RetinaNet: Focal loss在目标检测网络中的应用
RetinaNet(Focal Loss)
近年来,最常用于对象检测的评估是“Average Precision (AP)”
,它最初是在VOC2007中引入的。 AP定义为不同召回条件下的平均检测精度
,通常以类别特定的方式进行评估。为了比较所有对象类别上的性能,通常将所有对象类别上的平均AP(mAP)用作最终的性能指标。为了测量对象的定位精度,“Intersection over Union”(IoU)用于检查预测框与地面真值框之间的IoU是否大于预定义的阈值,例如0.5。如果是,则该对象将被标识为“成功检测到”,否则将被标识为“缺失”。多年来,基于0.5 IoU的mAP已成为对象检测问题的实际指标。
【目标检测】【基础】目标检测中,precision、recall、IOU、mAP等常见指标的计算(如,IOU、mAP等)
(偷偷略过
具有“不同尺寸”和“不同纵横比”的对象的多尺度检测是对象检测的主要技术挑战之一。 在过去的20年中,多尺度检测经历了多个历史时期:“feature pyramids and sliding windows (before 2014)”, “detection with object proposals (2010-2015)”, “deep regression (2013-2016)”, “multi-reference detection (after 2015)”, and “multi-resolution detection (after 2016)”,如图6所示。
随着VJ检测器之后计算能力的提高,研究人员开始通过构建“功能金字塔+滑动窗口”来更加关注直观的检测方式。从2004年到2014年,基于此检测范例构建了许多里程碑式检测器,包括HOG检测器,DPM甚至深度学习时代的Overfeat检测器[103](ILSVRC-13本地化任务的获胜者)。
VJ检测器和HOG检测器等早期检测模型经过专门设计,可通过简单地构建特征金字塔并在其上滑动固定大小的检测窗口来检测具有“固定长宽比”的对象(例如,面部和直立的行人)
。当时不考虑检测“各种纵横比”。为了检测外观更复杂的物体(如PASCAL VOC中的物体),R。Girshick等。开始在功能金字塔之外寻求更好的解决方案。“混合模型” [15]是当时最好的解决方案之一,它通过训练多个模型来检测具有不同长宽比的对象。
除此之外,基于示例的检测[36,115]通过针对训练集的每个对象实例(示例性)训练单个模型,提供了另一种解决方案。
随着现代数据集中的对象(例如MS-COCO)变得越来越多样化,混合模型或基于示例的方法不可避免地导致了更多的其他检测模型。于是自然产生一个问题:是否存在统一的多尺度方法来检测不同宽高比的对象?(将要介绍的)“object proposals”的引入已经回答了这个问题。
Object proposals是指一组可能与任何对象无关的与类无关的候选框
。这是2010年首次应用于目标检测[116]。使用object proposals进行检测有助于避免在整个图像上进行详尽的滑动窗口搜索
。
Object proposal detection algorithm应满足以下三个要求:1)高查全率,2)高定位精度,3)基于前两个要求,以提高准确性并减少处理时间
。现代的提议检测方法可以分为三类:1)分段分组方法[42、117–119],2)窗口评分方法[116、120–122]和3)基于神经网络的方法[123–128]。我们请读者阅读以下论文,以全面了解这些方法[129,130]。
早期的proposal detection methods遵循bottom-up的检测原理[116,120],并受到视觉显着性检测的深刻影响。后来,研究人员开始转向低级视觉(例如边缘检测),并更加谨慎地手工制作技巧,以改善候选框的位置[42,117–119,122,131]。 2014年之后,随着deep CNN在视觉识别中的普及,top- down, learning-based的方法开始在该问题上显示出更多的优势[19,121,123,124]。从那时起,对象提议检测已从bottom-up vision演变为“overfitting to a specific set of object classes”
,并且检测器和提议生成器之间的区别变得越来越模糊[132]。
随着“object proposal”彻底改变了滑动窗口检测并迅速主导了基于深度学习的检测器,在2014-2015年,许多研究人员开始提出以下问题:object proposal在检测中的主要作用是什么?是为了提高准确性,还是简单地提高检测速度?为了回答这个问题,一些研究人员试图削弱proposal的作用[133]或仅对CNN特征进行滑动窗口检测[134-138],但没有一个获得令人满意的结果。在采用one-stage detectors 和 “deep regression” 技术之后,proposal detection很快就消失了。
近年来,随着GPU计算能力的提高,人们进行多尺度检测的方式已变得越来越直接和暴力。 使用深度回归来解决多尺度问题的想法非常简单,即基于深度学习特征直接预测边界框的坐标
[20,104]。 这种方法的优点是简单易行,而缺点是定位可能不够准确,尤其是对于某些小物体
。 稍后将要介绍的“Multi-reference detection”解决了这个问题。
Multi-reference
是用于多尺度对象检测的最流行框架[19、21、44、48]。 其主要思想是在图像的不同位置预先定义一组具有不同大小和纵横比的参考框(又称锚框)
,然后根据这些参考来预测检测框。
每个预定义锚框的典型损失包括两个部分:1)用于类别识别的交叉熵损失; 2)用于对象定位的L1 / L2回归损失
。 损失函数的一般形式可写为:
其中,t和t *是预测和真实边界框的位置,p和p *是它们的类别概率。 IOU {a,a ∗}是锚点a与ground truth a ∗之间的IOU。 η是IOU阈值,例如0.5。 如果锚不覆盖任何对象,则其定位损失不计入最终损失。
在过去两年中,另一种流行的技术是multi- resolution detection
[21、22、55、105],即通过在网络的不同层检测不同比例的对象
。 由于CNN在其前向传播过程中自然形成了一个特征金字塔,因此更容易检测到较深层中较大的对象和较浅层中较小的对象。 现在, multi-reference和multi- resolution检测已成为当前对象检测系统中的两个基本构建块
。
Bounding box(BB)回归是物体检测中的一项重要技术。 它旨在根据初始proposal或anchor box来优化预测边界框的位置。 在过去的20年中,BB回归的演变经历了三个历史时期:“无BB回归(2008之前)”,“从BB到BB(2008-2013)”和“从特征到BB(2013年之后)”。 ”。 图7显示了Bounding Box Regression的演变。
VJ检测器和HOG检测器等大多数早期检测方法都没有使用BB回归,通常直接将滑动窗口
作为检测结果。 为了获得物体的准确位置,研究人员别无选择,只能建造非常密集的金字塔并在每个位置上密集地滑动探测器
。
BB回归首次引入对象检测系统是在DPM [15]中。 那时的BB回归通常充当后处理块,因此它是optional的。 由于PASCAL VOC的目标是为每个对象预测单个边界框,因此DPM生成最终检测的最简单方法应该直接使用其root filter位置。 后来,R。Girshick等。 他介绍了一种基于对象假设的完整配置来预测边界框的更复杂方法,并将此过程表述为线性最小二乘回归问题[15]。 此方法在PASCAL标准下可显着提高检测效率。
在2015年引入Faster RCNN之后
,BB回归不再用作单独的后处理模块,而是与检测器集成在一起并以端到端的方式进行训练
。 同时,BB回归已发展为直接基于CNN功能预测BB。 为了获得更鲁棒的预测,通常使用smooth-L1函数
[19],
或平方根函数
[20],
作为其回归损失,比DPM中使用的最小二乘损失对异常值的鲁棒性更高。 一些研究人员还选择对坐标进行归一化以获得更可靠的结果[18,19,21,23]。
视觉对象通常嵌入到周围环境的典型上下文中。 我们的大脑利用物体和环境之间的关联来促进视觉感知和认知[160]。 上下文启动已长期用于改善检测。 在其演变历史中,共有三种常用方法:1)Detection with local context,2)Detection with global context,以及3)Context interactive,如图8所示。
Local context是指围绕要检测的对象的区域中的视觉信息。 长期以来人们就认识到局部上下文有助于改善对象检测。 在2000年代初,Sinha和Torralba [139]发现,将局部上下文区域(例如面部边界轮廓)包括在内,可以显着改善面部检测性能。 Dalal和Triggs还发现,结合少量的背景信息可以提高行人检测的准确性[12]。 通过简单地扩大网络的感受野(receptive field)或object proposals的大小
,也可以通过局部上下文来改进基于深度学习的最新检测器[140-145,161]。
全局上下文将场景配置作为对象检测的附加信息源。 对于早期
时代的物体检测器,整合全局上下文的一种常见方法是整合构成场景元素的statistical summary,例如Gist [160]。 对于基于现代深度学习的检测器,有两种方法可以集成全局上下文。 第一种方法是利用large receptive field(甚至大于输入图像)[20]或CNN特征的全局池化操作[147]。 第二种方法是将全局上下文视为一种顺序信息,并通过RNN对其进行学习[148,149]
。
上下文交互是指通过视觉元素的交互传达的信息,例如constraints and dependencies。 对于大多数对象检测器,无需利用它们的关系就可以单独检测和识别对象实例。 最近的一些研究表明,可以通过考虑上下文交互来改进现代物体检测器。 最近的一些改进可以分为两类,第一类是探索单个对象之间的关系[15、146、150、152、162],第二类是对对象与场景之间的依赖关系进行建模。 [151、151、153]。
非最大抑制(NMS)是对象检测中的一组重要技术。 由于相邻窗口通常具有相似的检测分数,因此将非最大抑制用作后处理步骤,以删除复制的边界框并获得最终检测结果
。 在物体检测的早期,NMS并不总是集成的[30]。 这是因为那时物体检测系统的期望输出还不完全清楚。 在过去的20年中,NMS已逐渐发展为以下三组方法:1)Greedy selection,2)边界框聚合和3)学习NMS,如图9所示。
贪婪选择是一种老式的但最受欢迎的在对象检测中执行NMS的方式。 此过程背后的想法很简单直观:对于一组重叠的检测,选择具有最大检测得分的边界框,同时根据预定义的重叠阈值(例如0.5)删除其相邻框。 以上处理以贪婪的方式反复进行。
尽管贪婪选择现在已成为NMS的实际方法,但是它仍然有一些改进的空间,如图11所示。首先,得分最高的框可能并不是最合适的选择。 其次,它可能会压制附近的物体。 最后,它不会抑制误报。 近年来,尽管最近进行了一些手动修改以提高其性能[158,159,163](有关更多详细信息,请参见第4.4节),但据我们所知,贪婪选择仍然是最强大的选择。 当今物体检测的基准。
BB聚合是NMS的另一组技术[10,103,156,157],其思想是将多个重叠的边界框组合或聚类为一个最终检测
。 这种方法的优点是它充分考虑了对象关系及其空间布局。 有一些使用此方法的知名检测器,例如VJ检测器[10]和Overfeat [103]。
最近已引起广泛关注的一组NMS改进learning to NMS [136,146,154,155]。 这种方法组的主要思想是将NMS视为重新对所有原始检测进行re-score的filter,并以端到端的方式将NMS训练为网络的一部分
。 与传统的手工NMS方法相比,这些方法在改善遮挡和密集物体检测
方面显示出令人鼓舞的结果。
物体检测器的训练本质上是一个不平衡的数据学习问题。 在基于滑动窗口
的探测器的情况下,背景与物体之间的不平衡对于每个物体而言可能高达10^4至10^5个背景窗口
。 现代
的检测数据集要求对物体的纵横比进行预测,从而将不平衡比进一步提高到10^6〜10^7
[129]。 在这种情况下,使用所有背景数据将不利于培训,因为大量的easy negatives将使学习过程不堪重负。 Hard negative mining(HNM)旨在解决训练过程中数据不平衡的问题。 HNM在目标检测中的技术演进如图10所示。
物体检测中的Bootstrap是指一组训练技术,其中训练从一小部分背景样本
开始,然后在训练过程中反复添加新的未分类背景
。 在早期的物体检测器中,最初引入引导程序是为了减少对数百万个背景样本的训练计算[10、29、164]。 后来,它成为DPM和HOG检测器中的标准训练技术[12,13],用于解决数据不平衡问题。
在深度学习时代的后期,由于计算能力的提高
,在2014-2016年期间,Bootstrap在对象检测中很快被丢弃[16-20]。 为了缓解训练期间的数据不平衡问题,诸如Faster RCNN和YOLO之类的检测器只需在正负窗口之间平衡权重即可(balance the weights between the positive and negative windows)
。 但是,研究人员后来注意到,权重平衡不能完全解决数据不平衡的问题[23]。 为此,在2016年之后,bootstrap被重新引入了基于深度学习的检测器中
[21,165–168]。 例如,在SSD [21]和OHEM [166]
中,将仅反向传播极小部分样本(具有最大损失值的样本)的梯度。 在RefineDet [55]中,设计了“anchor refinement module”来过滤easy negatives。 另一种改进是通过重塑标准的cross entropy loss来设计新的损失函数[23,169,170],以便将更多的精力放在难分类的样本上[23]。