精华内容
下载资源
问答
  • two stageone stage 的目标检测算法

    万次阅读 2018-10-24 11:05:08
    AI 科技评论按:本文作者 Ronald,首发于作者的知乎专栏「炼丹师备忘录」,AI 科技评论获其授权转发。目前目标检测领域的深度学习方法主要分为两类:two stage 的目标检测算法;one...

    转至:https://blog.csdn.net/amds123/article/details/79474096

    AI 科技评论按:本文作者 Ronald,首发于作者的知乎专栏「炼丹师备忘录」,AI 科技评论获其授权转发。

    目前目标检测领域的深度学习方法主要分为两类: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 模板,在卷积层使用 anchor boxes 操作,增加候选框的预测,同时采用较强约束的定位方法,大大提高算法召回率。结合图像细粒度特征,将浅层特征与深层特征相连,有助于对小尺寸目标的检测。

    图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)的图像语义分析。

    部分目标检测算法精度和速度对比

    展开全文
  • one-stage和two-stage目标检测算法

    千次阅读 2019-08-26 22:41:31
    one stage 的目标检测算法。前者是先由算法生成一系列作为样本的候选框,再通过卷积神经网络进行样本分类;后者则不用产生候选框,直接将目标边框定位的问题转化为回归问题处理。正是由于两种方法的差异,在性能上.....

    AI 科技评论按:本文作者 Ronald,首发于作者的知乎专栏「炼丹师备忘录」,AI 科技评论获其授权转发。

    目前目标检测领域的深度学习方法主要分为两类: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.2 SPP-Net

    针对卷积神经网络重复运算问题,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.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.5 MR-CNN

    2015 年巴黎科技大学提出 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.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

    随着全卷积网络的出现,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.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.11 FPN

    2017 年 Facebook 的 Tsung-Yi Lin 等提出了 FPN 算法,利用不同层的特征图进行不同尺寸的目标预测。原来多数的目标检测算法都是只采用深层特征做预测,低层的特征语义信息比较少,但是目标位置准确;高层的特征语义信息比较丰富,但是目标位置比较粗略。另外虽然也有些算法采用多尺度特征融合的方式,但是一般是采用融合后的特征做预测,而 FPN 算法不一样的地方在于预测是在不同特征层独立进行的,利用深层特征通过上采样和低层特征做融合。

    FPN 算法主网络是 ResNet,结构主要是一个自底向上的线路横向连接一个自顶向下的线路。自底向上其实就是网络的前向过程,在前向过程中,feature map 的大小在经过某些层后会改变,而在经过其他一些层的时候不会改变,FPN 算法将不改变 feature map 大小的层归为一个 stage,因此每次抽取的特征都是每个 stage 的最后一个层输出,这样就能构成特征金字塔。自顶向下的过程采用上采样进行,而横向连接则是将上采样的结果和自底向上生成的相同大小的 feature map 并一一对应进行融合,在融合之后还会再采用 3×3 的卷积核对每个融合结果进行卷积,目的是消除上采样的混叠效应。

    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.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.14 CoupleNet

    针对 R-FCN 算法没有考虑到 region proposal 的全局信息和语义信息的问题,2017 年中科院自动化所提出 CoupleNet 算法,其在原来 R-FCN 的基础上引入了 proposal 的全局和语义信息,通过结合局部、全局以及语义的信息,提高了检测的精度。

    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。

    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。

     

    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.2 YOLO

    2015 年华盛顿大学的 Joseph Redmon 等提出的 YOLO 算法继承了 OverFeat 算法这种基于回归的 one stage 方法,速度能达到每秒 45 帧,由于其速度优势迅速成为端到端方法的领先者。YOLO 算法是基于图像的全局信息进行预测的,整体结构简单,通过将输入图像重整到 448×448 像素固定尺寸大小,并划分图像为 7×7 网格区域,通过卷积神经网络提取特征训练,直接预测每个网格内的边框坐标和每个类别置信度,训练时采用 P-Relu 激活函数。但是存在定位不准以及召回率不如基于区域提名方法的问题,且对距离很近的物体和很小的物体检测效果不好,泛化能力相对较弱。

    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 模板,在卷积层使用 anchor boxes 操作,增加候选框的预测,同时采用较强约束的定位方法,大大提高算法召回率。结合图像细粒度特征,将浅层特征与深层特征相连,有助于对小尺寸目标的检测。

    2.4 G-CNN

    由于巨大的 proposal 数量使得后续检测效率降低,2016 年马里兰大学的 M Najibi 等提出一种起始于网格迭代的 G-CNN 算法。通过初始化对图像划分回归后得到更加接近物体的候选框,再利用回归框作为原始窗口进行回归调整,解决了以往的基于区域提名方法通过海量潜在候选框直接进行目标搜索,抑制负样本的缺陷。

    在训练阶段,首先在图像中获取叠加的多尺度的规则网格(实际网格相互叠加),然后通过 ground truth 与每一个网格的 IOU 进行每一个网格 ground truth 的分配,并完成训练过程,使得网格在回归过程中渐渐接近 ground truth。在检测阶段,对于每一个样本框针对每一类获得置信分数,用最可能类别的回归器来更新样本框的位置。

    2.5 SSD

    针对 YOLO 类算法的定位精度问题,2016 年 12 月北卡大学教堂山分校的 Wei Liu 等提出 SSD 算法,将 YOLO 的回归思想和 Faster R-CNN 的 anchor box 机制结合。通过在不同卷积层的特征图上预测物体区域,输出离散化的多尺度、多比例的 default boxes 坐标,同时利用小卷积核预测一系列候选框的边框坐标补偿和每个类别的置信度。在整幅图像上各个位置用多尺度区域的局部特征图边框回归,保持 YOLO 算法快速特性的同时,也保证了边框定位效果和 Faster R-CNN 类似。但因其利用多层次特征分类,导致其对于小目标检测困难,最后一个卷积层的感受野范围很大,使得小目标特征不明显。

    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.7 DSSD

    为了解决 SSD 算法检测小目标困难的问题,2017 年北卡大学教堂山分校的 Cheng-Yang Fu 等提出 DSSD 算法,将 SSD 算法基础网络从 VGG-16 更改为 ResNet-101,增强网络特征提取能力,其次参考 FPN 算法思路利用去卷积结构将图像深层特征从高维空间传递出来,与浅层信息融合,联系不同层级之间的图像语义关系,设计预测模块结构,通过不同层级特征之间融合特征输出预测物体类别信息。

    DSSD 算法中有两个特殊的结构:Prediction 模块;Deconvolution 模块。前者利用提升每个子任务的表现来提高准确性,并且防止梯度直接流入 ResNet 主网络。后者则增加了三个 Batch Normalization 层和三个 3×3 卷积层,其中卷积层起到了缓冲的作用,防止梯度对主网络影响太剧烈,保证网络的稳定性。

    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.9 RON

    2017 年清华大学提出了 RON 算法,结合 two stage 名的方法和 one stage 方法的优势,更加关注多尺度对象定位和负空间样本挖掘问题。

    • 多尺度对象定位——各种尺度的物体可能出现在图像的任何位置,因此应考虑成千上万个具有不同位置/尺度/方位的区域。多尺度表征将显著改善各种尺度的物体检测,但是这些方法总是在网络的一层检测到各种尺度的对象;
    • 负空间挖掘——对象和非对象样本之间的比例严重不平衡。因此,对象检测器应该具有有效的负挖掘策略。

    RON 算法通过设计方向连接结构,利用多尺度表征显著改善各种多尺度物体检测,同时为了减少对象搜索空间,在卷积特征图创建 objectness prior 引导目标对象搜索,训练时将检测器进行联合优化。并通过多任务损失函数联合优化了反向连接、objectness prior 和对象检测,因此可直接预测各种特征图所有位置的最终检测结果。

     

    3. 总结

    随着深度学习技术在图像各领域的研究深入,出现越来越多的新理论、新方法。two stage 的方法和基于回归思想的 one stage 方法两者相互借鉴,不断融合,取得了很好的效果,也为我们展示了一些未来发展趋势:

    • 参考上下文特征的多特征融合;
    • 多尺度的对象定位;
    • 结合循环神经网络(RNN)的图像语义分析。

     

     

     

    展开全文
  • 论文名称:《 Single-Shot Refinement Neural Network for Object Detection 》 论文下载:https://arxiv.org/abs/1711.06897 ... 主要思想​​​​ 引入 two stage 类型的 object detection 算法中...

    论文名称:《 Single-Shot Refinement Neural Network for Object Detection 》

    论文下载:https://arxiv.org/abs/1711.06897

    论文代码:https://github.com/sfzhang15/RefineDet


    主要思想​​​​

    引入 two stage 类型的 object detection 算法中对 box 的由粗到细的回归思想(由粗到细回归其实就是先通过 RPN 网络得到粗粒度的 box 信息,然后再通过常规的回归支路进行进一步回归从而得到更加精确的框信息,这也是 two stage 类型的 object detection 算法效果优于 one stage 类型的一个重要原因)。
    引入类似 FPN 网络的特征融合操作用于检测网络,可以有效提高对小目标的检测效果,检测网络的框架还是 SSD。


    Abstract

    对于目标检测,two-stage 方法(例如 Faster R-CNN)可以获得最高精度,而 one-stage 方法(例如 SSD)具有高效率的优点。继承两者的优点且克服其缺点,本文提出了一种新的单次目标探测器,名为 RefineDet,它比 two-stage 方法更精准,同时保持了 one-stage 方法的效率。 RefineDet 由两个相互连接的模块组成,即 anchor refinement module 和 object detection module。具体来说,ARM 旨在(1)过滤掉 negative anchors,以减少分类器的搜索空间,(2)粗略调整 anchors 的位置和大小,为后续的回归提供更好的初始化。ODM 将 refined anchors 作​​为输入,进一步改善回归和预测多级标签。同时,我们设计 transfer connection block 来传输 ARM 的特征,用于 ODM 中预测目标的位置,大小和类别标签。Multi-task loss function 使我们能够以端到端的方式训练整个网络。 PASCAL VOC 2007,PASCAL VOC 2012 和 MS COCO 的实验,证明了 RefineDet 实现了 state-of-the-art 的检测精度和高效率。

     

    1.Introduction & 2.Related Work

    Classical Object Detectors:Haar+AdaBoost,DPM 等基于滑动窗口方法手工制造特征和分类器,在密集图像网格上的目标寻找。

    Two-Stage Approach:R-CNN,SPPNet,Fast R-CNN,Faster R-CNN,R-FCN,FPN,Mask R-CNN 等
    两阶段方法包括两部分:第一部分(例如,Selective Search,EdgeBoxes,DeepMask,RPN )生成一个稀疏的候选对象提议集,第二部分进一步分类和回归,使用卷积网络确定准确的对象区域和相应的类别标签。进一步改进性能,如架构图,训练策略,上下文推理和多层利用。

     两阶段相比一阶段有三个优点:

               (1) 采用带采样启发式的两阶段结构处理类不平衡问题;

               (2) 使用两步级联回归对象框参数;

               (3) 使用两阶段特征描述对象。

    One-Stage Approach:OverFeat,YOLO,YOLOv2,SSD,DSSD,DSOD,RetinaNet 等
           通过对位置、比例和纵横比进行定期密集采样来检测目标,主要优点是计算效率高,但是,检测精度通常落后于两阶段方法。OverFeat 方法基于端对端的深度 ConvNets 来分类、定位和检测。YOLO 使用单个前馈卷积网络直接预测对象类和位置,非常快速。之后,YOLOv2 改进了 YOLO 的几个方面:添加所有卷积层上的批量标准化,使用高分辨率分类器,使用带 anchor boxes 的卷积层替代全连接层来预测 bounding boxes 等。SSD 方法在多个 ConvNet 层扩展了不同尺度的 anchors,强制每个层专注于预测确定的尺寸对象。 DSSD 在 SSD 中引入了额外的上下文,通过反卷积来提高准确性。 DSOD 在 SSD 结构的基础上,设计了一个有效的框架和一套原则来从头开始学习目标检测器。

           一阶段方法检测精度低的一个主要原因是类不平衡问题。为了提高准确性,一些新方法通过重新设计损失函数或分类来解决类不平衡问题。 RetinaNet 重塑标准交叉熵损失,来聚焦训练在一组稀疏的 hard examples,降低分配给分类良好的例子的损失权重。虽然一阶段检测器取得了良好的进展,但准确性仍然落后于两阶段方法。

    Two-Stage 和 One-Stage 方法的结合:RON,RefineDet 等
           RON 研究设计了反向连接,使网络能够检测多层 CNN 中的对象;提出了 objectness prior 来引导搜索目标对象,在卷积特征图上显着减少对象的搜索空间;利用多任务损失函数优化整个网络,这样网络就能直接预测最终检测结果。

           RefineDet 继承了一阶段和两阶段方法的优点,并克服它们的缺点。它使用两个相互连接的模块,即 ARM 和 ODM,来改进一阶段方法的体系结构。

           ARM 识别并删除 negative anchors,以减少分类器的搜索空间;粗略调整 anchors 的位置和大小,为后续提供更好的初始化回归。 这部分类似 Faster R-CNN 算法中的 RPN 网络,主要用来得到 bbox(类似 Faster R-CNN 中的 ROI 或 proposal)和去除一些负样本(这是因为负样本数量远大于正样本)。因此基于 4 层特征最后得到的还是两条支路,一个 bbox 的坐标回归支路,另一个是 bbox 的二分类支路。我们知道在 Faster R-CNN 算法中 RPN 网络存在的意义就是生成 proposal(或者叫 ROI),这些 proposal 会给后续检测网络提供较好的初始信息,这也是 one stage 的 object detection 算法和 two stage 的 object detection 算法的重要区别,这里的 ARM 基本上扮演了 RPN 网络的角色,如果一定要说不同点的话,那应该就是这里的输入利用了多层特征,而 RPN 网络的输入是单层特征。

           ODM 采用 ARM 产生的 refined anchors 作为输入,进一步改善回归和预测多类标签。这两个互连模块模仿两阶段结构,因此继承了其三个优点来产生准确的检测结果,效率也高。这部分就基本上是 SSD 了,也是融合不同层的特征,然后做 multi class classification 和 regression。主要的不同点一方面在于这部分的输入 anchors 是 ARM 部分得到的 refined anchors,类似 RPN 网络输出的 proposal。另一方面和 FPN 算法类似,这里的浅层 feature map(size 较大的蓝色矩形块)融合了高层 feature map 的信息,然后预测 bbox 是基于每层 feature map(每个蓝色矩形块)进行,最后将各层结果再整合到一起。而在 SSD 中浅层的 feature map 是直接拿来用的(并没有和高层的 feature map 融合),也就是对 bbox 的预测是在每一层上进行的,预测得到结果后再将各层结果整合在一起,这是非常重要的区别。这样做的好处就是对小目标物体的检测效果更好,这在 FPN 和 RON 等算法中已经证明过了。

           TCB 将 ARM 中的特征传输到 ODM 中用以预测位置、大小和类别标签。这部分是做特征的转换操作,也就是将 ARM 部分的输出 feature map 转换成 ODM 部分的输入,这部分其实和 FPN 算法的特征融合很像,FPN 也是这样的 upsample 后融合的思想。

    主要贡献:

    (1)提出了一个新颖的一阶段框架用于目标检测,由两个相互连接的模块组成,即 ARM 和 ODM。性能比两阶段方法更好,同时保持一阶段方法的高效率。

    (2)为确保有效性,设计了 TCB 来传输 ARM 的特征,来处理更具挑战性的任务,即预测 ODM 中准确的对象位置、大小和类别标签。

    (3)实现了最新的 state-of-the-art 通用目标检测(PASCAL VOC 2007,PASCAL VOC 2012 和 MS COCO)。

     

    3.Network Architecture

     图 1 RefineDet 结构

           与 SSD 类似,RefineDet 基于前馈卷积网络生成 bounding boxes 和目标的不同类的预测分数,通过非最大值抑制来产生最终结果。RefineDet 由两个相互连接的模块组成,即 ARM 和 ODM。删除 VGG-16 和 ResNet-101 的分类层并添加辅助结构来构建 ARM,它们在 ImageNet 上进行了预训练来满足我们的需求。

           网络结构构建,以 ResNet101,输入图像大小为 320 为例,在 Anchor Refinement Module 部分的 4 个灰色矩形块(feature map)的 size 分别是 40*40,20*20,10*10,5*5,其中前三个是 ResNet101 网络本身的输出层,最后 5*5 输出是另外添加的一个 residual block。有了特征提取的主网络后,就要开始做融合层操作了,首先是 5*5 的 feature map 经过一个 transfer connection block 得到对应大小的蓝色矩形块(P6),transfer connection block 后面会介绍 ,对于生成 P6 的这条支路而言只是 3 个卷积层而已。接着基于 10*10 的灰色矩形块(feature map)经过 transfer connection block 得到对应大小的蓝色矩形块(P5),此处的 transfer connection block 相比 P6 增加了反卷积支路,反卷积支路的输入来自于生成 P6 的中间层输出。P4 和 P3 的生成与 P5 同理。

           因此,整体来看该网络和 two stage 的结构很像(都可以概括为 two-step cascaded regression),一个子模块做 RPN 的事,另一个子模块做 SSD 的事。因此 SSD 是直接在 default box 的基础上进行回归的,而在 RefineDet 中是先通过 ARM 部分生成 refined anchor boxes(类似 RPN 网络输出的 propsoal),然后在 refined anchor boxes 基础上进行回归,所以能有更高的准确率,而且得益于特征融合,该算法对于小目标物体的检测更有效。 

           以下解释 RefineDet 的三个核心组件:(1)传输连接块(TCB),传输 ARM 的特征到 ODM 进行检测; (2)两步级联回归,准确地回归物体的位置和大小; (3)负锚过滤,在早期拒绝分类良好的负锚,缓解类不平衡问题。

    Transfer Connection Block

    图 2 TCB 结构

           为了建立 ARM 和 ODM 的联系,我们引入 TCB 来将 ARM 中的特征图转换到 ODM 中,这样 ODM 可以共享 ARM 的特征。值得注意的是,从 ARM 中,我们只在与 anchors 有联系的特征图上使用 TCBs。 TCB 通过添加高级特征来整合大规模上下文,以改善检测精度。 要匹配它们之间的尺寸,我们使用反卷积操作来扩大高级特征图,并以元素方式对它们求和。 然后,我们在求和后添加卷积层以确保检测特征的可辨性。

    Two-Step Cascaded Regression
           目前的一阶段方法依靠基于具有不同尺度的特征图层的一步回归来预测位置和物体的大小,在某些场景中相当不准确,尤其是小目标检测。因此,我们提出了一个两步级联回归策略回归对象的位置和大小。我们先使用 ARM 调整 anchors 的位置和大小,为 ODM 中的回归提供更好的初始化。我们定期关联 n 个 anchor boxes 在特征图上划分单元格。最初的位置每个 anchor boxes 相对于其对应的单元是固定的。在每个特征映射单元格中,我们预测 refined anchors 的四个偏移量相对于原始 anchors 和指示前景存在的两个置信度分数。因此,我们可以在每个特征图单元格产生 n 个 refined anchors。获得 refined anchors 后,我们将其传到 ODM 相应的特征图中,进一步生成对象类别和准确的对象位置、尺寸。ARM 和 ODM 中相应的特征图具有相同的维度。我们计算 refined anchors 的 c 个类别分数和四个准确的偏移量,产生 c + 4 的输出以完成检测任务。此过程类似于 SSD 中的默认框。但是,与 SSD 不同,RefineDet 使用两步策略,即 ARM 生成 refined anchor boxes,ODM 采取其作为输入进一步检测,因此检测结果更精准,特别适用于小物体。

    Negative Anchor Filtering
        One-stage精度落后于 two-stage的一个主要原因是类别不平衡问题。为了解决这种问题,作者采用了 negative anchor过滤。在训练阶段,针对 ARM 中的 anchor,如果negative confidence大于一个阈值θ(θ=0.99,经验值),那么在训练 ODM 时将它舍弃。也就是通过hard negative anchor和 refined anchor 来训练 ODM。 与此同时,在预测阶段,如果 refined anchor box 负置信度大于θ,则在 ODM 进行检测时丢弃。

     

    4.Training and Inference

    Data Augmentation
           使用了几种数据扩充方法生成训练样本,来构建一个强大的模型来适应对象的变化,包括随机扩展,随机剪裁,随机光度失真和翻转。

    Backbone Network
          使用在 ILSVRC CLS-LOC 数据集上预训练的 VGG-16 和 ResNet-101 作为 RefineDet 中的骨干网络。RefineDet 也可以在其他预训练网络上工作,如 Inception v2 ,Inception ResNet 和 ResNeXt101。 与 DeepLab-LargeFOV 类似,通过子采样参数,将 VGG-16 的 fc6 和 fc7 转换成卷积层 conv_fc6 和 conv_fc7。与其他层相比,conv4_3 和 conv5_3 具有不同的特征尺度,所以使用 L2 正则化来扩展特征到 10 和 8 中,然后在反向传播中学习尺度。 同时,为了捕捉高层次多种尺度的信息和引导对象检测,还分别在剪裁的 VGG-16 和 ResNet101 的末尾添加了额外的卷积层(即 conv6_1 和 conv6_2)和额外的剩余块(即 res6)。

    Anchors Design and Matching
           处理不同的规模对象,在 VGG-16 和 ResNet101 上选择尺寸分别为 8,16,32 和 64 像素步幅大小的特征层,与几种不同尺度的 anchor 相关联进行预测。 每个特征图层都与一个特定特征 anchor 的尺度(尺度是相应层步幅的 4 倍)和三个比率(0.5,1.0 和 2.0)相关联。 我们遵循不同层上的 anchor 尺度设计,确保了不同尺度的 anchor 在图像上具有相同的平铺密度。 同时,在训练期间阶段,我们确定之间的对应关系基于 anchors 和 ground truth boxes 的 jaccard 重叠率(IoU),并端到端地训练整个网络。具体来说,我们首先将每个 ground truth boxes 与具有最佳重叠分数的 anchor boxes 相匹配,然后匹配 anchor 重叠高于 0.5 的任何 ground truth boxes。

    Hard Negative Mining
            关于正负样本界定的标准基本上和其他 object detection 类似,比如和 ground truth 的 IoU 超过阈值 0.5 的 box 为正样本,也就是 label 是 1。显然这样做后很多 box 的标签都是背景标签,也就是所谓的负样本,通过前面说的 ARM 部分可以过滤掉一些负样本,但接下来还是要采用类似 SSD 算法中的 hard negative mining 来设定正负样本的比例(一般设定为 1:3),当然负样本不是随机选的,而是根据 box 的分类 loss 排序来选的,按照指定比例选择 loss 最高的那些负样本即可。

    Loss Function
           损失函数方面主要包含 ARM 和 ODM 两方面。在 ARM 部分包含 binary classification 损失 Lb 和回归损失 Lr;同理在 ODM 部分包含 multi-class classification 损失 Lm 和回归损失 Lr。需要注意的是虽然本文大致上是 RPN 网络和 SSD 的结合,但是在 Faster R-CNN 算法中 RPN 网络和检测网络的训练可以分开也可以 end to end,而这里的训练方式就纯粹是 end to end 了,ARM 和 ODM 两个部分的损失函数都是一起向前传递的。 

    图 2 TCB 结构

          其中i表示一个 batch 中的第几个 anchor,l 表示anchor_i的 ground truth 的类别 ,g 表示anchor_i的 ground truth 位置和大小,p 表示置信度,x 表示 ARM 中 anchor 的坐标。c 表示预测类别,t 表示 ODM 中的预测框坐标信息。N_arm和N_odm分别表示 ARM 和 ODM 中的positive anchor数量。L_b表示二值分类损失(有目标 \ 没有目标),L_m表示多类别损失,L_r表示回归损失。[l>=1]就表示如果negative confidence大于一个阈值θ,那么返回 1,否则返回 0。如果N_arm=0,设置L_b=0 和L_r(x)=0;如果N_odm=0,那么设置L_m=0 和L_r(t)=0。

    Optimization
           用 “xavier” 方法随机初始化基于 VGG-16 的 RefineDet 的两个添加的卷积层中(conv6_1 和 conv6_2)的参数。对于基于 ResNet-101 的 RefineDet,绘制参数来自具有标准的零均值高斯分布,额外残余块(res6)的偏差为 0.01。 

    1.default batch size:32
    2.momentum:0.9(加速收敛)
    3.weight decay:0.0005(防止过拟合)
    4.initial learing rate:0.01
    5.different learning rate decay
    Inference
          在预测阶段,首先,ARM 过滤掉负置信度分数大于阈值θ的 anchors,refine 剩余 anchors 的位置和大小。然后, ODM 输出每个检测图像前 400 名高置信度的 anchors。 最后,应用 NMS,jaccard 重叠率限定为 0.45 ,并保留前 200 名高置信度 anchors,产生最终的检测结果。

    5.Experiments

    Table1

    Table1 是非常详细的实验结果对比,测试数据包括 VOC2007 和 VOC2012 数据集。以 VGG-16 为特征提取网络的 RefineDet320 在达到实时的前提下能在 VOC 2007 测试集上达到 80 以上的 mAP,这个效果基本上是目前看到过的单模型在相同输入图像情况下的最好成绩了。表格中最后两行在算法名称后面多了 +,表示采用 multi scale test,因此效果会更优一些。 

    6.Conclusion

    在本文中,提出了一种新的单次目标检测器,由两个相互连接模块组成,即 ARM 和 ODM。使用 multi-task loss 对整个网络进行 end-to-end 训练。在 PASCAL VOC 2007,PASCAL VOC 2012 和 MS COCO 数据集上进行了几次实验,结果表明 RefineDet 实现了目标最先进的检测精度和高效率。

           将来,计划使用 RefineDet 来检测一些其他特定类型的物体,例如行人,车辆和面部,并在 RefineDet 中引入注意机制以进一步改善性能。

    展开全文
  • 现有的目标检测器主要分为两种类型:两阶段(two-stage)和单阶段(one-stage)。这两种检测器的设计思想有很大的不同:两阶段检测器主要将检测问题归结为分类问题(classification),而单阶段检测器主要是将检测问题定义...

    现有的目标检测器主要分为两种类型:两阶段(two-stage)和单阶段(one-stage)。这两种检测器的设计思想有很大的不同:两阶段检测器主要将检测问题归结为分类问题(classification),而单阶段检测器主要是将检测问题定义为回归问题(regression)。不仅如此,两种检测器在时间、性能上也有一定的差距。接下来我将会沿着单阶段的主线,根据时间顺序,进一步了解单阶段检测器的发展。

    YOLO -> DenseBox -> SSD -> YOLO v2 -> Retina -> YOLO v3 -> CornerNet -> CenterNet -> AlignDet

    You Only Look Once: Unified, Real-Time Object Detection

    论文地址:1506.02640

    1. YOLO的优缺点(Pros and Cons)

    【从摘要(Abstract)和介绍(Introduction)】
    在这里插入图片描述

    • 优点
      • 速度快(fast):采用回归思想,无需产生区域提议(proposals),是一个端到端的模型
      • 利用全局信息(global):输入是整张图片(entire image),而不是图片其中的一部分(part)
      • 泛化能力(generalization):在非自然图片(natual image)如艺术作品领域(artwork),检测结果(results)较好
    • 缺点
      • 准确率不如两阶段检测器(accuracy behind):体现在定位(localization)不够准确,小目标(small object)检测难
      • YOLO在检测框的预测上有较强的空间限制(strong spatial constraints):一个网格单元预测两个检测框,并且一个网格单元内只能有一种类别预测。这导致模型缺乏对相邻的多个目标检测的能力,尤其是一大群小目标(small objects that appear in groups)
      • YOLO对新的或者不寻常(new or unusual)的纵横比、设置(configurations)的泛化能力较弱:因为模型是从数据中学习如何预测检测框,有一定的数据依赖性
      • 损失函数的设计有缺陷:对于大检测框与小检测框的错误一视同仁:对于某些小错误,在小检测框会对IOU有很大的影响,在大检测框上相对影响小一些。

    2. YOLO的设计思想(Design)

    YOLO 使用全图特征去预测检测框(bounding boxes)及其类别(classes)。与两阶段检测器的区域提议(region proposals)不同的是,YOLO不预先产生可能包含目标(objects)的区域(proposals),而是将一张图片分割成S x S的网格(grid),每个网格单元(cell)都可能包含目标,换句话说,这些网格单元便是YOLO给出的可能包含目标的区域。对于每个网格单元,如果目标的中心(center)落在其中,该网格便负责对该目标进行检测。
    在这里插入图片描述
    每个网格单元负责预测B个候选框及其对应的B个置信度(confidence scores), 此处置信度指网格单元包含目标及检测框预测准确的置信度(原文链接1),定义为 P r ( O b j e c t ) ∗ I O U p r e d t r u t h Pr(Object)*IOU_{pred}^{truth} Pr(Object)IOUpredtruth

    当预测的检测框(predicted boxes)中包含目标时, P r ( O b j e c t ) = 1 Pr(Object)=1 Pr(Object)=1,即置信度等于预测检测框与真实标注GT(ground truth)之间的IOU(intersection over union);当预测的检测框中不包含目标时, P r ( O b j e c t ) = 0 Pr(Object)=0 Pr(Object)=0,即置信度为0.

    原文链接1: These confidence scores reflect how confident the model is that the box contains an object and also how accurate it thinks the box is that it predicts.

    每个检测框包含五个预测值: x , y , w , h , c o n f i d e n c e x, y, w, h, confidence x,y,w,h,confidence。其中 ( x , y ) (x, y) (x,y)是该检测框与负责它的网格单元边界的相对坐标(relative coordinates / offset), w , h w, h w,h是该检测框与原图长宽的相对值,即 x , y , w , h x,y,w,h x,y,w,h都是在(0, 1)。 c o n f i d e n c e confidence confidence是上文提到的置信度。

    每个网格单元除了预测B个候选框,还预测C个类别条件概率(conditional class probabilities),定义为 P r ( C l a s s i ∣ O b j e c t ) Pr(Class_i|Object) Pr(ClassiObject)。需要注意的是,虽然每个网格单元预测B个候选框,但是只预测一组C个类别的条件概率。

    在测试阶段,通过将类别条件概率与检测框预测的置信度进行乘积可以得到每个检测框的类别置信度(class-specific confidence scires),此处的置信度指该预测是该类及检测框合适的置信度(原文链接2)

    原文链接2: These scores encode both the probability of that class appearing in the box and how well the predicted box fits the object.

    在PASCAL VOC数据集上,作者设置S = 7, B = 2,C = 20,所以最后YOLO输出的预测结果是 7x7x(2x5+20) = 7x7x30。

    2.1 网络的设计

    在这里插入图片描述
    论文中提出了两种版本:YOLO (45 FPS)与 Fast YOLO (155 FPS)

    • YOLO:24 layers + 2 FC
    • Fast YOLO: 9 layers + 2 FC (fewer filters)
      除了以上区别,训练、测试的所有参数YOLO和Fast YOLO是一致的。

    作者对模型的训练模式:预训练(pretrain) + 微调(finetune)

    • 预训练:取Figure 3中的前20层+1 平均池化(average pooling)+1全连接层(fully connected layer)
    • 微调:取预训练模型的前20层+4层卷积层(convolutional layers)+2 全连接层 (新添加的层是随机初始化参数),有篇研究认为这样可以提升性能(详见原文链接3)

    原文链接3: Ren etal. show that adding both convolutional and connected layers to pretrained networks can improve performance.

    因为目标检测任务需要更细粒度 (fine-grained)的视觉信息,所以作者将输入的图片尺寸从 224x224 增加到448x448。

    对于激活函数(activation),YOLO最后一层(final layer)使用的是线性激活函数,其他层使用的是Leaky ReLU(leaky rectified linear activation)
    ϕ ( x ) = { x ,  if  x > 0 0.1 x ,  otherwise  \phi(x)=\left\{\begin{array}{ll} {x,} & {\text { if } x>0} \\ {0.1 x,} & {\text { otherwise }} \end{array}\right. ϕ(x)={x,0.1x, if x>0 otherwise 

    对于损失函数(loss fucntion),YOLO使用易于优化的平方和误差(sum square error, SSE)。不过需要考虑的是:

    • 赋予定位误差(localization error)和分类误差(classification error)以不同的权重
    • 增加包含目标的预测检测框坐标的损失(coordination prediction loss),减少不包含目标的预测检测框置信度的损失:网格单元大多数不包含目标,这些单元预测的置信度为0,对模型的学习不会产生太大的帮助,即无效梯度(原文链接4),会导致模型的不稳定(instablity)。
    • 大检测框(large boxes)与小检测框(small boxes)的预测损失应当不一致:在小检测框里的小改变(small deviation)应当比大检测框里的小改变更重要(原文链接5)

    原文链接4: Also, in every image many grid cells do not contain any object. This pushes the “confidence” scores of those cells towards zero, often overpowering the gradient from cell that do contain objects. This can lead to model instability, causing training to diverge early on.
    原文链接5: Our error metric should reflect that small deviations in large boxes matter less than in small boxes. To partially address this we predict the square root of the bounding box width and height instead of the width and height directly.

    作者通过引入两个参数来解决优化时遇到的前两个问题: λ c o o r d = 5 , λ n o o b j = 0.5 \lambda_{coord}=5,\lambda_{noobj}=0.5 λcoord=5,λnoobj=0.5,通过预测检测框长宽的平方根来进一步减少第三个问题对模型训练的影响 (partially address),即并没完全解决这个问题。

    回到训练时预测的检测框,YOLO规定每个网格单元产生的B个检测框中与标注(GT)之间的IOU最大的检测框,将负责该目标的检测。这样做的好处是可以使得检测框的预测更加专业(specialization),能够更好的预测特定大小(size),特定纵横比(aspect ratio),特定类别(class)的目标,从而提升召回率(原文链接6)。

    原文链接6: We assign one predictor to be responsible for each object. We assign one predictor to be “responsible” for predicting an object based on which prediction has the highest current IOU with the ground truth. This leads to specialization between the bounding box predictors. Each predictor gets better at predicting certain sizes, aspect ratio, or classes of objects, improving overall recall.

    所以,最终优化的损失函数如下:
    在这里插入图片描述

    2.2 训练细节

    • 数据集: Pascal VOC 2007 + 2012 train set && val set
    • 迭代周期(epochs): 135 epochs
    • 学习率(learning rate schedule) : 在第一个epoch,学习率从 1 0 − 3 10^{-3} 103缓缓提升到 1 0 − 2 10^{-2} 102,然后以 1 0 − 2 10^{-2} 102再训练74个epochs,接着用 1 0 − 3 10^{-3} 103训练30个epochs,最后用 1 0 − 4 10^{-4} 104训练30个epochs,一共135个epochs。一开始如果以较高的学习率可能会导致模型因为不稳定的梯度(unstable gradient)出现偏离(diverges),所以在第一个epoch设置了学习率的热身(warm-up)。
    • 批大小(batch size):135
    • 动量(momentum):0.9
    • 权重衰减(weight decay):0.0005
    • dropout层放在第一个全连接层之后,用于避免层间协同适应(co-adaptation)
    • 数据增强(data augmentation):(1)随机尺度(random scales) 和 平移(translation),平移的最大距离是原图片尺寸的20%;(2)通过HSV颜色空间(color space)随机调整曝光值(exposure)和饱和度(saturation),最大调整比例为1.5

    2.3 预测细节

    在Pascal VOC上,YOLO对于一张图片预测98 (7x7x2) 个检测框,并为每个检测框产生一组类别概率 (训练中是给每个网格单元生成一组类别概率而不是为每个检测框产生一组)

    对于一些大目标(large objects)或者靠近(near)多个网格单元边界(border)的目标会被多个网格单元定位(localize),从而产生重叠的检测(multiple detections)。作者采用非极大值抑制(Non-maximal supression, NMS)的方法去解决这个问题,可以提升(adds) 2~3% mAP。

    3. 实验部分

    • 与其他实时(real-time)、接近实时(less than real-time)检测器的对比:

    YOLO是当时实时检测器中性能最好的,甚至Fast YOLO的性能是其他实时检测器的两倍。但是与两阶段检测器相比,还是有些许性能的差距。
    在这里插入图片描述

    • VOC 2007 错误分析(error analysis)

    论文中定义了五类错误:

    Correct: correct class && IOU >.5
    Localization: correct class && .1 < IOU < .5
    Similar: class is similar, IOU > .1
    Other: class is wrong, IOU > .1
    Background: IOU < .1 for any object

    从下图不难发现,YOLO在定位上(localization)上逊色于Fast R-CNN,但在假阳性(False Positive,FP)样本上的错误更少,这意味着YOLO将背景类识别成目标的比例要低于Fast R-CNN。
    在这里插入图片描述

    • 结合Fast R-CNN 和 YOLO

    从上文的VOC 2007 错误分析,不难发现Fast R-CNN与YOLO可以进行优势互补。分别训练两个模型进行预测,对于二者预测相似的检测框,根据YOLO给出的概率(probability)和两个检测框的交叠(overlap)对预测进行改进(boost)。也就是将两个模型的结果进行融合(combination),在速度上并没有什么增益。
    在这里插入图片描述

    • Pascal VOC 2012的结果
      在这里插入图片描述
    • 泛化性:艺术作品中人物检测

    艺术作品(artwork)与自然图片(natural image)在像素层面上(pixel level)上有很大的不同,但在目标的大小(size)和形状(shape)方面相似,这也是YOLO为何能做出预测的可能解释。
    在这里插入图片描述

    4. 总结

    YOLO是非常经典的单阶段检测器,首先它采用回归思想实现端到端训练的目标检测器,大大减少了模型的训练时间;其次,通过全图的特征去预测检测框和类别,而不去产生区域提议,大大提升了模型的检测速度。


    下面推荐一篇解析YOLO不错的文章:
    目标检测|YOLO原理与实现


    展开全文
  • one-stage目标检测概述

    2019-04-27 10:07:36
    本文翻译自One-shot object detection,原作者保留版权。 作为计算机视觉领域的一项重要任务,目标检测是要找到一张图片里的感兴趣物体: 这比图像分类任务更高级,因为分类只需要告诉图像中主要物体是什么,...
  • one-stage之自定义层

    2019-08-14 15:09:10
    keras 提供众多常见的已编写好的层对象,例如常见的卷积层,池化层等,我们可以直接通过代码调用,keras中的层大致上分为两种类型 第一种是带有训练参数的,比如Dense层,Conv2D层等等,我们在训练的过程中需要训练层的...
  • 目标检测(二)------ one stage(YOLO)

    千次阅读 2019-08-18 23:06:55
    每个单元格给出Bounding box值和置信度时,还需给出每个网格存在物体的类型。(每个单元格只能预测一种物体类别) P r ( C l a s s i ∣ O b j e c t ) Pr(Class_i|Object) P r ( C l a s s i ​ ∣ O b j e c t )...
  • FCOS: Fully Convolutional One-Stage Object Detection &Summary 本文提出了一种全卷积one-stage目标检测算法(FCOS),以逐像素预测的方式解决目标检测问题,类似于语义分割。目前最流行的不论是one-stage...
  • One_Stage检测网络如SSD,YoLOv2等,是多任务学习,网络的输出不仅为对图中感兴趣的类别预测还要输出他们的位置,也许还有置信度。如果图中只有个1个物体也许还容易些,但如果一张图中有多个...
  • 本文翻译自One-shot object detection,原作者保留版权。 作为计算机视觉领域的一项重要任务,目标检测是要找到一张图片里的感兴趣物体: 这比图像分类任务更高级,因为分类只需要告诉图像中主要物体是什么,...
  • Title: You Only Look ...two-stageone-stage 方法的区别:检测系统的目标是输出物体位置和类别,R-CNN 把位置和类别分成两个阶段,第二阶段使用了分类器;YOLO 用一个网络同时输出位置和类别,使用的是回归方法...
  • anchor-based detector的检测效果严重依赖于预先设定好的anchor类型. 对anchor进行微调, 可以在coco上得到将近4%左右的performance提升, 而这个微调过程又是特别麻烦. 因为anchor是预先设定好的, 所以它能检测到的...
  • Stage2--Python的数据类型

    千次阅读 2016-07-23 11:43:19
    变量的本质是内存中一段存储空间(大小由数据类型决定),变量名和这段存储空间的地址发生关联。 基于变量的数据类型,解释器会分配指定内存,并决定什么数据可以被存储在内存中。变量可以指定不同的数据类型,这些...
  • 本文翻译自One-shot object detection,原作者保留版权,略有删减。 数据 有很多常用的目标检测训练数据集,如Pascal VOC, COCO, KITTI。这里我们关注Pascal VOC,因为它是最常用的,并且YOLO使用了它。 VOC数据集...
  • 设计的平衡权重是手工选取的超参数,并不能很好的适应于不同类型的数据集。 本文认为,分类任务和检测任务之间的鸿沟阻碍了单阶段目标检测器的性能提升,本文并未从分类损失函数的修正上着手,而是直接使用排序...
  • 即认为越是靠近目标中心点的那些点的预测框质量高,离中心点较远的点的预测会被抑制,然后NMS时候这些框会被筛掉,没有这个centerness map时,FCOS是比不上RetinaNet的,加上之后,FCOS是可以超过onestage的基于...
  • 本文翻译自One-shot object detection,原作者保留版权,略有删减。 作为计算机视觉领域的一项重要任务,目标检测是要找到一张图片里的感兴趣物体: 这比图像分类任务更高级,因为分类只需要告诉图像中主要物体是...
  • 目录 论文解读之: Towards Accurate One-Stage Object Detection with AP-Loss 写在前面 贡献 AP损失函数 优化算法 训练细节 总结 论文解读之: Towards Accurate One-Stage Object Detection with AP-Loss 这篇...
  • 设计的平衡权重是手工选取的超参数,并不能很好的适应于不同类型的数据集。 本文认为,分类任务和检测任务之间的鸿沟阻碍了单阶段目标检测器的性能提升,本文并未从分类损失函数的修正上着手,而是直接使用排序...
  • 自上而下的算法目前在目标检测领域占据主导地位,常用的做法是将目标检测任务转化为矩形区域分类任务,如one stage检测和two stage检测。然而,矩形框(box)并不是一个比较好的对象表示,主要有一下三个缺点: ...
  • Figure2是关于用两种不同类型图像作为输入时模型的预测结果对比,模型是基于标准的YOLO v2进行训练的。左边是直接将原图缩小到416416大小,结果模型一个汽车目标都没有检测出来。右边是从原图中裁剪出416416大小的...
  • One-stage object detection在模型训练过程中之中面临着样本分布严重不均衡的问题。梯度分布上看待样本数量和难易不均衡。直接把cross entropy产生的gradient distribution标准化到uniform就可以轻松训练单阶段物体...
  • 论文:《 Improving Object DetectionWith One Line of Code 》 论文下载:https://arxiv.org/abs/1704.04503 论文代码:https://github.com/bharatsingh430/soft-nms 算法解读: NMS(Non maximum suppression...
  • 【Spark】Stage生成和Stage源码浅析

    千次阅读 2015-07-15 22:00:58
    引入上一篇文章《DAGScheduler源码浅析》中,介绍了handleJobSubmitted函数,它作为生成finalStage的重要函数存在,这一篇文章中,我将就DAGScheduler生成Stage过程继续学习,同时介绍Stage的相关源码。Stage生成...
  • 引入 上一篇文章...这一篇文章中,我将就DAGScheduler生成Stage过程继续学习,同一时候介绍Stage的相关源代码。 Stage生成 Stage的调度是由DAGScheduler完毕的。由RDD的有向无环图DAG切分出了Stage...
  • Stage 的划分在 RDD 的论文中有详细的介绍,简单的说是以 shuffle 和 result 这两种类型来划分。 在 Spark 中有两类 task: shuffleMapTask 输出是shuffle所需数据, stage的划分也以此为依据,shuffle及...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 12,497
精华内容 4,998
关键字:

onestage类型