精华内容
下载资源
问答
  • 目标检测
    万次阅读
    2021-11-25 14:04:31

    深度学习中,为了提高模型的精度和泛化能力,往往着眼于两个方面:(1)使用更多的数据(2)使用更深更复杂的网络。

    **
    一、什么是负样本

    **
    负样本是指不包含任务所要识别的目标的图像,也叫负图像(Negtive Image)。以识别限速牌为例,如下所示,左图包含限速牌,为正样本,右图不包含限速牌,为背景图,即负样本。

    正样本

    负样本

    2.为什么要训练负样本

    训练负样本的目的是为了降低误检测率、误识别率,提高网络模型的泛化能力。通俗地讲就是告诉检测器,这些“不是你要检测的目标”。

    3.Faster R-CNN、SSD、YOLO等神经网络模型中的负样本

    例如在Faster R-CNN中,在RPN阶段,会根据backbone生成的特征图上的每一点,按照不同尺寸、不同长宽比构建很多的候选锚框。这些锚框按照与Ground Truth box的交并比,选择特定阈值进行分类,比如IOU>0.7的锚框,被视为正锚框,也就是正样本,IOU<0.3的被视为负锚框,也就是负样本。通常负样本的数量会远远超过正样本,因此为了平衡类别比例,提高模型精度,常通过Focal Loss方法或hard example mining算法来恰当地利用正、负样本计算Clasification Loss与regresion Loss,并进行反向传播。因此网络模型中的负样本与负图像是不一样的,不能完全同等看待。

    4.如何收集负样本

    可以通过下面两种方式收集负样本:

    采用本任务场景的不包含目标物体的背景图像,例如你的目标是识别某园区内的行人,那么所有本园区内不包含行人的图片都视作负样本。不要使用不属于本任务场景的负图像,因为其对检测器的性能影响不大。
    测试图像中被识别错误的目标所在区域。(通常对原图像进行裁剪,使得裁剪下来的图像只包含误识别的物体,而不包含目标)

    5.负样本的标签文件

    用于目标检测任务的标签通常是xml文件,在xml文件中没有目标位置相关的节点,只有文件名,文件路径、图片宽度、高度、通道数等信息,这就是负样本的标签文件。关于负样本的标签文件的生成方式,可以参考博客:https://blog.csdn.net/dulingwen/article/details/89669928

    6.如何训练负样本

    将正负样本集及其标签作为训练集送入模型训练即可。

    注意:正负样本必须放在一起训练,不能单独训练负样本,否则经过训练,网络会把所有的图像都识别为背景。正负样本的比例最好为1:1到1:2左右,数量差距不能太悬殊,特别是正样本数量本来就不太多的情况下。

    尝试方法一:直接对误检的图像生成一个空的xml文件。(文件中没有任何对象)
    训练结果:由于xml文件中没有任何正样本对象,所以网络无法学习到背景信息,使用训练后的模型测试误检的图像,依然会产生误检。(这里网上有人说即使没有正样本,SSD网络在训练时也会产生负样本,本人测试,当整幅图像没有任何正样本时,网络学习不到任何信息,训练时loss=0)

    尝试方法二:误检的图像中含有正样本对象,但不是误检的类别。(例如:该图像中人物类别出现误检,但对该图像进行训练时只标注了一个汽车类别,而没有增加人物的正样本类别)
    训练结果:这种情况下,对网络进行训练时,会产生loss,并且训练后的模型,不会再把误检图像中的背景误检为人物。

    7.怎样消除误检——加强检测器

    把使用正样本训练好的模型拿来进行测试,此时会得到一些被错误识别的图片。把这些图片收集起来作为负样本加入到正样本集(如果图片中同时包含误识别物体和目标,可以将图像裁剪,裁剪后的图像包含误识别物体而不包含目标并尽量覆盖原图大部分区域,然后再将其分辨率resize回原图大小),组成新的训练集,送入模型进行训练。
    如果负样本的来源只有误识别的图片,那么由于误识别的图片往往占少数,可以利用图像增强(如高斯滤波、对比度增强、锐化、平滑等)的方法扩充负图像数量至和正样本数量相同,并组合在一起。将这样得到的训练集送入模型进行训练,经过若干个epoch,当Loss收敛到稳定值时,再次测试原来的出现误识别的图像你会发现误识别现象基本消失了,并且类似原来误识别的场景将会被正确识别。

    下面是扩充负样本数量的代码:

    import cv2
    from imgaug import augmenters as iaa
    import numpy as np
    import os
     
    imgdir = '/home/dulingwen/Pictures/pic1/'
    imgsave_dir = '/home/dulingwen/Pictures/pic2/'
     
    #do the gaussian blur transform
    BLUR_ARG = 2
    for i_blur in range(100*BLUR_ARG):
        for jpgfile in os.listdir(imgdir):
            jpgname = os.path.splitext(jpgfile)[0]
            img = cv2.imread(imgdir + jpgname + '.jpg')
            blurer = iaa.GaussianBlur(i_blur/100)
            img_aug = blurer.augment_image(img)
            cv2.imwrite(imgsave_dir + jpgname + '_blur_' + str(i_blur) + '.jpg', img_aug)
     
    #sharp the images in different arguments of alpha and lighness
    ALPHA = np.linspace(0,0.5,20)
    LIGHTNESS = np.linspace(0.5,1.25,20)
    for i_alpha in ALPHA:
        for i_lightness in LIGHTNESS:
            for img_file in os.listdir(imgdir):
                img_name = os.path.splitext(img_file)[0]
                img = cv2.imread(imgdir+img_name+'.jpg')
                sharp = iaa.Sharpen(alpha=i_alpha, lightness=i_lightness)
                img_aug = sharp.augment_image(img)
                cv2.imwrite(imgsave_dir + img_name+ '_sharp_' + str(int(10000*i_alpha)) + '_' + str(int(10000*i_lightness)) + '.jpg', img_aug)
     
    

    二、解决目标检测中的难分样本(漏检测与误检测问题)

    1、SRGAN

    论文题目:Photo-Realistic Single Image Super-Resolution Using a Generative Adversarial
    论文链接:https://arxiv.org/abs/1609.04802
    论文代码:https://github.com/JustinhoCHN/SRGAN_Wasserstein
    超分辨率重建就是将低分辨率图像恢复成对应的高分辨率图像。但是由于低分辨率图像信息的缺失,这是一个病态的求逆问题尤其是在恢复的倍数较高的时候。传统的方法考虑加入一些先验信息以恢复高分辨率图像(如插值法)还有基于回归方法的随记森林也可以用于超分问题稀疏学习,CNN在超分上也取得了非常好的效果,特别是CNN,使得超分已经可以达到实时应用。
    作者用sub-pixel网络作为生成网络,用VGG作为判别网络构建GAN得到了非常好的结果,但这个用的是逐像素差作为损失函数。之后作者尝试了自己提出的感知损失函数作为优化目标,虽然PSNR和SSIM不高,但是视觉效果都要优于其他网络,避免了其他方法的过度平滑的特性。
    主要有两点:
    提出的SRResNet取得了state-of-art的结果,将感知损失引入GAN,实现了4倍超分辨率重建。

    2、ASDN

    论文题目:Hard Positive Generation via Adversary for Object Detection
    论文地址:https://arxiv.org/pdf/1704.03414.pdf
    论文代码:https://github.com/xiaolonw/adversarial-frcnn
    ASDN网络使用RoI池层提取的功能作为输入图像补丁。 ASDN网络比预测遮挡/退出掩码,然后将其用于丢弃特征值并传递到Fast-RCNN的分类塔。对抗空间丢弃网络(ASDN),它学习如何封闭给定的目标,使得FRCN难以对其进行分类。我们在本文中考虑的第二种类型的生成是变形。在这种情况下,我们提出了对抗空间变换网络(ASTN),它学习如何旋转物体的“部件”,使其难以被检测器识别。通过与这些网络的竞争和克服障碍,FRCN学会以鲁棒的方式处理物体遮挡和变形。请注意,所提出的网络ASDN和ASTN在训练期间与FRCN一起同时学习。联合训练能防止检测器对固定生成的特征产生过拟合。
    相比于在输入图像上产生遮挡和变形,我们发现在特征空间上的操作更有效率。因此,我们设计对抗网络来修改特征,使目标变得更难识别。请注意,这两个网络仅在训练过程中应用才能改进检测器。我们将首先单独介绍ASDN和ASTN,然后在统一的框架中将它们组合在一起。在RoI-pooling层之后获得每个前景目标候选区域的卷积特征。我们使用这些基于区域的特征作为对抗网络的输入。对于一个目标的特征,ASDN将尝试生成一个掩码,指示要丢弃的特征的哪些部分(分配零),以便检测器无法识别目标。对抗空间变换网络(ASTN)
    我们现在介绍对抗空间变换网络(ASTN)。我们的关键思想是在目标特征上创建变形,并使检测器的目标识别变得困难。我们的网络建立在[14]中提出的空间变换网络(STN)上。 在他们的工作中,STN被提出来使特征变形,使分类更容易。而我们的网络正在完成相反的任务。通过与我们的ASTN网络竞争,我们可以训练一个更好的对变形具有鲁棒性的检测器。
    STN概述。空间变换网络[14]有三个部分:定位网络,网格生成器和采样器。对于输入的特征图,定位网络将估计要变形的量(例如,旋转度,平移距离和缩放因子)。这些变量将被用作在特征图上的网格生成器和采样器的输入。输出是变形的特征图。请注意,我们只需要了解定位网络中的参数。STN的关键贡献之一是使整个过程是可微分的,从而可以通过反向传播直接优化分类目标的定位网络。有关更多技术细节,请参阅[14]。
    对抗STN。在我们的对抗空间变换网络中,我们专注于特征图旋转。也就是说,在RoI-pooling层后给出了一个特征图作为输入,我们的ASTN将学习旋转特征图,使其更难识别。我们的定位网络由3个完全连接的层组成,其中前两层使用来自ImageNet预训练网络的fc6和fc7层进行初始化,就像我们的对抗空间丢弃网络一样。
    我们共同训练ASTN和Fast-RCNN检测器。对于训练检测器,类似于ASDN中的过程,RoI-pooling之后的特征首先由ASTN进行转换,并转发到较高层以计算SoftMax损失。为了训练ASTN,我们优化它以便检测器将前景目标分类为背景类。与ASDN不同,由于空间变换是可以微分的,我们可以直接使用分类损失来对ASTN的定位网络中的参数进行回溯和微调。
    实现细节。在我们的实验中,我们发现限制ASTN的旋转度非常重要。否则,很容易将目标上下颠倒,这在大多数情况下是最难识别的。我们将旋转度限制在顺时针和逆时针10度以内。相比于沿同一方向旋转所有特征图,我们将通道尺寸上的特征图划分为4个块,并为不同的块估计4个不同的旋转角度。由于每个通道对应于一种类型的激活特征,旋转通道分别对应于导致变形的不同方向的物体的旋转部分。我们还发现,如果我们对所有特征图使用一个旋转角度,ASTN将经常预测最大的角度。通过使用4个不同的角度而不是一个,我们增加了任务的复杂性,防止网络预测琐碎的变形。

    2.3 对抗融合
    两个对抗网络ASDN和ASTN也可以在同一个检测框架中组合在一起并联合训练。由于这两个网络提供不同类型的信息。通过同时竞争这两个网络,我们的检测器变得更加健壮。
    我们将这两个网络以顺序的方式组合到Fast-RCNN框架中。 如图4所示,在RoI-pooling之后提取的特征映射首先进入到我们的ASDN,ASDN会删除一些激活值。修改后的特征由ASTN进一步变形。
    ASDN分析。我们比较我们的对抗空间丢弃网络与使用AlexNet架构的训练中的各种丢弃/遮挡策略。我们尝试的第一个简单基线是RoI-Pooling后的特征的随机空间丢弃。为了公平的比较,我们屏蔽了与ASDN网络中相同数量神经元的激活值。如表2所示,随机丢失的表现为57.3%mAP,略好于基线。我们比较的另一个丢弃策略是我们在训练ASDN时应用的类似策略(图3)。我们详细列举了不同种类的遮挡,并在每次迭代中选择最好的遮挡进行训练。表现为57.7%的mAP(Ours(hard dropout)),略好于随机丢弃。

    我们发现穷举策略只能探索非常有限的遮挡策略空间,我们使用预先训练的ASDN网络来代替它。然而,当我们固定ASDN的参数时,我们发现性能是57.5%的mAP(Ours(fixed ASDN)),这不如穷尽的策略。原因是固定的ASDN没有收到更新Fast-RCNN的任何反馈,而详尽的搜索得到了反馈。如果我们一起共同学习ASDN和Fast-RCNN,我们可以获得58.5%的mAP,与没有丢弃策略的基线相比,mAP提高1.5%。这个证据表明,ASDN和Fast-RCNN的共同学习是有所不同的。

    ASTN分析。我们将对抗空间变换网络与目标候选区域的随机抖动进行了比较。增强包括对Fast-RCNN进行训练的尺寸的随机变化,纵坐标和旋转。使用AlexNet,使用随机抖动的性能为57.3%mAP,而ASTN结果为58.1%。使用VGG16,随机抖动有68.6%mAP而ASTN有69.9%mAP。对于这两种架构,ASTN的模型比随机抖动更好。
    简单的阅读OHEM
    论文代码:https://github.com/abhi2610/ohem

    三、小目标检测

    小目标有两种定义方式,一种是相对尺寸大小,如目标尺寸的长宽是原图像尺寸的0.1,即可认为是小目标,另外一种是绝对尺寸的定义,即尺寸小于32*32像素的目标即可认为是小目标。
    小目标检测在深度学习卷积神经网络模型中一直是一个难题。早期的目标检测框架大多数是针对通用的目标来进行检测,如经典的单阶段方法yolo和ssd,两阶段方法faster-rcnn等,这些方法主要是针对通用目标数据集来设计的解决方案,因此对于图像中的小目标来说,检测效果不是很理想。
    为了解决小目标问题提出的方法有:

    图像的缩放。也是最琐碎的一个方向——是在检测前对图像进行缩放。但是,由于大图像变得太大,无法装入GPU进行训练,因此单纯的升级并不有效。ao等[2017]首先下采样图像,然后利用强化学习训练基于注意力的模型,动态搜索图像中感兴趣的区域。然后对选定的区域进行高分辨率的研究,并可用于预测较小的目标。这避免了对图像中每个像素进行同等关注分析的需要,节省了一些计算成本。一些论文[Dai等,2016b,2017年,Singh和Davis, 2018年]在目标检测上下文中训练时使用图像金字塔,而[Ren et al., 2017]在测试时使用。

    浅网络。小物体更容易被接受场较小的探测器预测。较深的网络具有较大的接受域,容易丢失关于较粗层中较小对象的一些信息。Sommer等[2017b]提出了一种非常浅的网络,只有四个卷积层和三个完全连接的层,用于检测航空图像中的目标。当期望的实例类型很小时,这种类型的检测器非常有用。但是,如果预期的实例具有不同的大小,则效果更好
    上下文信息。利用围绕小对象实例的上下文。Gidaris和Komodakis [2015], Zhu等[2015b]使用上下文来提高性能,Chen等[2016a]则专门使用上下文来提高小对象的性能。他们使用上下文补丁对R-CNN进行了扩展,与区域建议网络生成的建议补丁并行。Zagoruyko等人[2016]将他们的方法与深度掩模对象建议相结合,使信息通过多条路径流动。

    超分辨率。还有针对小目标的图像增强等。最典型的是利用生成对抗性网络选择性地提高小目标的分辨率。
    它的生成器学会了将小对象的不佳表示增强为超分辨对象,这些超分辨对象与真实的大对象非常相似,足以欺骗竞争的鉴别器。
    近两年提出了利用多层特征图的方法(特征金字塔、RNN思想、逐层预测),对小目标检测的效果产生了显著的提升。
    现阶段主流算法有:
    图像金字塔:较早提出对训练图片上采样出多尺度的图像金字塔。通过上采样能够加强小目标的细粒度特征,在理论上能够优化小目标检测的定位和识别效果。但基于图像金字塔训练卷积神经网络模型对计算机算力和内存都有非常高的要求。计算机硬件发展至今也难有胜任。故该方法在实际应用中极少。
    逐层预测:该方法对于卷积神经网络的每层特征图输出进行一次预测,最后综合考量得出结果。同样,该方法也需要极高的硬件性能。
    特征金字塔:参考多尺度特征图的特征信息,同时兼顾了较强的语义特征和位置特征。该方法的优势在于,多尺度特征图是卷积神经网络中固有的过渡模块,堆叠多尺度特征图对于算法复杂度的增加微乎其微。

    RNN思想:参考了RNN算法中的门限机制、长短期记忆等,同时记录多层次的特征信息(注:和特征金字塔有本质区别)。但RNN固有的缺陷是训练速度较慢(部分操作无法矩阵化)

    四:Q&A

    问:我觉得博客中有些地方说得不对,我谈下我的个人理解:对正负样本来说,可以理解成是从原始图片中进行截图获得的。并不需要单独去造什么负样本。---原始图片中会截出很多图片,也就是所谓的锚框。然后将锚框截图出来,这些截图会与GT(也就是标注框的区域的图片)计算IOU,IOU大于0.7的,视为正样本,IOU小于0.3的视为负样本,介于两个阈值之间的图片就被丢弃。对IOU小于0.3的截图而言,由于IOU过小,则会被视为并不包含目标物体(即使边角落处有,也是被忽视的)。 因此,我们正常进行标注,提供完整的xml和图片即可。模型在训练过程中,会自行挑选相应数量的正负样本,而不必人为去构造。 如果我理解有误,还请大佬指点下~~

    答:直接拿原本的数据集可能会存在误识别的场景中的负样本无法学习到。拿人脸识别来说,在一个动漫的测试样本中发生误识别时,是很难从原先数据集中学习到负样本的,即很难找到有人脸和动漫脸都存在的样本,所以增加负样本训练是降低误识别必要的

    问:我觉得这边博主这边说的“负样本”指的是(以行人检测为例,图中原本没有任何人,但是拿训练好的模型去测试,检测结果中存在预测边界框)。对于这种误检测应该采取什么样的处理方式? 博主在上面也提到过直接拿这种图片来训练时,损失为0。主要是因为根据@lmw0320提到的正负样本的定义上。因为图中并不存在着gt boxes。因此这边所有的图都被当成ignore的样本来看待。直接训练根本没有办法处理当前的这个问题。

    答:说的没错

    问:“正负样本的比例最好为1:1到1:2左右”博主,请教一下,对于一个目标检测模型来说。正样本:负样本中的正样本数目,是所有类别的数据总量还是单个类别的数据量?

    答:无

    问:我一直没搞明白,对于目标检测算法,最终模型误检率高算是欠拟合还是过拟合?

    答:都有看LOSS

    答:都有

    参考:
    目标检测(降低误检测率及小目标检测系列笔记)_Z.w.j的博客-CSDN博客

    更多相关内容
  • YOLOv5实战垃圾分类目标检测

    千人学习 2021-06-13 23:16:02
    YOLOv5是目前流行的强悍的目标检测技术。本项目采用YOLOv5实现垃圾分类目标检测。利用超万张已标注目标检测数据集进行训练,对居民生活垃圾图片进行检测,找出图片中属于哪个类别的垃圾,并指示出在图片中的位置。 ...
  • 当前,人脸口罩佩戴检测是急需的应用,而YOLOv4是新推出的强悍的目标检测技术。本课程使用YOLOv4实现人脸口罩佩戴的实时检测。课程提供超万张已标注人脸口罩数据集。训练后的YOLOv4可对真实场景下人脸口罩佩戴进行...
  • PyTorch版的YOLOv5是轻量而高性能的实时目标检测方法。利用YOLOv5训练完自己的数据集后,如何向大众展示并提供落地的服务呢?    本课程将提供相应的解决方案,具体讲述如何使用Web应用程序框架Flask进行...
  • YOLOv5是最近推出的轻量且高性能的实时目标检测方法。YOLOv5使用PyTorch实现,含有很多业界前沿和常用的技巧,可以作为很好的代码阅读案例,让我们深入探究其实现原理,其中不少知识点的代码可以作为相关项目的借鉴...
  • 课程演示环境:Ubuntu 需要学习Windows系统YOLOv...请持续关注该系列的其它视频课程,包括: 《YOLOv4目标检测实战:人脸口罩佩戴识别》 《YOLOv4目标检测实战:中国交通标志识别》 《YOLOv4目标检测:原理与源码解析》
  • YOLOv5目标检测实战:Jetson Nano部署

    千人学习 2021-04-06 21:07:52
    PyTorch版的YOLOv5是高性能的实时目标检测方法。Jetson Nano是英伟达含有GPU的人工智能硬件。本课程讲述如何部署YOLOv5在Jetson Nano开发板上。部署完成后可进行图像、视频文件和摄像头视频的实时目标检测。部署时...
  • 目标检测研究综述

    千次阅读 2022-03-23 10:49:40
    2、目标检测模型与发展(对比) 2.1 传统目标检测模型与发展 (1) Viola Jones检测器 (2) HOG 检测器 (3) 基于可变形部件的模型(DPM) 2.2 基于深度学习目标检测模型与发展 2.2.1基于卷积神经网络的单级...

     

    1、国内外研究现状

    1.1 传统物体检测识别的研究现状

    1.2 基于深度学习物体检测识别的研究现状

    2、目标检测模型与发展(对比)

    2.1 传统目标检测模型与发展

    (1) Viola Jones检测器

    (2) HOG 检测器

    (3) 基于可变形部件的模型(DPM)

    2.2 基于深度学习目标检测模型与发展

    2.2.1基于卷积神经网络的单级检测器

    2.2.2基于卷积神经网络的双级检测器

    3、目标检测常用方法(对比)

    3.1 目标检测整体框架

    3.2 One-Stage目标检测算法

    3.2.1 如何设计CNN结构

    3.2.2 如何构建回归目标

    3.2.3 如何设计损失函数

    3.3 two-Stage目标检测算法

    3.3.1 如何高效准确地生成Proposals

    3.3.2 如何获取更好的ROI features

    3.3.3 如何加速Two-Stage检测算法

    3.3.4 如何改进后处理方法

    4、 目标检测常用数据集

    5、 目标检测常用评价指标

    6、 参考文献

    1、国内外研究现状

    目标检测是计算机视觉和数字图像处理的一个热门方向,广泛应用于机器人导航、智能视频监控、工业检测、航空航天等诸多领域,通过计算机视觉减少对人力资本的消耗,具有重要的现实意义。因此,目标检测也就成为了近年来理论和应用的研究热点,它是图像处理和计算机视觉学科的重要分支,也是智能监控系统的核心部分,同时目标检测也是泛身份识别领域的一个基础性的算法,对后续的人脸识别、步态识别、人群计数、实例分割等任务起着至关重要的作用。由于深度学习的广泛运用,目标检测算法得到了较为快速的发展,本文广泛调研国内外目标检测方法,主要介绍基于深度学习的两种目标检测算法思路,分别为One-Stage目标检测算法和Two-Stage目标检测算法。

    1.1 传统物体检测识别的研究现状

    物体检测一直是计算机视觉领域经久不衰的研究方向。物体检测同样是一个主观的过程,对于人类来说相当简单。就连一个没受过任何训练的孩子通过观察图片中不同的颜色、区域等特征就能轻易定位出目标物体。但计算机收到这些RGB像素矩阵,不会直接得到目标(如行人、车辆等)的抽象概念,更不必说定位其位置了。再加上目标形态千差万别,目标和背景重合等问题,使得目标检测难上加难。

    传统的目标检测算法包括三个阶段,首先生成目标建议框,接着提取每个建议框中的特征,最后根据特征进行分类。以下是这三个阶段的具体过程:

    生成目标建议框。当输入一张原始图片时,计算机只认识每一个像素点,想要用方框框出目标的位置以及大小,最先想到的方法就是穷举建议框,具体的做法就是用滑动窗口扫描整个图像,还要通过缩放来进行多尺度滑窗。很显然这种方法计算量很大,很多都是重复的计算,并且效率极低。

    提取每个建议框中的特征。在传统的检测中,常见的HOG算法对物体边缘使用直方图统计来进行编码,有较好的表达能力。然而传统特征设计需要人工指定,达不到可靠性的要求。

    分类器的设计。传统的分类器在机器学习领域非常多。具有代表性的SVM将分类间隔最大化来获得分类平面的支持向量,在指定特征的数据集上表现良好。

    然而传统的算法在预测精度和速度上都很不理想,随着深度学习算法在计算机视觉领域大放异彩,并逐渐成为霸主,传统识别算法渐渐暗淡。

    1.2 基于深度学习物体检测识别的研究现状

    到目前为止,高性能的检测算法都基于深度学习。最早的R-CNN首次使用深度模型提取图像特征,以49.6%的准确率开创了检测算法的新时代。早期的物体检测,都以滑动窗口的方式生成目标建议框,这种方式本质上与穷举法无异。

    实际上,重复计算问题仍然没有得到解决。Fast R-CNN的出现正是为了解决冗余计算这个问题。Fast R-CNN添加了一个简化的SPP层,使得它的训练和测试过程能够合并在一起。

    Fast R-CNN使用Selective Search来生成目标候选框,但是速度依然达不到实时的要求。Faster R-CNN则直接利用RPN(Region Proposal Networks)网络来生成目标候选框。RPN输入任意像素的原始图像,输出一批矩形区域,每个区域对应一个目标坐标信息和置信度。从R-CNN到Faster R-CNN,是一个合并的过程,它把传统检测的三个步骤整合到同一个深度网络模型中。

    基于回归算法的检测模型又将检测领域带到一个新的高度。其中以YOLO和SSD方法为代表的检测方法做到了真正意义上的实时效果。

    R-CNN到Faster R-CNN,再到SSD等是检测方法发展的主要轨迹。实际应用中还有许多特定物体的检测方法,如人脸检测、行人检测等。随着技术的发展,但使用的主要方法都大同小异。

    2、目标检测模型与发展(对比)

    以2012年为分水岭,目标检测在过去的二十多年中可大致分为两个时期:20142年前的“传统目标检测期”及之后的“基于深度学习的目标检测期”。

    2.1 传统目标检测模型与发展

    早期的目标检测算法大多是基于手工特征构建的。由于当时缺乏有效的图像表示,人们别无选择,只能设计复杂的特征表示及各种加速技术对有限的计算资源物尽其用。

     图2.1 传统目标检测模型与发展

    (1) Viola Jones检测器

    2001年,P.Viola和M.Jones在没有任何约束(如肤色分割)的情况下首次实现了人脸的实时检测。他们所设计的检测器在一台配备700MHz Pentium III CPU的电脑上运行,在保持同等检测精度的条件下的运算速度是其他算法的数十甚至数百倍。这种检测算法以共同作者的名字命名为“Viola-Jones (VJ) 检测器”以纪念他们的重大贡献。

    VJ检测器采用最直接的检测方法,即滑动窗口(slide window):查看一张图像中所有可能的窗口尺寸和位置并判断是否有窗口包含人脸。这一过程虽然听上去简单,但它背后所需的计算量远远超出了当时计算机的算力。VJ检测器结合了“积分图像”、“特征选择”和“检测级联”三种重要技术,大大提高了检测速度。

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

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

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

    (2) HOG 检测器

    方向梯度直方图(HOG)特征描述器最初是由N.Dalal和B.Triggs在2005年提出的。HOG对当时的尺度不变特征变换(scale-invariant feature transform)和形状语境(shape contexts)做出重要改进。

    为了平衡特征不变性(包括平移、尺度、光照等)和非线性(区分不同对象类别 ),HOG描述器被设计为在密集的均匀间隔单元网格(称为一个“区块”)上计算,并使用重叠局部对比度归一化方法来提高精度。

    虽然HOG可以用来检测各种对象类,但它的主要目标是行人检测问题。如若要检测不同大小的对象,则要让HOG检测器在保持检测窗口大小不变的情况下,对输入图像进行多次重设尺寸(rescale)。这么多年来,HOG检测器一直是许多目标检测器和各种计算机视觉应用的重要基础。

    (3) 基于可变形部件的模型(DPM)

    DPM作为voco-07、-08、-09届检测挑战赛的优胜者,它曾是传统目标检测方法的巅峰。DPM最初是由P.Felzenszwalb提出的,于2008年作为HOG检测器的扩展,之后R.Girshick进行了各种改进。

    DPM遵循“分而治之”的检测思想,训练可以简单地看作是学习一种正确的分解对象的方法,推理可以看作是对不同对象部件的检测的集合。例如,检测“汽车”的问题可以看作是检测它的窗口、车身和车轮。工作的这一部分,也就是“star model”由P.Felzenszwalb等人完成。后来,R.Girshick进一步将star model扩展到“混合模型”,以处理更显著变化下的现实世界中的物体。

    一个典型的DPM检测器由一个根过滤器(root-filter)和一些零件滤波器(part-filters)组成。该方法不需要手动设定零件滤波器的配置(如尺寸和位置),而是在开发了一种弱监督学习方法并使用到了DPM中,所有零件滤波器的配置都可以作为潜在变量自动学习。R. Girshick将这个过程进一步表述为一个多实例学习的特殊案例,同时还应用了“困难负样本挖掘(hard-negative mining)”、“边界框回归”、“语境启动”等重要技术以提高检测精度。而为了加快检测速度,Girshick开发了一种技术,将检测模型“编译”成一个更快的模型,实现了级联结构,在不牺牲任何精度的情况下实现了超过10倍的加速。

    虽然今天的目标探测器在检测精度方面已经远远超过了DPM,但仍然受到DPM的许多有价值的见解的影响,如混合模型、困难负样本挖掘、边界框回归等。2010年,P.Felzenszwalb和R.Girshick被授予PASCAL VOC的“终身成就奖”。

    2.2 基于深度学习目标检测模型与发展

    随着手动选取特征技术的性能趋于饱和,目标检测在2010年之后达到了一个平稳的发展期。2012年,卷积神经网络在世界范围内重新焕发生机。由于深卷积网络能够学习图像的鲁棒性和高层次特征表示,自然而然会让我们想到能否将其应用到目标检测中。

    图2.2 基于深度学习目标检测模型与发展

    2.2.1基于卷积神经网络的单级检测器

    (1) You Only Look Once (YOLO)

    YOLO由R. Joseph等人于2015年提出。它是深度学习时代的第一个单级检测器。YOLO非常快:YOLO的一个快速版本运行速度为155fps,VOC07mAP=52.7%,而它的增强版本运行速度为45fps,VOC07mAP=63.4%,VOC12mAP=57.9%。YOLO是“ You Only Look Once ” 的缩写。从它的名字可以看出,作者完全抛弃了之前的“提案检测+验证”的检测范式。

    相反,它遵循一个完全不同的设计思路:将单个神经网络应用于整个图像。该网络将图像分割成多个区域,同时预测每个区域的边界框和概率。后来R. Joseph在 YOLO 的基础上进行了一系列改进,其中包括以路径聚合网络(Path aggregation Network,PAN)取代FPN,定义新的损失函数等,陆续提出了其 v2、v3及v4版本(截止本文的2020年7月,Ultralytics发布了“YOLOv5”,但并没有得到官方承认),在保持高检测速度的同时进一步提高了检测精度。

    必须指出的是,尽管与双级探测器相比YOLO的探测速度有了很大的提高,但它的定位精度有所下降,特别是对于一些小目标而言。YOLO的后续版本及在它之后提出的SSD更关注这个问题。

    (2) Single Shot MultiBox Detector (SSD)

    SSD由W.Liu等人于2015年提出。这是深度学习时代的第二款单级探测器。SSD的主要贡献是引入了多参考和多分辨率检测技术,这大大提高了单级检测器的检测精度,特别是对于一些小目标。SSD在检测速度和准确度上都有优势(VOC07mAP=76.8%,VOC12mAP=74.9%,COCOmAP@.5=46.5%,mAP@[.5,.95]=26.8%,快速版本运行速度为59fps) 。SSD与其他的检测器的主要区别在于,前者在网络的不同层检测不同尺度的对象,而后者仅在其顶层运行检测。

    (3) RetinaNet

    单级检测器有速度快、结构简单的优点,但在精度上多年来一直落后于双级检测器。T.-Y.Lin等人发现了背后的原因,并在2017年提出了RetinaNet。他们的观点为精度不高的原因是在密集探测器训练过程中极端的前景-背景阶层不平衡(the extreme foreground-background class imbalance)现象。

    为此,他们在RetinaNet中引入了一个新的损失函数“焦点损失(focal loss)”,通过对标准交叉熵损失的重构,使检测器在训练过程中更加关注难分类的样本。焦损耗使得单级检测器在保持很高的检测速度的同时,可以达到与双级检测器相当的精度。(COCO mAP@.5=59.1%,mAP@[.5,.95]=39.1%)。

    2.2.2基于卷积神经网络的双级检测器

    R.Girshick等人在2014年率先打破僵局,提出了具有CNN特征的区域(RCNN)用于目标检测。从那时起,目标检测开始以前所未有的速度发展。在深度学习时代,目标检测可以分为两类:“双级检测(two-stage detection)”和“单级检测(one-stage detection)”,前者将检测框定为一个“从粗到细”的过程,而后者将其定义为“一步到位”。

    (1) RCNN

    RCNN的思路很简单:它首先通过选择性搜索来提取一组对象作为“提案(proposal)”并当做对象的候选框。然后将每个提案重新调整成一个固定大小的图像,再输入到一个在ImageNet上训练得到的CNN模型(如AlexNet)来提取特征。最后,利用线性SVM分类器对每个区域内的目标进行预测,识别目标类别。RCNN在VOC07测试集上有明显的性能提升,平均精准度(mean Average Precision,mAP)从33.7%(DPM-v5)大幅提高到58.5%。

    虽然RCNN已经取得了很大的进步,但它的缺点是显而易见的:需要在大量重叠的提案上进行冗余的特征计算(一张图片超过2000个框),导致检测速度极慢(使用GPU时每张图片耗时14秒)。同年晚些时候,有人提出了SPPNet并克服了这个问题。

    (2) SPPNet

    2014年,K. He等人提出了空间金字塔池化网络( Spatial Pyramid Pooling Networks,SPPNet)。以前的CNN模型需要固定大小的输入,例如AlexNet需要224x224图像。SPPNet的主要贡献是引入了空间金字塔池化(SPP)层,它使CNN能够生成固定长度的表示,而不需要重新调节有意义图像的尺寸。

    利用SPPNet进行目标检测时,只对整个图像进行一次特征映射计算,然后生成任意区域的定长表示以训练检测器,避免了卷积特征的重复计算。SPPNet的速度是R-CNN的20多倍,并且没有牺牲任何检测精度(VOC07 mAP=59.2%)。

    SPPNet虽然有效地提高了检测速度,但仍然存在一些不足:

    第一,训练仍然是多阶段的。

    第二,SPPNet只对其全连接层进行微调,而忽略了之前的所有层。而次年晚些时候出现Fast RCNN并解决了这些问题。

    (3)Fast RCNN

    2015年,R.Girshick提出了Fast RCNN检测器,这是对R-CNN和SPPNet的进一步改进。Fast RCNN使我们能够在相同的网络配置下同时训练检测器和边界框回归器。在VOC07数据集上,Fast RCNN将mAP从58.5%( RCNN)提高到70.0%,检测速度是R-CNN的200多倍。

    虽然Fast-RCNN成功地融合了R-CNN和SPPNet的优点,但其检测速度仍然受到提案检测的限制。然后,一个问题自然而然地出现了:“我们能用CNN模型生成对象提案吗?”之后的Faster R-CNN解决了这个问题。

    (4) Faster RCNN

    2015年,S.Ren等人提出了Faster RCNN检测器,在Fast RCNN之后不久。Faster RCNN是第一个端到端的,也是第一个接近实时的深度学习检测器(COCOmAP@.5=42.7%,COCOmAP@[.5,.95]=21.9%,VOC07mAP=73.2%,VOC12mAP=70.4%)。

    Faster RCNN的主要贡献是引入了区域提案网络(RPN)从而允许几乎所有的cost-free的区域提案。从RCNN到Faster RCNN,一个目标检测系统中的大部分独立块,如提案检测、特征提取、边界框回归等,都已经逐渐集成到一个统一的端到端学习框架中。

    虽然Faster RCNN突破了Fast RCNN的速度瓶颈,但是在后续的检测阶段仍然存在计算冗余。后来提出了多种改进方案,包括RFCN和 Light head RCNN。

    (5) Feature Pyramid Networks(FPN)

    2017年,T.-Y.Lin等人基于Faster RCNN提出了特征金字塔网络(FPN)[21]。在FPN之前,大多数基于深度学习的检测器只在网络的顶层进行检测。虽然CNN较深层的特征有利于分类识别,但不利于对象的定位。

    为此,开发了具有横向连接的自顶向下体系结构,用于在所有级别构建高级语义。由于CNN通过它的正向传播,自然形成了一个特征金字塔,FPN在检测各种尺度的目标方面显示出了巨大的进步。

    在基础的FasterRCNN系统中使用FPN骨架可在无任何修饰的条件下在MS-COCO数据集上以单模型实现state-of-the-art的效果(COCOmAP@.5=59.1%,COCOmAP@[.5,.95]=36.2%)。FPN现在已经成为许多最新探测器的基本组成部分。

    3、目标检测常用方法(对比)

    3.1 目标检测整体框架

    目前主流的目标检测算法主要是基于深度学习模型,大概可以分成两大类别:(1)One-Stage目标检测算法,这类检测算法不需要Region Proposal阶段,可以通过一个Stage直接产生物体的类别概率和位置坐标值,比较典型的算法有YOLO、SSD和CornerNet;(2)Two-Stage目标检测算法,这类检测算法将检测问题划分为两个阶段,第一个阶段首先产生候选区域(Region Proposals),包含目标大概的位置信息,然后第二个阶段对候选区域进行分类和位置精修,这类算法的典型代表有R-CNN,Fast R-CNN,Faster R-CNN等。目标检测模型的主要性能指标是检测准确度和速度,其中准确度主要考虑物体的定位以及分类准确度。一般情况下,Two-Stage算法在准确度上有优势,而One-Stage算法在速度上有优势。不过,随着研究的发展,两类算法都在两个方面做改进,均能在准确度以及速度上取得较好的结果。

    图3.1 目标检测整体框架概述

    3.2 One-Stage目标检测算法

    One-Stage目标检测算法可以在一个stage直接产生物体的类别概率和位置坐标值,相比于Two-Stage的目标检测算法不需要Region Proposal阶段,整体流程较为简单。如下图所示,在Testing的时候输入图片通过CNN网络产生输出,解码(后处理)生成对应检测框即可;在Training的时候则需要将Ground Truth编码成CNN输出对应的格式以便计算对应损失loss。

    图3.2 One-Stage检测算法示意图

    目前对于One-Stage算法的主要创新主要集中在如何设计CNN结构、如何构建网络目标以及如何设计损失函数上,如下图所示。

    图3.3 One-Stage目标检测算法

    3.2.1 如何设计CNN结构

    设计CNN网络结构主要有两个方向,分别为追求精度和追求速度。最简单的一种实现方式就是替换Backbone网络结构,即使用不同的基础网络结构对图像提取特征。举例来说,ResNet101的表征能力要强于MobileNet,然而MobileNet的计算量要远远低于ResNet101,如果将ResNet101替换为MobileNet,那么检测网络在精度应该会有一定的损失,但是在速度上会有一定提升;如果将MobileNet替换为ResNet101,那么检测网络在速度上会有一定的损失,但是在精度上会有一定的提升。当然这只是一种相对简单的改进CNN网络结构的方式,实际上在改进CNN结构的时候需要很多的学术积累和经验,我将通过几篇SSD相关论文做一下简要分析。

    SSD:SSD检测算法的网络结构如下图3.4所示,其中Backbone为VGG网络,使用不同阶段不同分辨率的feature maps进行预测。

    图3.4 SSD检测算法的网络结构

    DSSD:DSSD检测算法的网络结构如下图3.5所示,DSSD也是使用不同阶段不同分辨率的feature maps进行预测,在不考虑Backbone网络结构差别的情况下,可以发现DSSD相比于SSD多了一系列的后续上采样操作,SSD是使用下采样过程中的feature maps进行预测,而DSSD是使用上采样过程中的feature maps进行预测。显而易见的是,SSD用于检测的feature maps位于网络的较低层,表征能力较弱,而DSSD用于检测的feature maps位于网络的较高层,表征能力较强,同时DSSD在反卷积的过程中通过Skip-Connection引入了较低层的feature maps,实现了一定程度的特征融合。所以DSSD的效果要优于SSD检测算法。

    图3.5 DSSD检测算法的网络结构

    FSSD:FSSD检测算法的网络结构如下图3.6所示,同样,FSSD也是使用不同阶段不同分辨率的feature maps进行预测,相比于SSD,FSSD多了一个特征融合处理,将网络较低层的特征引入到网络的较高层,在检测的时候能够同时考虑不同尺度的信息,使得检测更加准确。

    图3.6 FSSD检测算法的网络结构

    3.2.2 如何构建回归目标

    如何构建网络回归目标即如何区分正负样本使其与卷积神经网络的输出相对应,最简单直接的方法是直接回归物体的相关信息(类别和坐标),稍微复杂一些,在回归坐标时可以回归物体坐标相对于anchor的偏移量等等。对于One-Stage检测方法主要有如下三种典型的回归目标构建方式,其中代表方法分别为YOLO系列算法、SSD系列算法以及CornerNet目标检测算法。

    YOLO系列算法:如下图所示,其中左图取自YOLOv1,右图取自YOLOv2[9],需要说明的是YOLOv1相比于YOLOv2在坐标回归的时候没有anchor的概念。YOLO系列算法在构建回归目标时一个主要的区别就是如果将图像划分成SxS的格子,每个格子只负责目标中心点落入该格子的物体的检测;如果没有任何目标的中心点落入该格子,则为负样本。

    图3.7 YOLO系列算法回归目标构建方式

    SSD系列算法:如下图所示,SSD系列检测算法在确定正负样本的时候通过交并比大小进行区分,当某一个Ground Truth的目标框与anchor的交并比最大且对应的交并比大于某一个阈值的时候,对应anchor即负责检测该Ground Truth,即每一个anchor最多负责一个物体的检测,同一个物体可能被多个anchor同时检测。

    图3.8 SSD系列算法回归目标构建方式

    CornerNet:如下图3.9所示,CornerNet检测算法巧妙的将检测框转换成了关键点,显而易见,一个目标框可以由两个点(左上角和右下角)来表示,那么对于一个目标物体在预测的时候就可以直接预测两个类别的关键点,然后对关键点进行组合即可生成对应的目标框。

    图3.9 CornerNet检测算法回归目标构建方式

    3.2.3 如何设计损失函数

    目标检测算法主要分为两个子任务,分别为物体分类和物体定位。损失主要包括分类损失(Cls Loss)和定位损失(Loc Loss),常见的损失组合主要有如下两种Cls Loss + Loc Loss(SSD系列算法)、Cls Loss + Obj Loss + Loc Loss (YOLO系列算法),其中YOLO系列算法相比于SSD系列算法多了Object Loss,即判断对应区域是否为物体的损失。除此之外,One-Stage目标检测算法的正负样本不均衡的问题比较严重,对于设计损失函数还会有一些针对创新。

    Hard Negative Mining:即对于大量的负样本只挑取其中适当比例的损失较大的负样本来计算损失,其余损失较小的负样本忽略不计,防止负样本过多干扰网络学习;

    Focal Loss:由于大多数都是简单易分的负样本(属于背景的样本),使得训练过程不能充分学习到属于那些有类别样本的信息;其次简单易分的负样本太多,可能掩盖了其他有类别样本的作用。Focal Loss希望那些hard examples对损失的贡献变大,使网络更倾向于从这些样本上学习。

    需要说明的是,个人任务One-Stage检测算法和Two-Stage检测算法的第一个Stage并没有太大区别,在某种程度上Two-Stage检测算法的第一个Stage可以看成是One-Stage检测算法,而第二个Stage只是对前一个Stage的结果做进一步精化,上述所有思路本人觉得都适用于Two-Stage检测算法的第一个Stage。除此之外针对于Two-Stage检测框架设计的相关损失函数同样适用于One-Stage检测算法。

    3.3 two-Stage目标检测算法

    Two-Stage目标检测算法本人认为可以看作是进行两次One-Stage检测,第一个Stage初步检测出物体位置,第二个Stage对第一个阶段的结果做进一步的精化,对每一个候选区域进行One-Stage检测。整体流程如下图所示,在Testing的时候输入图片经过卷积神经网络产生第一阶段输出,对输出进行解码处理生成候选区域,然后获取对应候选区域的特征表示(ROIs),然后对ROIs进一步精化产生第二阶段的输出,解码(后处理)生成最终结果,解码生成对应检测框即可;在Training的时候需要将Ground Truth编码成CNN输出对应的格式以便计算对应损失loss。

    图3.10 Two-Stage检测算法示意图

    如上图3.10所示,Two-Stage的两个阶段拆开来看均与One-Stage检测算法相似,所以我觉得Two-Stage可以看成是两个One-Stage检测算法的组合,第一个Stage做初步检测,剔除负样本,生成初步位置信息(Region of Interest),第二个Stage再做进一步精化并生成最终检测结果。

    如图3.11所示,目前对于Two-Stage算法的主要创新主要集中在如何高效准确地生成Proposals、如何获取更好的ROI features、如何加速Two-Stage检测算法以及如何改进后处理方法,接下来我将从这几个方面进行阐述。

    图3.11 Two-Stage目标检测算法

    3.3.1 如何高效准确地生成Proposals

    如何高效准确地生成Proposals考虑的是Two-Stage检测算法的第一个Stage,获取初步的检测结果,供下一个Stage做进一步精化。接下来我将通过对比R-CNN、Faster R-CNN和FPN来做简要说明。

    R-CNN:R-CNN生成Proposals的方法是传统方法Selective Search,主要思路是通过图像中的纹理、边缘、颜色等信息对图像进行自底向上的分割,然后对分割区域进行不同尺度的合并,每个生成的区域即一个候选Proposal,如下图所示。这种方法基于传统特征,速度较慢。

    图3.12 R-CNN网络示意图

    Faster R-CNN:Faster R-CNN使用RPN网络代替了Selective Search方法,大大提高了生成Proposals的速度,具体实现策略同One-Stage检测算法,这里不再做过多赘述。网络示意图如下图所示。

    图3.13 Faster R-CNN网络示意图

    FPN:Faster R-CNN只采用顶层特征做预测,但我们知道低层的特征语义信息比较少,但是目标位置准确;高层的特征语义信息比较丰富,但是目标位置比较粗略。FPN算法把低分辨率、高语义信息的高层特征和高分辨率、低语义信息的低层特征进行自上而下的侧边连接,使得所有尺度下的特征都有丰富的语义信息,然后在不同尺度的特征层上进行预测,使得生成Proposals的效果优于只在顶层进行预测的Faster R-CNN算法。如下图所示。

    图3.14 FPN Proposal网络示意图

    Cascade R-CNN:类似于Faster R-CNN、FPN等,其Proposal网络对于正样本只设置了一个阈值,只做了一次较为宽松的约束,得到的Proposals结果较为粗糙,当对检测框的定位结果要求更为精确的时候就稍显不足。而Cascade R-CNN在获取Proposals的时候也采用逐步求精的策略,前一步生成的Proposals作为后一步的输入,通过控制正样本的交并比阈值不断提高Proposals的质量,如下图所示。准确来说,Cascade R-CNN应该不能算Two-Stage检测算法,应该是多Stage检测算法,多步求精。

    图3.15 Cascade R-CNN Proposal网络示意图

    3.3.2 如何获取更好的ROI features

    在获取Proposals之后,如何获取更好的ROI features是Two-Stage检测算法第二个Stage的关键,只有输入比较鲁棒的情况下才能得到较好的输出。对于这个问题主要考虑的有两个方向,其一是如何获取Proposals的features,其二是得到Proposals的features之后如何align到同一个尺度。首先对于第一个问题主要有如下几种策略:

    R-CNN:在原图裁剪Proposals对应区域,然后align到同一个尺度,分别对每一个align之后的原图区域通过神经网络提取特征;

    Fast/Faster R-CNN:只对原图提取一次特征,将对应Proposals的坐标映射到提取的原图的feature map上提取对应特征;

    FPN:对原图提取不同尺度的特征,将不同尺度的Proposals映射到不同尺度的原图的feature maps上提取对应特征;

    FCN:同样只对原图提取一次特征,主要区别是提取目标特征的同时加上了位置信息(Position-Sensitive),即目标的不同区域的特征维护在不同channels上,对于一个候选目标Proposal,其不同区域区域的特征需要映射到原图特征的不同channels上。如下图所示。

    图3.16 R-FCN网络示意图

    其次对于第二个问题主要有如下几种策略,分别为ROI Pool、ROI Align、PSROI Pool、PrROI Pool,接下来做简要说明。

    ROI Pool:即对Proposal区域划分为固定大小的格子,每个格子Pooling操作,获取一个值,从而所有Proposal生成同样大小的输出。

    ROI Align:主要解决了ROI Pool的量化误差问题,即浮点数坐标转换成整数坐标产生的误差,主要解决方式即不采用量化方式获取具体坐标,每个格子的值通过采样多个点获得,其中被采样点的值采用双线性插值的方式获得,不需要量化成整数坐标。

    PSROI Pool:即R-FCN采用的Pooling方式,与ROI Pool的唯一区别在于PSROI Pool需要每一个Proposal的不同区域对应到feature map的不同channels进行取值。

    PrROI Pool:即Precise ROI Pooling,其考虑了Proposal对应格子区域的每个值,采用积分的方式进行求解,而ROI Align只Sample对应格子区域的几个值。

    图3.17 ROI 策略对比图

    3.3.3 如何加速Two-Stage检测算法

    Two-Stage检测算法在一般情况下要慢于One-Stage检测算法,然而随着研究的发展,速度上的差别也在逐渐缩小,Two-Stage算法的开销主要有两部分,一个是Proposal的开销,一个是ROI Sub-Network的开销,提高Region Proposal的效率和降低ROI Sub-Network的开销均可以加速Two-Stage检测算法。

    Fast R-CNN vs. Faster R-CNN:Faster R-CNN使用神经网络代替Selective Search,大大提高了Region Proposal的的速度,前面已有描述。

    Faster R-CNN vs. Light-Head R-CNN:Light-Head R-CNN使用更小的Sub-Network代替Faster R-CNN较为臃肿的Sub-Network,使得第二阶段的网络更小,大大提高了Two-Stage检测算法的速度。

    3.3.4 如何改进后处理方法

    这里所说的后处理方法仅指NMS相关算法,NMS即非极大值抑制算法,在目标检测,定位等领域是一种被广泛使用的方法,主要目的是为了消除多余的框,找到最佳的物体检测的位置,几乎所有的目标检测方法都用到了这种后处理算法。接下来我将简要介绍如下几种NMS相关算法,分别为NMS、Soft NMS、Softer NMS、IOU-Guided NMS。

    图3.17 NMS示例

    Soft NMS:Soft NMS相对于NMS的改进即每次并不是直接排除掉和已选框重叠大于一定阈值的框,而是以一定的策略降低对应框的得分,直到低于某个阈值,从而不至于过多删除拥挤情况下定位正确的框。

    Softer NMS:Softer NMS相对于NMS的改进即每次并不是直接以得分最大的框的坐标作为当前选择框的坐标,而是和得分最大的框重叠大于一定阈值的所有框的坐标进行一定策略的加权平均,所得的新的框作为当前选择的得分最大的框的坐标,从而尽可能准确地定位物体。

    IOU-Guided NMS:即以IOU(交并比)得分作为NMS的排序依据,因为IOU得分直接反应了对应框的定位精确程度,优先考虑定位精度较高的框,防止定位精度较低但是其他得分较高的框被误排序到前面。

    4.目标检测常用数据集

    DOTA:A Large-scale Dataset for Object Detection in Aerial Images,arXiv:1711.10398v1 [cs.CV] 28 Nov 2017。这是武大遥感国重实验室夏桂松和华科电信学院白翔联合做的一个数据集,2806张遥感图像(大小约4000*4000),188,282个instances,分为15个类别。

    UCAS-AOD: Dataset of Object Detection in Aerial Images,中国科学院大学模式识别与智能系统开发实验室标注的,只包含两类目标:汽车,飞机,以及背景负样本。

    NWPU VHR-10:西北工业大学标注的航天遥感目标检测数据集,共有800张图像,其中包含目标的650张,背景图像150张,目标包括:飞机、舰船、油罐、棒球场、网球场、篮球场、田径场、港口、桥梁、车辆10个类别。开放下载,大概73M.

    RSOD-Dataset:武汉大学团队标注,包含飞机、操场、立交桥、 油桶四类目标,数目分别为:飞机:4993 aircrafts in 446 images. 操场:191 playgrounds in 189 images. 立交桥180 overpass in 176 overpass.油桶:1586 oiltanks in 165 images.

    5.标检测常用评价指标

    图5.1 目标检测常用评价指标

    6.参考文献

    [1]Zhengxia Zou, Zhenwei Shi, Member, IEEE, Yuhong Guo, and Jieping Ye, Object Detection in 20 Years: A Survey Senior Member, IEEE

    [2]Xiongwei Wu, Doyen Sahoo, Steven C.H. Hoi, Recent Advances in Deep Learning for Object Detection, arXiv:1908.03673v1

    [3]K. He, X. Zhang, S. Ren, J. Sun, Deep residual learning for image recognition, in: CVPR, 2016.

    [4]R. Girshick, J. Donahue, T. Darrell, J. Malik, Rich feature hierarchies for accurate object detection and semantic segmentation, in: CVPR, 2014.

    [5]K. He, G. Gkioxari, P. Doll´ar, R. Girshick, Mask r-cnn, in: ICCV, 2017.

    [6]L.-C. Chen, G. Papandreou, I. Kokkinos, K. Murphy, A. L. Yuille, Semantic image segmentation with deep convolutional nets and fully connected crfs, in: arXiv preprint arXiv:1412.7062, 2014.

    [7]Y. LeCun, Y. Bengio, and G. Hinton, “Deep learning,” nature, vol. 521, no. 7553, p. 436, 2015.

    [8]P. Viola and M. Jones, “Rapid object detection using a boosted cascade of simple features,” in Computer Vision and Pattern Recognition, 2001. CVPR 2001. Proceedings of the 2001 IEEE Computer Society Conference on, vol. 1. IEEE, 2001, pp. I–I.

    [9]P. Viola and M. J. Jones, “Robust real-time face detection,” International journal of computer vision, vol. 57, no. 2, pp. 137–154, 2004.

    [10]C. Papageorgiou and T. Poggio, “A trainable system for object detection,” International journal of computer vision, vol. 38, no. 1, pp. 15–33, 2000.

    [11]N. Dalal and B. Triggs, “Histograms of oriented gradients for human detection,” in Computer Vision and Pattern Recognition, 2005. CVPR 2005. IEEE Computer Society Conference on, vol. 1. IEEE, 2005, pp. 886–893.

    [12]P. Felzenszwalb, D. McAllester, and D. Ramanan, “A discriminatively trained, multiscale, deformable part model,” in Computer Vision and Pattern Recognition, 2008. CVPR 2008. IEEE Conference on. IEEE, 2008, pp. 1–8.

    [13]P. F. Felzenszwalb, R. B. Girshick, and D. McAllester, “Cascade object detection with deformable part models,” in Computer vision and pattern recognition (CVPR), 2010 IEEE conference on. IEEE, 2010, pp. 2241–2248.

    [14]P. F. Felzenszwalb, R. B. Girshick, D. McAllester, and D. Ramanan, “Object detection with discriminatively trained part-based models,” IEEE transactions on pattern analysis and machine intelligence, vol. 32, no. 9, pp. 1627– 1645, 2010.

    [15]A. Krizhevsky, I. Sutskever, and G. E. Hinton, “Imagenet classification with deep convolutional neural networks,” in Advances in neural information processing systems, 2012, pp. 1097–1105.

    [16]R. Girshick, J. Donahue, T. Darrell, and J. Malik, “Regionbased convolutional networks for accurate object detection and segmentation,” IEEE transactions on pattern analysis and machine intelligence, vol. 38, no. 1, pp. 142– 158, 2016.

    [17]K. E. Van de Sande, J. R. Uijlings, T. Gevers, and A. W. Smeulders, “Segmentation as selective search for object recognition,” in Computer Vision (ICCV), 2011 IEEE International Conference on. IEEE, 2011, pp. 1879–1886.

    [18]K. He, X. Zhang, S. Ren, and J. Sun, “Spatial pyramid pooling in deep convolutional networks for visualrecognition,” in European conference on computer vision. Springer, 2014, pp. 346–361.

    [19]R. Girshick, “Fast r-cnn,” in Proceedings of the IEEE international conference on computer vision, 2015, pp. 1440–1448.

    [20]S. Ren, K. He, R. Girshick, and J. Sun, “Faster r-cnn: Towards real-time object detection with region proposal networks,” in Advances in neural information processing systems, 2015, pp. 91–99.

    [21]T.-Y. Lin, P. Doll´ar, R. B. Girshick, K. He, B. Hariharan, and S. J. Belongie, “Feature pyramid networks for object detection.” in CVPR, vol. 1, no. 2, 2017, p. 4.

    [22]J. Redmon, S. Divvala, R. Girshick, and A. Farhadi, “You only look once: Unified, real-time object detection,” in Proceedings of the IEEE conference on computer vision and pattern recognition, 2016, pp. 779–788.

    [23]W. Liu, D. Anguelov, D. Erhan, C. Szegedy, S. Reed, C.-Y. Fu, and A. C. Berg, “Ssd: Single shot multibox detector,” in European conference on computer vision. Springer, 2016, pp. 21–37.

    [24]T.-Y. Lin, P. Goyal, R. Girshick, K. He, and P. Doll´ar, “Focal loss for dense object detection,” IEEE transactions on pattern analysis and machine intelligence, 2018.

    [25] A. Krizhevsky, I. Sutskever, and G. E. Hinton, “Imagenet classification with deep convolutional neural networks,” in Advances in neural information processing systems, 2012, pp. 1097–1105.

    [26] Vishwakarma S, Agrawal A. A survey on activity recognition and behavior understanding in video surveillance [J]. The Visual Computer, 2012: 1-27.

    [27] D. Lowe. Distinctive image features from scale-invariant keypoints. IJCV, 2004.
    [28] N. Dalal and B. Triggs. Histograms of oriented gradients for human detection. In CVPR, 2005.

    [29] Liu, Wei, et al. "SSD: Single Shot MultiBox Detector." European Conference on Computer Vision Springer International Publishing, 2016:21-37.

    [30] Fu C Y, Liu W, Ranga A, et al. DSSD : Deconvolutional Single Shot Detector[J]. 2017.

    [31] Li Z, Zhou F. FSSD: Feature Fusion Single Shot Multibox Detector[J]. 2017.

    [32] Redmon, Joseph, et al. "You Only Look Once: Unified, Real-Time Object Detection." (2015):779-788.

    [33] Redmon, Joseph, and A. Farhadi. "YOLO9000: Better, Faster, Stronger." (2016):6517-6525.

    [34] Law H, Deng J. CornerNet: Detecting Objects as Paired Keypoints[J]. 2018.

    [35] Girshick, R., Donahue, J., Darrell, T., Malik, J.: Rich feature hierarchies for accurate object detection and semantic segmentation. In CVPR 2014.

    [36] Shaoqing Ren, Kaiming He, Ross Girshick, and Jian Sun. Faster R-CNN: Towards real-time object detection with region proposal networks. In Neural Information Processing Systems (NIPS), 2015.

    [37] Lin T Y, Dollár P, Girshick R, et al. Feature Pyramid Networks for Object Detection[J]. 2016.

    [38] Cai Z, Vasconcelos N. Cascade R-CNN: Delving into High Quality Object Detection[J]. 2017.

    [39] Dai J, Li Y, He K, et al. R-FCN: Object Detection via Region-based Fully Convolutional Networks[J]. 2016.

    [40] Li Z, Peng C, Yu G, et al. Light-Head R-CNN: In Defense of Two-Stage Object Detector[J]. 2017.

    [41] Bodla N, Singh B, Chellappa R, et al. Soft-NMS — Improving Object Detection with One Line of Code[J]. 2017.

    [42] Softer-NMS: Rethinking Bounding Box Regression for Accurate Object Detection. arxiv id:1809.08545

    [43] Jiang B, Luo R, Mao J, et al. Acquisition of Localization Confidence for Accurate Object Detection[J]. 2018.

    [44] Real-Time High-Resolution Background Matting .CVPR.2021

    [45] EfficientDet Scalable and Efficient Object Detection.CVPR.2021

    [46] NAS-FPN Learning Scalable Feature Pyramid Architecture .CVPR.2021

    [47] SCA-CNN: Spatial and Channel-wise Attention in Convolutional Networks

    [48] ReDet: A Rotation-equivariant Detector for Aerial Object Detection.CVPR

    [49] SSD:Single Shot MultiBox Detector.ECCV2016

    [50] Mask R-CNN.ICCV 2017

    [51] Bounding box regression.CVPR

    [52] CBNetV2: A Composite Backbone Network Architecture for Detection.

    [53] YOLOV3.CVPR

    [54] YOLOV4.CVPR

    [55] YOLOV5.Github

    [56] Instance Localization for Self-supervised Detection Pretraining.CVPR 2021

    [57] An image is worth 16 x 16 words: transformers for image recognition

    [58] BERT: Pre-training of Deep Bidirectional Transformers

    [59] Swin Transformer.CVPR 2021

    [60] Attention is All you need(Seq2Seq With Attention).Google Mind.2014

    [61] Light-Head R-CNN(2017).CVPR

    [62] KLD: Learning High-Precision Bounding Box for Rotated Object Detection

    [63] Gaussian Bounding Boxes and Probabilistic Intersection-over-Union

    展开全文
  • 目标检测

    千次阅读 2021-12-14 10:22:48
    目标检测 参考论文:地址 小目标定义 相对尺度定义 从目标与图像的相对比对小目标进行定义。Chen等提出了一个针对小目标的数据集,对小目标进行定义:同一类别中,所有目标实例的相对面积,即边界框面积与图像...

    小目标检测

    参考论文:地址

    小目标定义

    1. 相对尺度定义
      从目标与图像的相对比对小目标进行定义。Chen等提出了一个针对小目标的数据集,对小目标进行定义:同一类别中,所有目标实例的相对面积,即边界框面积与图像面积之比的中位数在0.08%~0.58%之间。如在640 × 480 \times480 ×480像素分辨率图像中, 16 × 16 16\times16 16×16 42 × 42 42\times42 42×42的目标应考虑为小目标。

    除了Chen的定义,其他的相对定义有:

    • 目标边界框的宽高与图像的宽高比例小于一定值,通用值为0.1
    • 目标边界框与图像面积的比值开方小于一定值,通用值为0.03
    • 根据目标实际覆盖像素与图像总像素之间比例对小目标进行定义

    相对尺度的定义存在问题,如这种定义方式难以有效评估模型对不同尺度目标的检测性能,同时容易受到数据预处理与模型构型的影响。

    1. 绝对尺度定义
      从目标绝对像素大小对小目标进行定义。目前最为通用的定义来自MS COCO数据集,将小目标定义为分辨率小于 32 × 32 32\times32 32×32像素的目标。
      为什么是 32 × 32 32\times32 32×32,文中提出了两种思路:
    • 人类在图像上对于场景能有效识别的彩色图像像素大小为 32 × 32 32\times32 32×32,小于 32 × 32 32\times32 32×32的人眼无法识别
    • VGG网络从输入图像到全连接层的特征向量经过了5个最大池化层,因此,对于特征向量上的“一点”对应于输入图像 32 × 32 32\times32 32×32个像素

    除了MS COCO数据集,还有其他小目标的绝对尺度定义:

    • 航空图像数据集DOTA和人脸检测数据集WIDER FACE将像素范围在[10,50]之间的目标定义为小目标
    • 行人识别数据集CityPersons,针对行人,将小目标定义为高度小于75像素的目标
    • 基于航空图像的小行人数据集TinyPerson将小目标定义为像素值范围在[20,32]之间的目标,而且进一步将像素值范围在[2,20]之间的目标定义为微小目标。

    小目标检测面临的挑战

    1. 可利用特征少。小目标的分辨率较低,可视化信息少,难以提取到具有鉴别力的特征,且极易被环境因素干扰。
    2. 定位精度要求高。小目标在图像中覆盖的面积小,在预测过程中,预测边界框偏移一个像素点都会造成很大的误差。同时,现在检测算法大多基于Anchor,在训练时,匹配小目标的Anchor数量远少于大目标,导致模型更侧重于大目标的检测,难以检测小目标。
    3. 现有数据集小目标占比少。现有的数据集大多针对大尺寸目标,小目标较少,MSCOCO中虽然小目标占比较高,但分布不均。再加上小目标难以标注,一方面来源于小目标在图像中不易被关注,另一方面对标注误差非常敏感。
    4. 样本不均衡。为了定位目标,现有的方法大多是预先在图像的每一个位置生成一系列的Anchor,在训练中,通过设定固定的阈值来判断Anchor是否属于正样本。当人工设定的Anchor与小目标的真是边界差异较大时,小目标的训练正样本将远远小于大目标的正样本,导致模型忽略对小目标的检测。
    5. 小目标聚集。相对于大目标,小目标容易出现聚集现象,当小目标聚集出现时,聚集区域相邻的小目标无法区分。当同类的小目标密集出现时,预测的边界框还可能由于后处理的NMS将大量正确预测的边界框过滤导致漏检。
    6. 网络结构。现有的算法在设计时更关注大目标的检测效果,针对小目标的优化较少,同时大多算法基于Anchor设计,对小目标检测不友好。在训练中,小目标由于训练样本少,进一步减弱了网络对小目标的学习能力。

    研究思路

    数据增强

    数据增强是提升小目标检测效果最简单有效的方法。通过扩充小目标样本的规模,增强模型的鲁棒性和泛化能力。

    针对小目标的数据增强策略有:

    1. 尺度匹配。根据不同目标尺寸进行裁剪,缩小不同大小目标之间的差距。
    2. 复制增强。通过在图像上多次复制粘贴小目标的方式来增加小目标的训练样本数目,从而提高检测效果。
    3. 自适应重采样策略。该策略基于预训练的语义分割网络对目标图像进行考虑上下文信息的复制,以解决简单复制过程中出现的背景不匹配和尺度不匹配问题。
    4. 对图像进行缩放拼接。将数据集中的大尺寸目标转换为中等尺寸目标,中等尺寸目标转换为小尺寸目标,提高了小目标的数量。
    5. 自适应学习法。Zoph提出了一种通过自适应学习如强化学习选择最佳的数据增强策略。
      数据增强方法

    多尺度学习

    小目标与常规的目标相比可利用的像素少,难以提取到好的特征,随着网络深度的增加,小目标的特征信息和位置信息逐渐丢失,难以被网络检测。这些特性导致小目标同时需要深层语义信息与浅层表征信息,而多尺度学习将这两种相结合,是一种提升小目标检测性能的有效策略。

    使用多尺度检测的主要思路:

    1. 空洞卷积和可变卷积,通过获取不同感受野大小可以获得不同尺度的信息。

    2. 图像金字塔,通过输入不同尺度的图像,对不同尺度大小的目标进行检测。但是图像金字塔对计算机算力和内存都有极高的要求,使用的较少。图a

    3. 多尺度目标检测。利用较浅的特征图来检测较小的目标,用较深的特征图检测较大的目标,如SSD算法。图b

    4. 统一多尺度深度卷积网络,使用反卷积层提高特征图的分辨率。

    5. ION(Inside-outside network)。从不同尺度特征图中裁剪出同意感兴趣区域的特征,然后综合这些多尺度特征进行预测,以达到提升检测性能的目的。

    6. 与5类似,HyperNet,多尺度融合网络,通过综合浅层的高分辨率特征和深层的语义特征以及中间层特征的信息显著提高召回率。图c

    7. 特征金字塔FPN。FPN引入了一种自底向上、自顶向下的网络结构,通过将相邻层的特征融合以达到特征增强的目的。图d
      网络结构

    8. 多层次特征融合算法,即特征融合SSD,在SSD的基础上引入上下文信息。但是基于SSD的特征金字塔方法需要从网络的不同层抽取不同尺度的特征图进行预测,难以充分融合不同尺度的特征。

    9. 特征融合单次多箱探测器。使用一个轻量级的特征融合模块,联系并融合各层特征到一个较大的尺度,然后在得到的特征图上构造特征金字塔用于检测。

    10. 使用上采样和跳跃连接在训练过程中提取不同网络深度的多尺度特征,防止小目标经过多层网络特征丢失。

    多尺度特征融合同时考虑了图像的浅层表征信息和深层的语义信息,有利于小目标的检测,但同时增加了额外的计算量,并且在特征融合的过程中难以避免干扰噪声的影响。

    上下文学习

    在真实世界中,目标与场景、目标与目标存在共存关系,利用这种上下文信息可以提升小目标的检测性能。

    1. 基于隐式上下文特征学习的目标检测。隐式上下文特征是指目标区域周围的背景特征或者全局的场景特征。实际上,卷积神经网络中的卷积操作在一定程度上已经考虑了目标区域周围的隐式上下文特征。
      提出的方法有:
    • 基于多尺度上下文特征增强的目标检测方法。首先在图像中生成一系列的目标候选区域,然后在目标周围生成不同尺度的上下文窗口,最后使用这些窗口中的特征来增强目标的特征表示。如图a
    • 门控双向卷积神经网络。该网络同样在目标候选区域的基础上生成包含不同尺度上下文的支撑区域,不同之处在于该网络让不同尺度和分辨率的信息在生成的支撑区域之间相互传递,从而综合学习到最优的特征。
    • 强化上下文模型网络。利用双空洞卷积结构来节省参数量的同时,通过扩大有效感受野来强化浅层上下文信息,并在较少破坏原始目标检测网络的基础上灵活作用于网络中浅预测层。

    上述方法大多依赖于上下文窗口的设计或受限于感受野的大小,可能导致重要上下文信息的丢失。一些方法尝试将全局的上下文信息融入到目标检测模型中,如图b。对于基于深度学习的方法,主要通过较大的感受野、卷积特征的池化或把全局上下文看作一种序列信息3种方式来感知全局上下文。

    • 基于循环神经网络的上下文传递方法。利用循环神经网络从四个方向对整个图像中的上下文信息进行编码,并将得到的4个特征图进行串联,从而实现对全局上下文的感知。然而,该方法使模型变得复杂,并且模型的训练严重依赖于初始化参数的设置。
    • 上下文微调网络。首先通过计算相似度找到与目标区域相关的上下文区域,然后利用这些上下文区域的特征来增强目标区域特征。
    • Barnea将上下文的利用视为一个优化问题,讨论了上下文或其他类型的附加信息可以将检测分数提高到什么程度,并表明简单的共现性关系是最有效的上下文信息。
    • 层次上下文嵌入框架。该框架可以作为一个即插即用的组件,通过挖掘上下文线索来增强候选区域的特征表达,从而提升最终的检测性能。
    • 面向光学遥感目标的全局上下文检测模型,该模型通过全局上下文特征与目标中心点局部特征相结合的方式生成高分辨率热点图,并利用全局特征实现目标的预分类。
    • 统一的实例分割框架,利用像素级的监督来优化检测器,并通过多任务的方式联合优化目标检测和实例分割模型。尽管通过语义分割可以显著提高检测性能,但是像素级的标注是非常昂贵的。
    • 生成伪分割标签,通过利用伪分割标签来于优化检测器。
    • 无监督的分割方法,在无像素级的标注下通过联合优化目标检测和分割来增强用于目标检测的特征图。

    基于全局上下文的方法在目标检测中已经取得了较大的进展,但如何从全局场景中找到有利于提升小目标检测效果的上下文信息仍然是研究难点。
    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-mgV0MPIV-1639448541397)(https://note.youdao.com/yws/res/0/WEBRESOURCEb6a673130de9f29c84049ae9afce3380)]

    1. 基于显示上下文推理的目标检测。显示上下文推理是指利用场景中明确的上下文信息来辅助推断目标的位置或类别,例如利用场景中天空区域与目标的上下文关系来推断目标的类别。上下文关系通常指场景中目标与场景或者目标与目标之间的约束和依赖关系(见图3(c))。提出的方法有:
    • 自适应上下文建模和迭代提升。一个任务的输出作为另一个任务的上下文来提高检测效果。
    • 基于空间上下文。该方法捕捉上下文和感兴趣目标之间的空间关系,有效的利用了上下文区域的外观特征。
    • Reasoning-RCNN,通过构建知识图谱编码上下文关系,并利用先验的上下文关系来影响目标检测。
    • 空间记忆网络。空间记忆实质上是将目标实例重新组合成一个伪图像表示,并将伪图像表示输入到卷积神经网络中进行目标关系推理,从而形成一种顺序推理体系结构。
    • 基于注意力机制实现轻量级目标关系网络。通过引入不同物体之间的外观和几何结构关系来做约束,实现物体之间的关系建模。该网络无需额外的监督,并且易于嵌入到现有的网络中,可以有效地过滤冗余框,从而提升目标的检测性能。
    • 上下文连接多尺度特征。使用网络不同深度层级中的附加特征作为上下文,辅以注意力机制聚焦于图像中的目标。

    基于上下文的方法充分利用了图像中与目标相关的信息,能够有效提升小目标检测的性能。但是,已有方法没有考虑到场景中的上下文信息可能匮乏的问题,同时没有针对性地利用场景中易于检测的结果来辅助小目标的检测。

    生成对抗学习

    生成对抗学习的方法旨在通过将低分辨率小目标的特征映射成与高分辨率目标等价的特征,从而达到与尺寸较大目标同等的检测性能。可以通过结合生成对抗网络提高小目标的分辨率,缩小目标之间的尺度差异,增强小目标的特征表达,提高小目标的检测效果,也可以使用GNN生成图像,进行数据增强。

    • Li等提出了一种专门针对小目标检测的感知GAN方法,该方法通过生成器和鉴别器相互对抗的方式来学习小目标的高分辨率特征表示。在感知GAN中,生成器将小目标表征转换为与真实大目标足够相似的超分辨表征。同时,判别器与生成器对抗以识别生成的表征,并对生成器施加条件要求。该方法通过生成器和鉴别器相互对抗的方式来学习小目标的高分辨率特征表示。这项工作将小目标的表征提升为“超分辨”表征,实现了与大目标相似的特性,获得了更好的小目标检测性能。
    • MTGAN,多任务生成对抗网络。在MTGAN中,生成器是一个超分辨率网络,可以将小模糊图像上采样到精细图像中,并恢复详细信息以便更准确地检测。判别器是多任务网络,区分真实图像与超分辨率图像并输出类别得分和边界框回归偏移量。此外,为了使生成器恢复更多细节以便于检测,判别器中的分类和回归损失在训练期间反向传播到生成器中。MTGAN由于能够从模糊的小目标中恢复清晰的超分辨目标,因此大幅度提升了小目标的检测性能。
    • 针对现有的用于小目标检测的超分辨率模型存在缺乏直接的监督问题,Noh等提出一种新的特征级别的超分辨率方法,该方法通过空洞卷积的方式使生成的高分辨率目标特征与特征提取器生成的低分辨率特征保持相同的感受野大小,从而避免了因感受野不匹配而生成错误超分特征的问题。

    基于生成对抗网络的模型通过增强小目标的特征信息可以显著提升检测性能,而且使用GNN超分小目标无需特殊的结构设计,可以很容易的和现有的模型结合。但是生成对抗网络难以训练、不易在生成器和鉴别器之间取得好的平衡,而且生成器在训练过程中产生样本的多样性有限,训练到一定程度后对性能提升效果不明显。

    idea,无人机飞行中,随着飞行高度的增加,所有地面目标被成比例缩小,目标的尺度差异较小,可以使用GNN对目标进行超分,然后对超分后的图像进行检测

    无Anchor机制

    现有的Anchor设计难以获得平衡小目标召回率与计算成本之间的矛盾,而且这种方式导致了小目标的正样本与大目标的正样本极度不均衡,使得模型更加关注于大目标的检测性能,从而忽视了小目标的检测。极端情况下,设计的锚框如果远远大于小目标,那么小目标将会出现无正样本的情况。而且Anchor的使用引入了大量的超参数,使得网络难以训练,不易提升小目标的检测性能。因此,基于无Anchor的机制成为了研究热点,并在小目标检测上取得了较好的效果。现在无Anchor的方法主要有两种:

    1. 基于角点。基于角点的检测器通过对从卷积特征图中学习到的角点分组来预测目标边界框。提出的方法有:
    • DeNet将目标检测定义为估计目标4个角点的概率分布,包括左上角、右上角、左下角和右下角(见图4(a))。首先利用标注数据来训练卷积神经网络,然后利用该网络来预测角点分布。之后,利用角点分布和朴素贝叶斯分类器来确定每个角点对应的候选区域是否包含目标。
    • PLN(Point linking network)。PLN首先回归与DeNet相似的4个角点和目标的中心点,同时通过全卷积网络预测关键点两两之间是否相连,然后将角点及其相连的中心点组合起来生成目标边界框。PLN对于稠密目标和具有极端宽高比率目标表现良好。但是,当角点周围没有目标像素时,PLN由于感受野的限制将很难检测到角点。
    • CornerNet。CornerNet将目标检测问题转换为角点检测问题,首先预测所有目标的左上和右下的角点,然后将这些角点进行两两匹配,最后利用配对的角点生成目标的边界框。CornerNet系列具有更简洁的检测框架,在提高检测效率的同时获得了更高的检测精度。但是仍然会因为错误的角点匹配预测出大量不正确的目标边界框。
    1. 基于中心点。
    • CenterNet。CenterNet首先预左上角和右下角的角点以及中心关键点,然后通过角点匹配确定边界框,最后利用预测的中心点消除角点不匹配引起的不正确的边界框。
    • ExtremeNet。ExtremeNet首先使用一个标准的关键点估计网络来预测最上面、最下面、最左边、最右边的4个极值点和中心点,然后在5个点几何对齐的情况下对它们进行分组以生成边界框。

    ExtremeNet和CornerNet等基于关键点的检测网络都需要经过一个关键点分组阶段,这降低了算法整体的速度。

    • 将目标建模为其一个单点,即边界框中心点,无需对构建点进行分组或其他后处理操作。然后在探测器使用关键点估计来查找中心点,并回归到所有其他对象属性,如大小、位置等。这一方法很好地平衡了检测的精度与速度。
    • RepPoints。提供了更细粒度的表示方式,使得目标可以被更精细地界定。同时,这种方法能够自动学习目标的空间信息和局部语义特征,一定程度上提升了小目标检测的精度。
    • FoveaBox受到人眼的中央凹(视网膜中央区域,集中了绝大多数的视锥细胞,负责视力的高清成像)启发,提出了一种直接预测目标存在的可能性和边界框坐标的方法,该方法首先预测目标存在的可能性,并生成类别敏感语义图,然后为每一个可能包含目标的位置生成未知类别的边界框。由于摆脱了锚框的限制,FoveaBox对于小目标等具有任意横纵比的目标具备良好的鲁棒性和泛化能力,并在检测精度上也得到了较大提升。
    • FCOS(Fully convolutional one‑stage)。使用语义分割的思想来解决目标检测问。
    • 特征平衡与细化网络,采用直接学习编码边界框的一般无锚策略,消除锚框对于检测性能的负面影响,并使用基于语义信息的注意力机制平衡不同层次的多个特征,达到了最先进的性能。
    • 基于特殊注意力机制的特征金字塔网络,该网络能够根据不同大小目标的特征生成特征金字塔,进而更好地处理多尺度目标检测问题,显著提升了小目标的检测性能。

    在这里插入图片描述

    其他优化策略

    1. 过采样策略,通过增加小目标对于损失函数的贡献,以此提升小目标检测的性能。
    2. 增加专用于小目标的锚框数量来提高检测性能。增加锚框数量对于提升小目标检测精度十分有效,同时也额外增加了巨大的计算成本。
    3. 级联。采用从粗到细的检测理念:用简单的计算过滤掉大多数简单的背景窗口,然后用复杂的窗口来处理那些更困难的窗口。Cascade R‑CNN,通过级联几个基于不同IoU阈值的检测网络达到不断优化预测结果的目的。
    4. 分阶段检测,通过不同层级之间的配合平衡漏检与误检之间的矛盾。比如双重探测器,其中第一尺度探测器最大限度地检测小目标,第二尺度探测器则检测第一尺度探测器无法识别的物体。
    5. 分割前后景。区分重要区域与非重要区域。
    6. 优化损失函数。在网络的训练过程中,小目标更容易受到随机误差的影响。针对这一问题进行了改进,提出一种依据目标尺寸设定不同权重的损失函数,实现了小目标检测性能的提升。针对类别不均衡问题,在RetinaNet中提出了焦距损失,有效解决了训练过程中存在的前景‑背景类不平衡问题。针对小目标容易出现的前景与背景不均衡问题,Deng等则提出了一种考虑前景‑背景之间平衡的损失函数,通过全局重建损失和正样本块损失提高前景与背景的特征质量,进而提升了小目标检测的性能。
    7. 多接受域和小目标聚焦弱监督分割网络,通过使用多个接收域块来关注目标及其相邻背景,并依据不同空间位置设置权重,以达到增强特征可辨识性的目的。
    8. 将多目标检测任务重新表述为边界框的密度估计问题,提出了一种混合密度目标检测器,通过问题的转换避免了真值框与预测框匹配以及启发式锚框设计等繁琐过程,也一定程度上解决了前景与背景不平衡的问题。
    展开全文
  • 目标检测(Object Detection)

    万次阅读 多人点赞 2020-11-20 19:38:58
    文章目录目标检测(Object Detection)一、基本概念1. 什么是目标检测2. 目标检测的核心问题3. 目标检测算法分类1)Tow Stage2)One Stage4. 目标检测应用1)人脸检测2)行人检测3)车辆检测4)遥感检测二、目标检测...

    目标检测(Object Detection)

    一、基本概念

    1. 什么是目标检测

    目标检测(Object Detection)的任务是找出图像中所有感兴趣的目标(物体),确定它们的类别和位置,是计算机视觉领域的核心问题之一。由于各类物体有不同的外观、形状和姿态,加上成像时光照、遮挡等因素的干扰,目标检测一直是计算机视觉领域最具有挑战性的问题。

    计算机视觉中关于图像识别有四大类任务:

    (1)分类-Classification:解决“是什么?”的问题,即给定一张图片或一段视频判断里面包含什么类别的目标。

    (2)定位-Location:解决“在哪里?”的问题,即定位出这个目标的的位置。

    (3)检测-Detection:解决“在哪里?是什么?”的问题,即定位出这个目标的位置并且知道目标物是什么。

    (4)分割-Segmentation:分为实例的分割(Instance-level)和场景分割(Scene-level),解决“每一个像素属于哪个目标物或场景”的问题。

    所以,目标检测是一个分类、回归问题的叠加。

    2. 目标检测的核心问题

    (1)分类问题:即图片(或某个区域)中的图像属于哪个类别。

    (2)定位问题:目标可能出现在图像的任何位置。

    (3)大小问题:目标有各种不同的大小。

    (4)形状问题:目标可能有各种不同的形状。

    3. 目标检测算法分类

    基于深度学习的目标检测算法主要分为两类:Two stage和One stage。

    1)Tow Stage

    先进行区域生成,该区域称之为region proposal(简称RP,一个有可能包含待检物体的预选框),再通过卷积神经网络进行样本分类。

    任务流程:特征提取 --> 生成RP --> 分类/定位回归。

    常见tow stage目标检测算法有:R-CNN、SPP-Net、Fast R-CNN、Faster R-CNN和R-FCN等。

    2)One Stage

    不用RP,直接在网络中提取特征来预测物体分类和位置。

    任务流程:特征提取–> 分类/定位回归。

    常见的one stage目标检测算法有:OverFeat、YOLOv1、YOLOv2、YOLOv3、SSD和RetinaNet等。

    4. 目标检测应用

    1)人脸检测

    • 智能门控
    • 员工考勤签到
    • 智慧超市
    • 人脸支付
    • 车站、机场实名认证
    • 公共安全:逃犯抓捕、走失人员检测

    2)行人检测

    • 智能辅助驾驶
    • 智能监控
    • 暴恐检测(根据面相识别暴恐倾向)
    • 移动侦测、区域入侵检测、安全帽/安全带检测

    3)车辆检测

    • 自动驾驶
    • 违章查询、关键通道检测
    • 广告检测(检测广告中的车辆类型,弹出链接)

    4)遥感检测

    • 大地遥感,如土地使用、公路、水渠、河流监控

    • 农作物监控

    • 军事检测

    二、目标检测原理

    目标检测分为两大系列——RCNN系列和YOLO系列,RCNN系列是基于区域检测的代表性算法,YOLO是基于区域提取的代表性算法,另外还有著名的SSD是基于前两个系列的改进。

    1. 候选区域产生

    很多目标检测技术都会涉及候选框(bounding boxes)的生成,物体候选框获取当前主要使用图像分割与区域生长技术。区域生长(合并)主要由于检测图像中存在的物体具有局部区域相似性(颜色、纹理等)。目标识别与图像分割技术的发展进一步推动有效提取图像中信息。

    1)滑动窗口

    通过滑窗法流程图可以很清晰理解其主要思路:首先对输入图像进行不同窗口大小的滑窗进行从左往右、从上到下的滑动。每次滑动时候对当前窗口执行分类器(分类器是事先训练好的)。如果当前窗口得到较高的分类概率,则认为检测到了物体。对每个不同窗口大小的滑窗都进行检测后,会得到不同窗口检测到的物体标记,这些窗口大小会存在重复较高的部分,最后采用非极大值抑制(Non-Maximum Suppression, NMS)的方法进行筛选。最终,经过NMS筛选后获得检测到的物体。
    滑窗法简单易于理解,但是不同窗口大小进行图像全局搜索导致效率低下,而且设计窗口大小时候还需要考虑物体的长宽比。所以,对于实时性要求较高的分类器,不推荐使用滑窗法。

    2)选择性搜索

    ① 什么是选择性搜索

    滑窗法类似穷举进行图像子区域搜索,但是一般情况下图像中大部分子区域是没有物体的。学者们自然而然想到只对图像中最有可能包含物体的区域进行搜索以此来提高计算效率。选择搜索(selective search,简称SS)方法是当下最为熟知的图像bounding boxes提取算法,由Koen E.A于2011年提出。
    选择搜索算法的主要思想:图像中物体可能存在的区域应该是有某些相似性或者连续性区域的。因此,选择搜索基于上面这一想法采用子区域合并的方法进行提取bounding boxes。首先,对输入图像进行分割算法产生许多小的子区域。其次,根据这些子区域之间相似性(相似性标准主要有颜色、纹理、大小等等)进行区域合并,不断的进行区域迭代合并。每次迭代过程中对这些合并的子区域做bounding boxes(外切矩形),这些子区域外切矩形就是通常所说的候选框。

    ② 选择搜索流程
    • step0:生成区域集R
    • step1:计算区域集R里每个相邻区域的相似度S={s1, s2,…}
    • step2:找出相似度最高的两个区域,将其合并为新集,添加进R
    • step3:从S中移除所有与step2中有关的子集
    • step4:计算新集与所有子集的相似度
    • step5:跳至step2,直至S为空
    ③ 选择搜索优点
    • 计算效率优于滑窗法
    • 由于采用子区域合并策略,所以可以包含各种大小的疑似物体框
    • 合并区域相似的指标多样性,提高了检测物体的概率

    2. 数据表示

    经过标记后的样本数据如下所示:

    预测输出可以表示为:

    y = [ p c b x b y b w b h C 1 C 2 C 3 ] , y t r u e = [ 1 40 45 80 60 0 1 0 ] , y p r e d = [ 0.88 41 46 82 59 0.01 0.95 0.04 ] y = \left[ \begin{matrix} p_c \\ b_x \\ b_y \\ b_w \\ b_h \\ C_1 \\ C_2 \\ C_3 \\ \end{matrix} \right] , y_{true} = \left[ \begin{matrix} 1 \\ 40 \\ 45 \\ 80 \\ 60 \\ 0 \\ 1 \\ 0 \\ \end{matrix} \right] , y_{pred} = \left[ \begin{matrix} 0.88 \\ 41 \\ 46 \\ 82 \\ 59 \\ 0.01 \\ 0.95 \\ 0.04 \\ \end{matrix} \right] y=pcbxbybwbhC1C2C3,ytrue=140458060010,ypred=0.88414682590.010.950.04

    其中, p c p_c pc为预测结果的置信概率, b x , b y , b w , b h b_x, b_y, b_w, b_h bx,by,bw,bh为边框坐标, C 1 , C 2 , C 3 C_1, C_2, C_3 C1,C2,C3为属于某个类别的概率。通过预测结果、实际结果,构建损失函数。损失函数包含了分类、回归两部分组成。

    3. 效果评估

    使用IoU(Intersection over Union,交并比)来判断模型的好坏。所谓交并比,是指预测边框、实际边框交集和并集的比率,一般约定0.5为一个可以接收的值。

    4. 非极大值抑制

    预测结果中,可能多个预测结果间存在重叠部分,需要保留交并比最大的、去掉非最大的预测结果,这就是非极大值抑制(Non-Maximum Suppression,简写作NMS)。如下图所示,对同一个物体预测结果包含三个概率0.8/0.9/0.95,经过非极大值抑制后,仅保留概率最大的预测结果。

    三、目标检测模型

    1. R-CNN系列

    1)R-CNN

    ① 定义

    R-CNN(全称Regions with CNN features) ,是R-CNN系列的第一代算法,其实没有过多的使用“深度学习”思想,而是将“深度学习”和传统的“计算机视觉”的知识相结合。比如R-CNN pipeline中的第二步和第四步其实就属于传统的“计算机视觉”技术。使用selective search提取region proposals,使用SVM实现分类。

    ② 流程
    • 预训练模型。选择一个预训练 (pre-trained)神经网络(如AlexNet、VGG)。
    • 重新训练全连接层。使用需要检测的目标重新训练(re-train)最后全连接层(connected layer)。
    • 提取 proposals并计算CNN 特征。利用选择性搜索(Selective Search)算法提取所有proposals(大约2000幅images),调整(resize/warp)它们成固定大小,以满足 CNN输入要求(因为全连接层的限制),然后将feature map 保存到本地磁盘。
    • 训练SVM。利用feature map 训练SVM来对目标和背景进行分类(每个类一个二进制SVM)
    • 边界框回归(Bounding boxes Regression)。训练将输出一些校正因子的线性回归分类器
    ③ 效果
    • R-CNN在VOC 2007测试集上mAP达到58.5%,打败当时所有的目标检测算法
    ④ 缺点
    • 重复计算,每个region proposal,都需要经过一个AlexNet特征提取,为所有的RoI(region of interest)提取特征大约花费47秒,占用空间
    • selective search方法生成region proposal,对一帧图像,需要花费2秒
    • 三个模块(提取、分类、回归)是分别训练的,并且在训练时候,对于存储空间消耗较大

    2)Fast R-CNN

    ① 定义

    Fast R-CNN是基于R-CNN和SPPnets进行的改进。SPPnets,其创新点在于只进行一次图像特征提取(而不是每个候选区域计算一次),然后根据算法,将候选区域特征图映射到整张图片特征图中。

    ② 流程
    • 使用selective search生成region proposal,大约2000个左右区域候选框
    • (joint training)缩放图片的scale得到图片金字塔,FP得到conv5的特征金字塔
    • (joint training)对于每个scale的每个ROI,求取映射关系,在conv5中剪裁出对应的patch。并用一个单层的SSP layer来统一到一样的尺度(对于AlexNet是6*6)
    • (joint training) 继续经过两个全连接得到特征,这特征又分别共享到两个新的全连接,连接上两个优化目标。第一个优化目标是分类,使用softmax,第二个优化目标是bbox regression,使用了一个平滑的L1-loss
    • 测试时需要加上NMS处理:利用窗口得分分别对每一类物体进行非极大值抑制提出重叠建议框,最终得到每个类别中回归修正后的得分最高的窗口
    ③ 改进
    • 和RCNN相比,训练时间从84小时减少为9.5小时,测试时间从47秒减少为0.32秒。在VGG16上,Fast RCNN训练速度是RCNN的9倍,测试速度是RCNN的213倍;训练速度是SPP-net的3倍,测试速度是SPP-net的3倍
    • Fast RCNN在PASCAL VOC 2007上准确率相差无几,约在66~67%之间
    • 加入RoI Pooling,采用一个神经网络对全图提取特征
    • 在网络中加入了多任务函数边框回归,实现了端到端的训练
    ④ 缺点
    • 依旧采用selective search提取region proposal(耗时2~3秒,特征提取耗时0.32秒)
    • 无法满足实时应用,没有真正实现端到端训练测试
    • 利用了GPU,但是region proposal方法是在CPU上实现的

    3)Faster RCNN

    经过R-CNN和Fast-RCNN的积淀,Ross B.Girshick在2016年提出了新的Faster RCNN,在结构上将特征抽取、region proposal提取, bbox regression,分类都整合到了一个网络中,使得综合性能有较大提高,在检测速度方面尤为明显。

    ① 整体流程
    • Conv Layers。作为一种CNN网络目标检测方法,Faster RCNN首先使用一组基础的卷积/激活/池化层提取图像的特征,形成一个特征图,用于后续的RPN层和全连接层。
    • Region Proposal Networks(RPN)。RPN网络用于生成候选区域,该层通过softmax判断锚点(anchors)属于前景还是背景,在利用bounding box regression(包围边框回归)获得精确的候选区域。
    • RoI Pooling。该层收集输入的特征图和候选区域,综合这些信息提取候选区特征图(proposal feature maps),送入后续全连接层判定目标的类别。
    • Classification。利用取候选区特征图计算所属类别,并再次使用边框回归算法获得边框最终的精确位置。
    ② Anchors

    Anchors(锚点)指由一组矩阵,每个矩阵对应不同的检测尺度大小。如下矩阵:

    [[ -84.  -40.  99.  55.]
     [-176.  -88. 191. 103.]
     [-360. -184. 375. 199.]
     [ -56.  -56.  71.  71.]
     [-120. -120. 135. 135.]
     [-248. -248. 263. 263.]
     [ -36.  -80.  51.  95.]
     [ -80. -168.  95. 183.]
     [-168. -344. 183. 359.]]
    

    其中每行4个值( x 1 , y 1 , x 2 , y 2 x_1, y_1, x_2, y_2 x1,y1,x2,y2),对应矩形框左上角、右下角相对于中心点的偏移量。9个矩形共有三种形状,即1:1, 1:2, 2:1,即进行多尺度检测。

    例如,一张800*600的原始图片,经过VGG下采样后(生成特征矩阵)16倍大小,大小变为50*38,每个点设置9个anchor,则总数为:

    ceil(800 / 16) * ceil(600 / 16) * 9 = 50 * 38 * 9 = 17100
    
    ③ Bounding box regression

    物体识别完成后,通过一种方式对外围框进行调整,使得和目标物体更加接近。

    ④ 损失函数

    对一个图像的损失函数,是一个分类损失函数与回归损失函数的叠加:
    L ( { p i } , { t i } ) = 1 N c l s ∑ L c l s ( p i , p i ∗ ) + λ 1 N r e g ∑ p i ∗ L r e g ( t i , t i ∗ ) L(\{p_i\},\{t_i\}) = \frac{1}{N_{cls}}\sum{L_{cls}(p_i, p_i^*)} + \lambda\frac{1}{N_{reg}}\sum{p_i^*L_{reg}(t_i, t_i^*)} L({pi},{ti})=Ncls1Lcls(pi,pi)+λNreg1piLreg(ti,ti)

    • i是一个mini-batch中anchor的索引

    • p i p_i pi是anchor i 为目标的预测概率

    • ground truth标签 p i ∗ p_i^* pi就是1,如果anchor为负, p i ∗ p_i^* pi就是0

    • t i t_i ti是一个向量,表示预测的包围盒的4个参数化坐标

    • N c l s N_{cls} Ncls是与正anchor对应的ground truth的坐标向量

    • N r e g N_{reg} Nreg为anchor位置的数量(大约2400), λ \lambda λ=10

    分类损失函数:
    L c l s ( p i , p i ∗ ) = − l o g [ p i ∗ p i + ( 1 − p i ∗ ) ( 1 − p i ) ] L_{cls}(p_i, p_i^*) = -log[p_i^*p_i + (1-p_i^*)(1-p_i)] Lcls(pi,pi)=log[pipi+(1pi)(1pi)]
    位置损失函数:
    L r e g ( t i , t i ∗ ) = R ( t i − t i ∗ ) L_{reg}(t_i, t_i^*) = R(t_i - t_i^*) Lreg(ti,ti)=R(titi)
    其中:
    R = s m o o t h L 1 ( x ) = { 0.5 x 2    i f ∣ x ∣ < 1 ∣ x ∣ − 0.5    o t h e r w i s e R = smooth_{L1}(x) = \begin{cases}{0.5x^2} \ \ if |x| < 1\\ |x|-0.5 \ \ otherwise \end{cases} R=smoothL1(x)={0.5x2  ifx<1x0.5  otherwise

    ⑤ 改进
    • 在VOC2007测试集测试mAP达到73.2%,目标检测速度可达5帧/秒
    • 提出Region Proposal Network(RPN),取代selective search,生成待检测区域,时间从2秒缩减到了10毫秒
    • 真正实现了一个完全的End-To-End的CNN目标检测模型
    • 共享RPN与Fast RCNN的特征
    ⑥ 缺点
    • 还是无法达到实时检测目标
    • 获取region proposal, 再对每个proposal分类计算量还是较大

    2. YOLO系列

    1)YOLOv1(2016)

    ① 基本思想

    YOLO(You Only Look Once )是继RCNN,fast-RCNN和faster-RCNN之后,Ross Girshick针对DL目标检测速度问题提出的另一种框架,其核心思想是生成RoI+目标检测两阶段(two-stage)算法用一套网络的一阶段(one-stage)算法替代,直接在输出层回归bounding box的位置和所属类别。

    之前的物体检测方法首先需要产生大量可能包含待检测物体的先验框, 然后用分类器判断每个先验框对应的边界框里是否包含待检测物体,以及物体所属类别的概率或者置信度,同时需要后处理修正边界框,最后基于一些准则过滤掉置信度不高和重叠度较高的边界框,进而得到检测结果。这种基于先产生候选区再检测的方法虽然有相对较高的检测准确率,但运行速度较慢。

    YOLO创造性的将物体检测任务直接当作回归问题(regression problem)来处理,将候选区和检测两个阶段合二为一。只需一眼就能知道每张图像中有哪些物体以及物体的位置。下图展示了各物体检测系统的流程图。

    实际上,YOLO并没有真正去掉候选区,而是采用了预定义候选区的方法,也就是将图片划分为7*7个网格,每个网格允许预测出2个边框,总共49*2个bounding box,可以理解为98个候选区域,它们很粗略地覆盖了图片的整个区域。YOLO以降低mAP为代价,大幅提升了时间效率。

    每个网格单元预测这些框的2个边界框和置信度分数。这些置信度分数反映了该模型对框是否包含目标的可靠程度,以及它预测框的准确程度。置信度定义为:
    Pr ⁡ ( Object )   ∗   IOU pred truth \Pr(\textrm{Object})\ *\ \textrm{IOU}_{\textrm{pred}}^{\textrm{truth}} Pr(Object)  IOUpredtruth
    如果该单元格中不存在目标,则置信度分数应为零。否则,我们希望置信度分数等于预测框与真实值之间联合部分的交集(IOU)。

    每个边界框包含5个预测: x x x y y y w w w h h h和置信度。 ( x , y ) (x,y) (xy)坐标表示边界框相对于网格单元边界框的中心。宽度和高度是相对于整张图像预测的。最后,置信度预测表示预测框与实际边界框之间的IOU。

    每个网格单元还预测 C C C个条件类别概率 Pr ⁡ ( Class i ∣ Object ) \Pr(\textrm{Class}_i | \textrm{Object}) Pr(ClassiObject)。这些概率以包含目标的网格单元为条件。每个网格单元我们只预测的一组类别概率,而不管边界框的的数量 B B B是多少。

    ② 网络结构

    YOLOv1网络有24个卷积层,后面是2个全连接层。我们只使用 1 × 1 1 \times 1 1×1降维层,后面是 3 × 3 3 \times 3 3×3卷积层。如下图所示:

    为了快速实现快速目标检测,YOLOV1还训练了快速版本。快速YOLO使用具有较少卷积层(9层而不是24层)的神经网络,在这些层中使用较少的滤波器。除了网络规模之外,YOLO和快速YOLO的所有训练和测试参数都是相同的。网络的最终输出是7*7*30(1470)的预测张量。

    ③ 训练过程与细节

    (1)预训练。采用前20个卷积层、平均池化层、全连接层进行了大约一周的预训练;

    (2)输入。输入数据为224*224和448*448大小的图像;

    (3)采用相对坐标。通过图像宽度和高度来规范边界框的宽度和高度,使它们落在0和1之间;边界框 x x x y y y坐标参数化为特定网格单元位置的偏移量,边界也在0和1之间;

    (4)损失函数

    • 损失函数由坐标预测、是否包含目标物体置信度、类别预测构成;
    • 其中 1 i o b j 1_i^{obj} 1iobj表示目标是否出现在网格单元 i i i中,表示 1 i j o b j 1_{ij}^{obj} 1ijobj网格单元 i i i中的第 j j j个边界框预测器“负责”该预测;
    • 如果目标存在于该网格单元中(前面讨论的条件类别概率),则损失函数仅惩罚分类错误;
    • 如果预测器“负责”实际边界框(即该网格单元中具有最高IOU的预测器),则它也仅惩罚边界框坐标错误。

    (5)学习率。第一个迭代周期,慢慢地将学习率从 1 0 − 3 10^{-3} 103提高到 1 0 − 2 10^{-2} 102;然后继续以 1 0 − 2 10^{-2} 102的学习率训练75个迭代周期,用 1 0 − 3 10^{-3} 103的学习率训练30个迭代周期,最后用 1 0 − 4 10^{-4} 104的学习率训练30个迭代周期。

    (6)避免过拟合策略。使用dropout和数据增强来避免过拟合。

    ④ 优点与缺点

    (1)优点

    • YOLO检测物体速度非常快,其增强版GPU中能跑45fps(frame per second),简化版155fps
    • YOLO在训练和测试时都能看到一整张图的信息(而不像其它算法看到局部图片信息),因此YOLO在检测物体是能很好利用上下文信息,从而不容易在背景上预测出错误的物体信息
    • YOLO可以学到物体泛化特征

    (2)缺点

    • 精度低于其它state-of-the-art的物体检测系统
    • 容易产生定位错误
    • 对小物体检测效果不好,尤其是密集的小物体,因为一个栅格只能检测2个物体
    • 由于损失函数的问题,定位误差是影响检测效果的主要原因,尤其是大小物体处理上还有待加强

    2)YOLOv2(2016)

    Ross Girshick吸收fast-RCNN和SSD算法,设计了YOLOv2(论文原名《YOLO9000: Better, Faster, Stronger 》),在精度上利用一些列训练技巧,在速度上应用了新的网络模型DarkNet19,在分类任务上采用联合训练方法,结合wordtree等方法,使YOLOv2的检测种类扩充到了上千种,作者在论文中称可以检测超过9000个目标类别,所以也称YOLO9000. YOLOv2模型可以以不同的尺寸运行,从而在速度和准确性之间提供了一个简单的折衷,在67FPS时,YOLOv2在VOC 2007上获得了76.8 mAP。在40FPS时,YOLOv2获得了78.6 mAP,比使用ResNet的Faster R-CNN和SSD等先进方法表现更出色,同时仍然运行速度显著更快。

    ① 改进策略

    YOLOv2对YOLOv1采取了很多改进措施,以提高模型mAP,如下图所示:

    (1)Batch Normalization(批量正则化)。YOLOv2中在每个卷积层后加Batch Normalization(BN)层,去掉dropout. BN层可以起到一定的正则化效果,能提升模型收敛速度,防止模型过拟合。YOLOv2通过使用BN层使得mAP提高了2%。

    (2)High Resolution Classifier(高分辨率分类器)。原来的YOLO网络在预训练的时候采用的是224*224的输入(这是因为一般预训练的分类模型都是在ImageNet数据集上进行的),然后在detection的时候采用448*448的输入,这会导致从分类模型切换到检测模型的时候,模型还要适应图像分辨率的改变。而YOLOv2则将预训练分成两步:先用224*224的输入从头开始训练网络,大概160个epoch(表示将所有训练数据循环跑160次),然后再将输入调整到448*448,再训练10个epoch。注意这两步都是在ImageNet数据集上操作。最后再在检测的数据集上fine-tuning,也就是detection的时候用448*448的图像作为输入就可以顺利过渡了。作者的实验表明这样可以提高几乎4%的mAP。

    (3)Convolutional With Anchor Boxes(带Anchor Boxes的卷积)。 YOLOv1利用全连接层直接对边界框进行预测,导致丢失较多空间信息,定位不准。YOLOv2去掉了YOLOv1中的全连接层,使用Anchor Boxes预测边界框,同时为了得到更高分辨率的特征图,YOLOv2还去掉了一个池化层。由于图片中的物体都倾向于出现在图片的中心位置,若特征图恰好有一个中心位置,利用这个中心位置预测中心点落入该位置的物体,对这些物体的检测会更容易。所以总希望得到的特征图的宽高都为奇数。YOLOv2通过缩减网络,使用416*416的输入,模型下采样的总步长为32,最后得到13*13的特征图,然后对13*13的特征图的每个cell预测5个anchor boxes,对每个anchor box预测边界框的位置信息、置信度和一套分类概率值。使用anchor boxes之后,YOLOv2可以预测13*13*5=845个边界框,模型的召回率由原来的81%提升到88%,mAP由原来的69.5%降低到69.2%.召回率提升了7%,准确率下降了0.3%。

    (4)Dimension Clusters(维度聚类)。在Faster R-CNN和SSD中,先验框都是手动设定的,带有一定的主观性。YOLOv2采用k-means聚类算法对训练集中的边界框做了聚类分析,选用boxes之间的IOU值作为聚类指标。综合考虑模型复杂度和召回率,最终选择5个聚类中心,得到5个先验框,发现其中中扁长的框较少,而瘦高的框更多,更符合行人特征。通过对比实验,发现用聚类分析得到的先验框比手动选择的先验框有更高的平均IOU值,这使得模型更容易训练学习。

    VOC和COCO的聚类边界框尺寸。我们对边界框的维度进行k-means聚类,以获得我们模型的良好先验。左图显示了我们通过对k的各种选择得到的平均IOU。我们发现k=5给出了一个很好的召回率与模型复杂度的权衡。右图显示了VOC和COCO的相对中心。这两种先验都赞成更薄更高的边界框,而COCO比VOC在尺寸上有更大的变化。

    (5)New Network(新的网络)。 YOLOv2采用Darknet-19,其网络结构如下图所示,包括19个卷积层和5个max pooling层,主要采用3*3卷积和1*1卷积,这里1*1卷积可以压缩特征图通道数以降低模型计算量和参数,每个卷积层后使用BN层以加快模型收敛同时防止过拟合。最终采用global avg pool 做预测。采用YOLOv2,模型的mAP值没有显著提升,但计算量减少了。

    (6)直接定位预测(Direct location Prediction)。 Faster R-CNN使用anchor boxes预测边界框相对先验框的偏移量,由于没有对偏移量进行约束,每个位置预测的边界框可以落在图片任何位置,会导致模型不稳定,加长训练时间。YOLOv2沿用YOLOv1的方法,根据所在网格单元的位置来预测坐标,则Ground Truth的值介于0到1之间。网络中将得到的网络预测结果再输入sigmoid函数中,让输出结果介于0到1之间。设一个网格相对于图片左上角的偏移量是 c x , c y c_x,c_y cxcy。先验框的宽度和高度分别是 p w p_w pw p h p_h ph,则预测的边界框相对于特征图的中心坐标 ( b x , b y ) (b_x,b_y) (bxby)和宽高 b w , b h b_w,b_h bwbh的计算公式如下图所示。

    其中, σ \sigma σ为sigmoid函数; t x , t y t_x,t_y tx,ty预测的坐标偏移值(中心点坐标); t w , t h t_w, t_h tw,th是尺度缩放,分别经过sigmoid,输出0-1之间的偏移量,与 c x , c y c_x, c_y cx,cy相加后得到bounding box中心点的位置。

    (7)细粒度特征(Fine-Grained Features)。 YOLOv2借鉴SSD使用多尺度的特征图做检测,提出pass through层将高分辨率的特征图与低分辨率的特征图联系在一起,从而实现多尺度检测。YOLOv2提取Darknet-19最后一个max pool层的输入,得到26*26*512的特征图。经过1*1*64的卷积以降低特征图的维度,得到26*26*64的特征图,然后经过pass through层的处理变成13*13*256的特征图(抽取原特征图每个2*2的局部区域组成新的channel,即原特征图大小降低4倍,channel增加4倍),再与13*13*1024大小的特征图连接,变成13*13*1280的特征图,最后在这些特征图上做预测。使用Fine-Grained Features,YOLOv2的性能提升了1%。

    (8)多尺度训练(Multi-Scale Training)。 YOLOv2中使用的Darknet-19网络结构中只有卷积层和池化层,所以其对输入图片的大小没有限制。YOLOv2采用多尺度输入的方式训练,在训练过程中每隔10个batches,重新随机选择输入图片的尺寸,由于Darknet-19下采样总步长为32,输入图片的尺寸一般选择32的倍数{320,352,…,608}(最小的选项是320×320,最大的是608×608。我们调整网络的尺寸并继续训练)。采用Multi-Scale Training, 可以适应不同大小的图片输入,当采用低分辨率的图片输入时,mAP值略有下降,但速度更快,当采用高分辨率的图片输入时,能得到较高mAP值,但速度有所下降。

    YOLOv2比先前的检测方法更快,更准确。它也可以以不同的分辨率运行,以便在速度和准确性之间进行简单折衷
    ② 训练过程
    • 第一阶段:现在ImageNet分类数据集上训练Darknet-19,此时模型输入为224*224,共训练160轮
    • 第二阶段:将网络输入调整为448*448,继续在ImageNet分类数据集上训练细调模型,共10轮,此时分类模型top-1准确率为76.5%,而top-5准确度为93.3%
    • 第三阶段:修改Darknet-19分类模型为检测模型,并在检测数据集上继续细调网络
    ③ 优点与缺点

    (1)优点

    • YOLOv2使用了一个新的分类器作为特征提取部分,较多使用了3*3卷积核,在每次池化后操作后把通道数翻倍。网络使用了全局平均池化,把1*1卷积核置于3*3卷积核之间,用来压缩特征。也用了batch normalization稳定模型训练
    • 最终得出的基础模型就是Darknet-19,包含19个卷积层,5个最大池化层,运算次数55.8亿次,top-1图片分类准确率72.9%,top-5准确率91.2%
    • YOLOv2比VGG16更快,精度略低于VGG16

    (2)缺点

    • YOLOv2检测准确率不够,比SSD稍差
    • 不擅长检测小物体
    • 对近距离物体准确率较低

    3)YOLOv3(2018)

    YOLOv3总结了自己在YOLOv2的基础上做的一些尝试性改进,有的尝试取得了成功,而有的尝试并没有提升模型性能。其中有两个值得一提的亮点,一个是使用残差模型,进一步加深了网络结构;另一个是使用FPN架构实现多尺度检测。

    ① 改进
    • 新网络结构:DarkNet-53;
    • 用逻辑回归替代softmax作为分类器;
    • 融合FPN(特征金字塔网络),实现多尺度检测。
    ② 多尺度预测

    YOLOv3在基本特征提取器上添加几个卷积层,其中最后一个卷积层预测了一个三维张量——边界框,目标和类别预测。 在COCO实验中,为每个尺度预测3个框,所以对于4个边界框偏移量,1个目标预测和80个类别预测,张量的大小为N×N×[3 *(4 + 1 + 80)]。接下来,从前面的2个层中取得特征图,并将其上采样2倍。

    YOLOv3还从网络中的较前的层中获取特征图,并使用按元素相加的方式将其与上采样特征图进行合并。这种方法使得能够从上采样的特征图中获得更有意义的语义信息,同时可以从更前的层中获取更细粒度的信息。然后,再添加几个卷积层来处理这个组合的特征图,并最终预测出一个类似的张量,虽然其尺寸是之前的两倍。

    最后,再次使用相同的设计来预测最终尺寸的边界框。因此,第三个尺寸的预测将既能从所有先前的计算,又能从网络前面的层中的细粒度的特征中获益。

    ③ 网络结构

    YOLOv3在之前Darknet-19的基础上引入了残差块,并进一步加深了网络,改进后的网络有53个卷积层,取名为Darknet-53,网络结构如下图所示(以256*256的输入为例):

    从YOLOv1到YOLOv2再到YOLO9000、YOLOv3, YOLO经历三代变革,在保持速度优势的同时,不断改进网络结构,同时汲取其它优秀的目标检测算法的各种trick,先后引入anchor box机制、引入FPN实现多尺度检测等。

    不同backbone的各种网络在准确度,billions of operations,billion floating point operations per second和FPS上的比较

    每个网络都使用相同的设置进行训练,并在256×256的图像上进行单精度测试。 运行时间是在Titan X上用256×256图像进行测量的。因此,Darknet-53可与最先进的分类器相媲美,但浮点运算更少,速度更快。 Darknet-53比ResNet-101更好,且速度快1.5倍。 Darknet-53与ResNet-152具有相似的性能,但速度快2倍。

    Darknet-53也实现了最高的每秒浮点运算测量。 这意味着网络结构可以更好地利用GPU,使它的评测更加高效,更快。 这主要是因为ResNet的层数太多,效率不高。

    ④ 效果

    (1)兼顾速度与准确率。在COCO数据机上,mAP指标与SSD模型相当,但速度提高了3倍;mAP指标比RetinaNet模型差些,但速度要高3.8倍。

    (2)小目标检测有所提升,但中等和更大尺寸的物体上的表现相对较差。

    当然,YOLOv3也有些失败的尝试,并未起到有效作用,请自行查阅原始论文。

    三、视频关键帧处理

    例如,需要从一台晚会中抹去某个违法明星的视频,如果视频每秒25帧,采用逐帧扫描,每处理一帧需要2秒,则需要的处理时间为:

    时间 = 4 * 3600 * 25 * 2
    

    共需要200个小时才能处理完成。所以就需要借助关键帧来提高处理速度,降低目标检测复杂度。

    1. 什么是关键帧

    关键帧(I-Frame):

    • 关键帧是包含该段视频中主要信息的帧

    • 关键帧在压缩成AVI, MP4, MOV等格式时,该帧会完全保留

    • 视频解码时只需要本帧数据,不需要从前一帧、后一帧获取数据

    前向差别帧(P-Frame)

    • 当前帧与前一个I-Frame或前一个P-Frame之间的差别,可以理解为与前一帧的数据偏移值
    • P-Frame没有完整数据画面,只有与前一帧的差别信息,解码时需要从前一帧获取数据

    双向差别帧(B-Frame)

    • 记录本帧与前一帧、后一帧的差别
    • 解码时需要获取前一帧、后一帧的数据
    • 压缩后的视频体积小,但编解码计算较慢

    2. 如何提取关键帧

    可以使用FFMPEG工具提取视频中的关键帧。

    也可以使用FFMPEG工具进行视频截取。

    四、目标检测数据集

    1. PASCAL VOC

    VOC数据集是目标检测经常用的一个数据集,自2005年起每年举办一次比赛,最开始只有4类,到2007年扩充为20个类,共有两个常用的版本:2007和2012。学术界常用5k的train/val 2007和16k的train/val 2012作为训练集,test 2007作为测试集,用10k的train/val 2007+test 2007和16k的train/val 2012作为训练集,test2012作为测试集,分别汇报结果。

    2. MS COCO

    COCO数据集是微软团队发布的一个可以用来图像recognition+segmentation+captioning 数据集,该数据集收集了大量包含常见物体的日常场景图片,并提供像素级的实例标注以更精确地评估检测和分割算法的效果,致力于推动场景理解的研究进展。依托这一数据集,每年举办一次比赛,现已涵盖检测、分割、关键点识别、注释等机器视觉的中心任务,是继ImageNet Challenge以来最有影响力的学术竞赛之一。

    相比ImageNet,COCO更加偏好目标与其场景共同出现的图片,即non-iconic images。这样的图片能够反映视觉上的语义,更符合图像理解的任务要求。而相对的iconic images则更适合浅语义的图像分类等任务。

    COCO的检测任务共含有80个类,在2014年发布的数据规模分train/val/test分别为80k/40k/40k,学术界较为通用的划分是使用train和35k的val子集作为训练集(trainval35k),使用剩余的val作为测试集(minival),同时向官方的evaluation server提交结果(test-dev)。除此之外,COCO官方也保留一部分test数据作为比赛的评测集。

    3. Google Open Image

    Open Image是谷歌团队发布的数据集。最新发布的Open Images V4包含190万图像、600个种类,1540万个bounding-box标注,是当前最大的带物体位置标注信息的数据集。这些边界框大部分都是由专业注释人员手动绘制的,确保了它们的准确性和一致性。另外,这些图像是非常多样化的,并且通常包含有多个对象的复杂场景(平均每个图像 8 个)。

    4. ImageNet

    ImageNet是一个计算机视觉系统识别项目, 是目前世界上图像识别最大的数据库。ImageNet是美国斯坦福的计算机科学家,模拟人类的识别系统建立的。能够从图片识别物体。ImageNet数据集文档详细,有专门的团队维护,使用非常方便,在计算机视觉领域研究论文中应用非常广,几乎成为了目前深度学习图像领域算法性能检验的“标准”数据集。ImageNet数据集有1400多万幅图片,涵盖2万多个类别;其中有超过百万的图片有明确的类别标注和图像中物体位置的标注。

    五、常用图像标注工具

    1. LabelImg

    1)LabelImg 是一款开源的图像标注工具,标签可用于分类和目标检测,它是用 Python 编写的,并使用Qt作为其图形界面,简单好用。注释以 PASCAL VOC 格式保存为 XML 文件,这是 ImageNet 使用的格式。 此外,它还支持 COCO 数据集格式。

    2)安装方法:

    前置条件:安装Python3以上版本,安装pyqt5
    第一步:下载安装包
    第二步:使用Pycharm打开项目,运行labelImg.py文件;或直接运行labelImg.py文件

    3)常见错误处理:

    ① 报错:ModuleNotFoundError: No module named ‘libs.resources’

    • 处理方式:
      • 将python下scripts添加到环境变量path中
      • 在labelImg目录下执行命令:pyrcc5 -o resources.py resources.qrc
      • 将生成的resources.py拷贝到labelImg/libs/下
      • 执行labelImg.py程序

    2. Labelme

    labelme 是一款开源的图像/视频标注工具,标签可用于目标检测、分割和分类。灵感是来自于 MIT 开源的一款标注工具 Labelme。Labelme具有的特点是:

    • 支持图像的标注的组件有:矩形框,多边形,圆,线,点(rectangle, polygons, circle, lines, points)
    • 支持视频标注
    • GUI 自定义
    • 支持导出 VOC 格式用于 semantic/instance segmentation
    • 支出导出 COCO 格式用于 instance segmentation

    3. Labelbox

    Labelbox 是一家为机器学习应用程序创建、管理和维护数据集的服务提供商,其中包含一款部分免费的数据标签工具,包含图像分类和分割,文本,音频和视频注释的接口,其中图像视频标注具有的功能如下:

    • 可用于标注的组件有:矩形框,多边形,线,点,画笔,超像素等(bounding box, polygons, lines, points,brush, subpixels)
    • 标签可用于分类,分割,目标检测等
    • 以 JSON / CSV / WKT / COCO / Pascal VOC 等格式导出数据
    • 支持 Tiled Imagery (Maps)
    • 支持视频标注 (快要更新)

    4. RectLabel

    RectLabel 是一款在线免费图像标注工具,标签可用于目标检测、分割和分类。具有的功能或特点:

    • 可用的组件:矩形框,多边形,三次贝塞尔曲线,直线和点,画笔,超像素
    • 可只标记整张图像而不绘制
    • 可使用画笔和超像素
    • 导出为YOLO,KITTI,COCO JSON和CSV格式
    • 以PASCAL VOC XML格式读写
    • 使用Core ML模型自动标记图像
    • 将视频转换为图像帧

    5. CVAT

    CVAT 是一款开源的基于网络的交互式视频/图像标注工具,是对加州视频标注工具(Video Annotation Tool) 项目的重新设计和实现。OpenCV团队正在使用该工具来标注不同属性的数百万个对象,许多 UI 和 UX 的决策都基于专业数据标注团队的反馈。具有的功能

    • 关键帧之间的边界框插值
    • 自动标注(使用TensorFlow OD API 和 Intel OpenVINO IR格式的深度学习模型)

    6. VIA

    VGG Image Annotator(VIA)是一款简单独立的手动注释软件,适用于图像,音频和视频。 VIA 在 Web 浏览器中运行,不需要任何安装或设置。 页面可在大多数现代Web浏览器中作为离线应用程序运行。

    • 支持标注的区域组件有:矩形,圆形,椭圆形,多边形,点和折线

    附录:术语表

    英文全写英文简写中文名称
    one stage一阶段检测
    two stage两阶段检测
    region proposalRP候选区域(一个有可能包含待检物体的预选框)
    bounding boxesbb候选框
    Non-Maximum SuppressionNMS非极大值抑制
    selective searchSS选择搜索
    Regions with CNN featuresR-CNN
    region of interestRoI感兴趣区域(候选区域)
    You Only Look OnceYOLO
    frame per secondfps帧每秒
    High Resolution Classifier高分辨率分类器
    Batch NormalizationBN批量正则化
    Mean Average PrecisionmAP平均精度均值
    Intersection over UnionIOU交并比(“预测的边框” 和 “真实的边框” 的交集和并集的比值)
    Fine-Grained Features细粒度特征
    Feature Pyramid NetworkFPN特征金字塔网络

    更多信息请关注公众号:

    展开全文
  • 3d目标检测

    千次阅读 2022-04-15 18:35:07
    室外三维目标检测算法 基于单目视觉的三维目标检测 基于双目/深度视觉的三维目标检测 基于体素(Voxel)的鸟瞰图(Bird's Eye View,BEV)目标检测方法 基于逐点云特征(Point-wise Feature)的目标检测方法 基于相机视图...
  • 使用深度学习和 OpenCV 进行目标检测 基于深度学习的对象检测时,您可能会遇到三种主要的对象检测方法: Faster R-CNNs (Ren et al., 2015) You Only Look Once (YOLO) (Redmon et al., 2015) Single Shot ...
  • 遥感图像目标检测研究综述

    千次阅读 2022-04-10 21:16:56
    遥感图像目标检测研究综述
  • 目标检测算法基础

    千次阅读 2022-04-17 08:47:39
    人脸检测是目标检测的其中一个方向,它在安防监控、人证比对、人机交互、社交和娱乐等方面有很强的应用价值,也是人脸识别算法、人脸关键点检测算法、人脸位姿估计算法等的第一步。 人脸检测任务关注的是图像中人脸...
  • 目标检测

    万次阅读 2019-02-26 19:22:31
    文章目录第八章 目标检测8.1 基本概念8.1.1 什么是目标检测?8.1.2 目标检测要解决的核心问题?8.1.2 目标检测算法分类?8.2 Two Stage目标检测算法8.2.1 R-CNN8.2.2 Fast R-CNN8.2.3 Faster R-CNN8.2.4 R-FCN8.2.5 ...
  • 典型恶劣天气条件下高铁周界入侵目标检测 图模型融合时空特征的视觉显著性目标检测算法研究 基于SAR图像的舰船目标检测方法研究 基于三维点云分析的智能汽车目标检测方法研究 基于传播模型的显著目标检测...
  • 2021年小目标检测最新研究综述

    千次阅读 2021-08-16 01:02:16
    作者丨高新波、莫梦竟成、汪海涛、冷佳旭编辑丨极市平台导读与以往将小目标与常规目标等同对待或只关注特定应用场景下的目标检测综述不同,本文对小目标检测这一不可或缺且极具挑战性的研究领域进行...
  • 零样本目标检测:鲁棒的区域特征合成器用于目标检测(附论文下载) 论文地址:https://arxiv.org/pdf/2201.00103.pdf 摘要 零样本目标检测(Zero-shot object detection)旨在结合类语义向量来实现在给定无约束测试...
  • 接下来我们进入Python图像识别第二阶段,该部分主要以目标检测、图像识别以及深度学习相关图像分类为主,将会分享近50篇文章,感谢您一如至往的支持。希望文章对您有所帮助,如果有不足之处,还请海涵~
  • CVPR2022 目标检测方向文章(附摘要)

    万次阅读 多人点赞 2022-03-24 11:25:02
    CVPR2022目标检测论文整理(持续更新)
  • 2D目标检测论文大盘点(37篇)

    千次阅读 2022-04-02 12:00:00
    本文浅谈37篇有代表性的基于深度学习的2D目标检测算法,包含一阶段、二阶段以及轻量化网络,并在不同角度分析相关算法的优劣。
  • YOLO系列目标检测数据集大全

    千次阅读 2022-04-17 15:42:06
    YOLO系列目标检测数据集大全目标检测数据集无人机检测数据集飞鸟检测数据集人脸和口罩检测数据集安全帽检测数据集火焰检测数据集火焰和烟雾检测数据集行人检测数据集行人车辆检测数据集车辆检测数据集待更新…… ...
  • 随着深度学习的发展,基于深度学习的目标检测技术取得了巨大的进展,但小目标由于像素少,难以提取有效信息,造成小目标的检测面临着巨大的困难和挑战. 为了提高小目标的检测性能,研究人员从网络结构、训练策略、...
  • 常见经典目标检测算法

    千次阅读 2022-05-31 15:39:16
    目标检测(Object Dectection)的任务是图像中所有感兴趣的目标(物体),确定他们的类别和位置。除图像分类外,目标检测要解决的核心问题是:
  • 目标检测算法分类

    千次阅读 2021-12-07 16:54:40
    目标检测算法分类: 1、两步走的目标检测:先找出候选的一些区域,再对区域进行调整分类 代表:R-CNN、SPP-net、Fast R-CNN、Faster R-CNN 2、端到端的目标检测:采用一个网络一步到位,输入图片,输出有哪些...
  • 从0开始实现目标检测——原理篇

    千次阅读 2022-02-15 19:56:07
    收到一个任务,对交通场景中的图片进行目标检测,要能识别出指定的6个类别物品在图中的位置。比如要识别下图中的小汽车、行人、自行车、卡车等。 比如下图: 经过识别后,如图所示: 经过目标检测模型预测的...
  • YOLOv5 小目标检测、无人机视角小目标检测

    万次阅读 多人点赞 2021-12-06 19:10:54
    YOLOv5 训练自己的小目标检测
  • 3D目标检测

    千次阅读 2022-02-28 14:51:11
    一、综述 1.1概述: 3D目标检测目前主要的应用场景就是自动...普通2D目标检测并不能提供感知环境所需要的全部信息,仅能提供目标物体在二维图片中的位置和对应类别的置信度,而3D目标检测结合了深度信息,能够提供目标
  • 睿智的目标检测20——利用mAP计算目标检测精确度

    万次阅读 多人点赞 2020-03-06 17:12:48
    睿智的目标检测20——利用mAP计算目标检测精确度学习前言GITHUB代码下载知识储备1、IOU的概念2、TP TN FP FN的概念3、precision(精确度)和recall(召回率)4、概念举例5、单个指标的局限性什么是AP绘制mAP ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 688,943
精华内容 275,577
关键字:

目标检测

友情链接: xhdl_4.2.1.rar