精华内容
下载资源
问答
  • 小目标检测

    千次阅读 2019-12-19 10:39:00
    向AI转型的程序员都关注了这个号????????????机器学习AI算法工程 公众号:datayx目标检测(object detection),就是在给定的一张图片中精确找到物体所在...

    向AI转型的程序员都关注了这个号????????????

    机器学习AI算法工程   公众号:datayx

    目标检测(object detection),就是在给定的一张图片中精确找到物体所在的位置,并标注出物体的类别。所以,目标检测要解决的问题就是物体在哪里以及是什么的整个流程问题。但是,在实际照片中,物体的尺寸变化范围很大,摆放物体的角度、姿态、在图片中的位置都不一样,物体之间可能还有重叠现象,这使得目标检测的难度变得很大。

    目标检测近些年取得了较大发展,主要原因就是卷积神经网络在目标检测任务的应用代替了原有的基于人工规则提取特征的方法。

    • 传统的目标检测算法:
      Cascade + HOG/DPM + Haar/SVM以及上述方法的诸多改进、优化。
      传统的目标检测中,多尺度形变部件模型DPM(Deformable Part Model)表现比较优秀,连续获得VOC(Visual Object Class)2007到2009的检测冠军,。DPM把物体看成了多个组成的部件(比如人脸的鼻子、嘴巴等),用部件间的关系来描述物体,这个特性非常符合自然界很多物体的非刚体特征。DPM可以看做是HOG+SVM的扩展,很好的继承了两者的优点,在人脸检测、行人检测等任务上取得了不错的效果,但是DPM相对复杂,检测速度也较慢,从而也出现了很多改进的方法。
      但传统目标检测存在两个主要问题:一个是基于滑动窗口的区域选择策略没有针对性,时间复杂度高,窗口冗余;二是手工设计的特征对于多样性的变化并没有很好的鲁棒性。

    • 基于深度学习的目标检测算法:

      • 以候选区域/框(Region Proposal) + 深度学习分类的算法:
        通过提取候选区域,并对相应区域进行以深度学习方法为主的分类的方案,比如R-CNN(Selective Search + CNN + SVM)、SPP-net(ROI Pooling)、Fast R-CNN(Selective Search + CNN + ROI)、Faster R-CNN(RPN + CNN + ROI)、Mask R-CNN(Mask Prediction Branch+RPN + CNN + ROI)等。

      • 基于深度学习的回归算法:
        YOLO、SSD、YOLOv2、YOLOv3等算法

    目前目标检测领域的深度学习方法主要分为两类:two stage 的目标检测算法;one stage 的目标检测算法。前者是先由算法生成一系列作为样本的候选框,再通过卷积神经网络进行样本分类;后者则不用产生候选框,直接将目标边框定位的问题转化为回归问题处理。正是由于两种方法的差异,在性能上也有不同,前者在检测准确率和定位精度上占优,后者在算法速度上占优。

    小目标检测

    小目标有两种定义方式,一种是相对尺寸大小,如目标尺寸的长宽是原图像尺寸的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固有的缺陷是训练速度较慢(部分操作无法矩阵化)。

    所谓的小目标,要看是绝对小目标(像素),和相对小目标(相对原图的长宽来看的)。大目标小目标只跟receptive field(感受野)有关,cnn本身可以检测任何尺度的物体。ssd对小目标检测不太适用,但R-FCN速度和鲁棒存在问题。

    以下是收藏的关于小目标的讨论,持续跟进:

    https://www.zhihu.com/question/49455386

    https://github.com/tensorflow/models/issues/3196

    小目标分为很多种,背景单一还是比较好做的。有一篇小人脸检测用的是 fullyconvolutionalnetwork(FCN) + ResNet ,此篇论文检测小目标用了其周边的信息,如头发,肩膀。

    首先,小目标像素少特征不明显,因此和大目标相比,小目标的检测率低,这个用任何算法上都是无法避免的。那不同算法之间的小目标检测的区别呢?SSD,YOLO等单阶段多尺度算法,小目标检测需要较高的分辨率,SSD对于高分辨率的底层特征没有再利用,而这些层对于检测小目标很重要,因此主要在底部的特征层进行检测,比如SSD中的conv4_3,但底部特征层的语义信息不够丰富,这是一个矛盾,但卷积层加足够深的话影响其实没这么大。我觉得最重要的因素还是因为scale设置的不好导致的,SSD中默认最低一层的anchor为 0.1~0.2,对于720p的图像最小检测尺寸就有72个像素,还是太大了。事实上SSD的源码允许一个特征层做多个尺度的滑窗,将参数min_sizes里的每个元素初始化为一个列表,就可以在相应特征层中生成不同尺度的anchor,如果你设计的足够仔细,基本就可以覆盖足够小的目标了,不过此时anchor的数量估计会涨不少,速度也会降下来。

    faster rcnn,yolo,ssd对小目标检测结果都不好,原因在于卷积网络结构的最后一层feature map太小,例如32*32的目标经过vgg后变成2*2,导致之后的检测和回归无法满足要求。卷积网络越深语义信息越强,而越低层则是描述的局部外观信息越多,而且我想VGG16卷积层设计成这么多肯定是有意义的,如果靠前的效果好,VGG的研究者应该想到减少层数了,我觉得可以考虑提取多层的特征这样表达能力强些。比如样本猫狗图像,较小的猫的ground truth只是出现在底层,高层没有猫的ground truth,而较大物体狗匹配到的ground truth在高层feature map上),其他层的信息只是简单拼接(所以小物体检测的语义信息,contex信息差一些)。

    SSD是多尺度的特征图进行paopasal提取,ssd相对于yolo来说对小目标更稳定。yolo则是通过全局特征去直接得到预测结果,完全要靠数据堆积起来,对待小目标我觉得要考虑减少pooling

    SSD里负责检测小目标的层为conv4_3(38*38)对应的尺度为0.2(可人为设置)。这就对应了SSD所能检测的尺度大概为0.2上下。在这种情况下,如果物体过于小的话,甚至在训练阶段,GT都没法找到相应的的default box与它匹配,效果怎么可能会好。如果不介意整体检测效果的话,可以把尺度调低,看看对于小目标的检测效果是否有提升。另外,利用多尺度进行检测也能提高小物体的检测效果。

    SSD使用的VGG16作为特征抽取,在conv4_3 feature map 的分辨率已经缩小了8倍,在conv5_3缩小了16倍,比如一个32*32大小的物体,在vgg16 的 conv5_3的feature map 对应仅为2*2,位置信息有较大的损失。有两种方法可决绝这个问题:1.使用不同层的特征,比如hyperNet,MultiPath。2.保证感受也不缩小的情况下feature map的分辨率不至于缩小太多,如采用DeepLab中采用的Hole algorithm,在保证感受野的同时分辨变化较小。

    他们对小目标检测不好的原因主要是,SSD/YOLO 对原图做了缩放,因为感受野的原因,导致“相对尺寸小”目标检测困难。如果说RCNN系列,并没有对原图进行缩放,但是如果”绝对尺寸小“的话,也没有办法,因为到了一定深度的Feature map,小目标可能已经丢失response了。1.小目标往往更依赖浅层特征,因为浅层特征有更高的分辨率,然而对语义区分较差。2.SSD检测和分类一起做,会把一些检测到但是分类模糊,分数不高的结果过滤掉。而rpn不会,前200个候选继续分类,都会有个结果。3.为了速度,本来是全卷积网络,却也固定了输入尺寸,对大图的小目标影响很大。

     

    一些比较好的观点

    CNN特征的分辨率较差,这点不比其它low-level(浅层)的特征,证据就是在pedestrian detection(行人检测)上, 一些hand-crafted features(手工制作特征)的效果还是不错的;Faster-rcnn和SSD本身的问题,原始的Faster-rnn在RPN中将input的最短边固定resize到600>SSD512>SSD300,SSD使用300和512的原因是为了提高detection speed,所以SSD才这样快;同时为保证精度,SSD才加上了multi-scale和data augmentation(尤其值得注意这个augmentation,数据增强)。

    yolo和ssd确实对小物体很无力,而有些普通的图像算法对小物体检测反而好的多,只是不太鲁棒。可以尝试下R-FCN,我测试了几张,好像对小物体还可以,但是速度慢些。在970下0.18s一张的样子。我之前在VGG16上做过R-FCN的实验,使用相同的res101-proposal(只关注detection的效果所以使用的一样),效果不如fast rcnn。同理,在google-v1上(也是全卷积)也是不如,我估计是浅网络的overfitting问题(因为用VGG的proposal去做效果很不好)。

    SSD是一种基于全卷积的网络的检测器,用不同层检测不同大小的物体。这中间有个矛盾,前面的 feature map大,但semantic(语义)不够,后面的sematic够了,但经过太多的pooling,feature map太小了。要检测小物体,既需要一张足够大的feature map来提供更加精细的特征和做更加密集的采样,同时也需要足够的semantic meaning来与背景区分开。参会时问过SSD的作者,如果将最后的feature map放大接上前面的话,是不是能够改善性能,作者说值得一试。

    SSD is a class aware RPN with a lot of bells and whistles。每一个feature map上面的pixel对应几个anchor,这个网络对anchor进行训练,以此驱动对feature进行训练。这是前言。作为小物体,其所对应的anchor比较少 (gt overlap > 0.5 的 anchor),也就是说对应feature map上的pixel难以得到充分训练。读者可以脑补每一个大的ROI可能覆盖很多 anchor,那么这些 anchor 均有机会得到训练。然而一个小物体并不能覆盖很多 anchor。没有得到充分训练有什么问题?在test的时候这个pixel的预测结果可能就是乱的,会极大干扰正常结果。为什么SSD的data augmentation能涨这么多点,就是因为通过randomly crop,让每一个anchor都得到充分训练(也就是说,crop出一个小物体,在新图里面就变成大物体了)只能说这种without region propisal的结果 naturally 不擅长小物体。通过往上堆 hack 才能慢慢比上吧。

    我试过SSD最前面的卷积为深度残差网络,检测小物体效果还不错,比YOLO要好得多。另外SSD原论文中,多级别的物体基本尺寸从0.1到0.8,实际上0.1的比例还是很大的,如1024*1024的输入,0.1都到102了,其实不小。可以根据需求调整级别,我使用的为1/64~1,即不同级别格子本身大小。当然,级别从线性分割变成指数分割后,在基本大小之上的各个变形也需要调整一下(主要是变大),不然有可能覆盖不到有些位于两个格子中间的某些大小的物体。YOLO比较坑的地方在于倒数第二层为全连接,后面的7*7格子不能扩张太大,不然前面的全连接要爆。格子大了,同一个格子可能会包括多个小物体,检测就不好搞了。而YOLO全连接的作用又是整合全局信息,要去掉全连接,就需要增加最后点的感受野,所以深度残差就非常适合。提到深度残差,再说另外一点。在深度残差的作者kaiming大神另一篇文章R-FCN: Object Detection via Region-based Fully Convolutional Networks,中有使用空间pooling,发现深度残差就是天然的自带空间pooling效果的结构啊。补充一点,SSD前面的CNN结构,一定要是全对称的,特别是pooling的时候,这样最后输出点的感受野中心才与每个格子的中心是重合的。如果是非对称的,CNN前面特征提取的时候,它会纠结,造成大量的小物体不好学习。而YOLO最后有全连接都还好,问题不大。最后一句,深度残差就是自带空间pooling结构,这个怎么理解呢。深度残差中的最小单元,一边为两个卷积垒在一起,假设作用只是把图像平移,另一个为直连,那最后接合在一起,就是一个空间相关的组合了嘛。


     

    深度学习、机器学习、数据分析、python

     搜索公众号添加: datayx  

    长按图片,识别二维码,点关注

     

    展开全文
  • 摘要 在各种环境中应用目标检测算法有很多局限性。特别是小目标的检测仍然是一个挑战,因为它们的分辨率低,信息有限。为了提高小目标检测的准确性,...实验结果表明,该方法比传统的SSD在检测小目标上的精度更...

    原论文下载:https://arxiv.org/pdf/1912.06319.pdf

    摘要

           在各种环境中应用目标检测算法有很多局限性。特别是小目标的检测仍然是一个挑战,因为它们的分辨率低,信息有限。为了提高小目标检测的准确性,我们提出了一种基于上下文的目标检测方法。该方法通过融合多尺度特征,利用不同层次的附加特征作为上下文信息。我们还提出了一种基于注意力机制的目标检测方法,该方法能够聚焦于图像中的目标,并且能够包含目标层的上下文信息。实验结果表明,该方法比传统的SSD在检测小目标上的精度更高。此外,在PASCAL VOC2007测试集上,对于300×300的输入,我们的map达到了78.1%。

    一、介绍

           目标检测是计算机视觉中的关键问题之一,其目标是找到目标的bounding box,并在给定图像的情况下对目标进行分类。近年来,在深度学习技术的引领下,目标检测的精度和速度都有了很大的提高:Faster R-CNN达到了73.2%的map,YOLO v2达到了76.8%的MAP,SSD达到了77.5%的map。然而,在检测小物体方面仍然存在重大挑战。例如,SSD在检测小目标上map只能达到20.7%。图1展示了SSD无法检测到小目标时的失败案例。所以在小目标检测方面还有很大的提升空间。 

           小目标检测的难度很大,因为它的分辨率低,像素有限。例如,如果只看图2上的对象,人类甚至很难识别这些对象。然而,如果考虑到物体所处的天空环境,那么目标将可以被识别为鸟类,因此,我们认为解决这一问题的关键在于如何将上下文作为额外信息来帮助检测小物体。

           在本文中,我们提出使用上下文信息来解决小目标检测这一具有挑战性的问题。首先,为了提供足够的关于小对象的信息,我们从小对象的周围像素中提取上下文信息,利用更高层次的抽象特征作为对象的上下文。我们通过连接小目标的特征和上下文的特征增加了小目标的信息,以便检测器能够更好地检测目标。其次,为了聚焦于小目标,我们在浅层特征图使用了一种注意力机制。这也有助于减少背景中不必要的浅层特征信息。在我们的实验中,我们选择了SSD作为我们的基线。然而,这个想法可以推广到其他网络。为了评估我们所提出的模型的性能 ,我们在PASCAL VOC2007和VOC2012进行训练,并与VOC2007上的基线方法和最新方法进行了比较。

    二、相关工作

    1、基于深度学习的目标检测

           深度学习技术的进步极大地提高了目标检测的准确率,基于深度学习目标检测的第一次尝试是R-CNN。R-CNN使用卷积神经网络(CNN)处理通过选择性搜索生成的区域建议(region proposals)。然而,由于每个建议的区域都顺序地通过CNN,因此对于实时应用来说,R-CNN的速度就太慢了。Fast R-CNN比R-CNN更快,因为它对所有区域建议只执行了一次特征提取阶段。但R-CNN 和Fast RCNN这两项工作仍然使用单独的阶段进行区域建议,这也就成为了Faster R-CNN的主要攻击点。Faster R-CNN将区域建议阶段和分类阶段合并为一个阶段,因此它也被称为端到端的学习。YOLO和SSD显示出足以进行实时目标检测的高性能,甚至加速了目标检测技术的发展。然而,它们对于小物体仍然没有表现出良好的性能。

    2 、小目标检测

           最近,关于小目标检测,人们提出了一些想法。Liu 等人通过减小大目标数量来增加小目标数量,以此来克服数据不足的问题,除了数据增强的方法之外,还有一些努力是在不增加数据集的情况下增加所需信息。DSSD将反卷积技术应用于SSD的所有特征图来得到分辨率更高的特征图。然而,由于所有的特征图都要使用反卷积模块,所有DSSD模型具有增加模型复杂度和降低速度的局限性。R-SSD通过pooling 和deconvolution技术融合了不同尺度的feature map,与DSSD相比,获得了更高的精度和速度。李等人使用生成对抗网络(GAN),将低分辨率的特征作为GAN的输入来生成高分辨率的特征。

    3 、视觉注意网络

           深度学习中的注意力机制可以广义地理解为只关注解决特定任务的部分输入,而不是看它的全部输入。因此,注意力机制与我们看到或听到的东西非常相似。Xu 等人使用视觉注意力来生成图像字幕。为了生成与图像相对应的字幕,他们使用了LSTM,LSTM提取给定图像的相关部分。Sharm等人应用注意力机制来识别视频中的动作。Wang 等人通过堆叠残差注意力模块,提高了ImageNet数据集的分类性能。

    三、方法

           本节将讨论基线网络SSD,然后介绍我们建议用于提高小对象检测能力的组件。首先,SSD引入特征融合来获取上下文信息,我们命名该网络为F-SSD。第二,带有注意力模块的SSD使网络能够专注于重要部分,这里我们命名此网络为A-SSD。第三,我们将特征融合和注意力模块结合起来,称为FA-SSD。

    3.1  Single Shot Multibox Detector (SSD)

           在这一部分,我们回顾了SSD算法,我们知道我们要提高对小物体的检测能力。像YOLO一样,SSD也是one-stage检测算法,其目标是提高检测速度,同时还通过处理不同层次的特征图来提高不同尺度下的检测效果,如图3a所示。其思想是利用浅层特征图的高分辨率来检测较小的目标,而利用分辨率较低的较深层特征来检测较大的目标。

           SSD以VGG16作为backbone,并且通过额外增加层来获取不同分辨率的特征图,如图3a所示。根据每个特征图,通过一个附加的卷积层来匹配输出通道,网络预测包含边界框回归和对象分类的输出。

           然而,SSD在小目标上的检测性能仍然很低,在VOC 2007数据集上为20.7%,因此,SSD算法还有很多需要改进的地方。我们认为造成小目标检测性能较低主要有两个原因,首先是缺乏上下文信息来检测小目标。此外,用于小目标检测的特征是从缺乏语义信息的浅层特征中提取的。我们的目标是通过添加特征融合来改进SSD,以解决这两个问题。此外,为了进一步改进SSD算法,我们增加了注意力机制,使网络只关注重要的部分。

     3.2  F-SSD: SSD with context by feature fusion

           为了在我们想要检测目标的给定特征图(target feature map)上添加上下文信息,我们将其与含有上下文特征的深层特征图进行融合。例如在SSD中,给定我们来自conv4_3的目标特征图,我们的上下文特征层来自conv7_2、conv8_2两层(如图3b所示)。虽然我们的特征融合可以推广到任何目标特征及其任何更高的特征。然而,这些特征图具有不同的size,因此我们提出了如图4所示的融合方法。

           在通过concat融合之前,我们通过对含有上下文信息的feature map进行deconvolution操作,使其与目标特征图(target feature map)拥有相同的size,我们将上下文特征通道数设置为目标特征的一半,因此上下文信息量不会超过目标特征本身。对于F-SSD,我们还在不改变target feature map大小和通道数的情况下,在目标特征(target feature map)上增加了一个额外的卷积层。此外,在连接特征图之前,归一化步骤也非常重要,因为不同层中的每个特征值都有不同的尺度。因此,我们对每一层进行批量归一化和RELU操作。最后,通过对目标特征图和上下文特征图进行concat操作,实现了目标特征和上下文特征的融合。

    3.3  A-SSD: SSD with attention module

           视觉注意机制允许聚焦于图像的一部分,而不是看到整个区域。受到Wang 等人提出的残差注意力模块成功的启发,我们也将残差注意力机制应用到了目标检测中。对于我们的A-SSD(如图3c所示),虽然残差注意力模块可以推广到任何一层,但我们只分别在conv4_3和conv7之后放置了two-stage的残差注意力模块。每一个残差注意力阶段都可以在图5中描述,它包含了trunk分支和mask分支。trunk分支有两个residual block,每个block中包含3个卷积层(如图5d所示)。mask分支通过利用残差连接执行下采样和上采样来输出注意图(图5b为第一阶段,图5c为第二阶段),然后利用sigmod函数激活,残差连接可以保持下采样阶段的特征。然后将来自mask分支的注意图与trunk分支的输出相乘,生成已参与的特征。最后,将参与网络的特征经过residual模块、L2标准化和ReLU。

    3.4  FA-SSD: Combining feature fusion and atten-tion in SSD

           我们提出了一种新的方法,该方法连接了章节3.2和3.3中提到的特征,它可以考虑来自目标层和不同层的上下文信息。与F-SSD相比,我们不是在目标特征图上执行一个卷积层,而是设置了一个one-stage注意力模块,如图3d所示,特征融合方式如图4。

    四、实验

    4.1  实验环境

            除非特别指明,否则我们使用VGG16作为backbone,输入大小为300x300的SSD。对于FA-SSD,我们将特征融合方法应用于SSD的conv4_3和conv7。我们以conv4_3为target feature,conv7和conv8_2为上下文特征,以conv7为target feature,conv8_2和conv9_2为上下文特征。在较低的两层特征图应用注意力机制检测小目标。注意模块的输出与target feature的大小相等。我们在PASCAL VOC2007和VOC2012的训练验证集上训练我们的网络,第一个80000次迭代的学习率为10^−3,然后对于100000和120000次迭代学习率降为10^-4和10^-5,batch size为16。所有测试结果均是在VOC2007的测试集上测试得到,我们采用COCO标准对目标大小分类,小目标面积小于32*32,大目标面积大于96*96。我们使用PyTorch和Titan XP进行训练和测试。

    4.2  消融研究

           为了测试特征融合和注意力机制对SSD的重要性,我们比较了SSD、F-SSD、A-SSD和FA-SSD的性能。Table 1显示所有F-SSD、A-SSD都优于SSD,这意味着特征融合和注意力机制都有助于baseline的提高。虽然特征融合和注意力机制相结合的FA-SSD并没有表现出比F-SSD更好的整体性能,但是FA-SSD在小目标检测方面表现出了最好的性能和显著的提升。

    4.3  运行时间

           Table 1中结果的一个有趣之处在于,组件越多,速度并不总是越慢。这促使我们更加详细的了解了推理时间。检测中的推理时间分为网络推理和包含非极大值抑制(NMS)的后处理两部分。根据Table 2,虽然SSD的forward 时间最快,但它在后处理过程中最慢,因此总体上仍然比F-SSD和A-SSD慢。

    4.4  运行结果

           图7显示了SSD和FA-SSD之间的定性比较,其中当FA-SSD成功时,SSD无法检测到小对象。

    4.5  Attention visualization

           为了对注意力机制有更好的理解,我们可视化了来自FA-SSD的注意力 mask。该注意力 mask是在图5a中sigmoid函数之后进行的。注意力mask上有许多通道,在conv4_3上有512个通道,conv7上有1024个通道。每个通道都关注不同的东西,既有对象也有上下文。在图8中,我们对于注意力mask的一些样本进行了可视化。

    4.6  以ResNet为backbone

          为了了解SSD不同backbone的通用性,我们对ResNet结构进行了实验,特别是ResNet18、ResNet34和ResNet50。为了使特征图大小与以VGG16为backbone的原始SSD的特征图大小相同,我们从layer2的结果(如图6a)中提取特征,然后F-SSD(图6b)、A-SSD(图6c)和FA-SSD(图6d)只需遵循以VGG16为backbone的版本。如表3所示,除了以ResNet34为backbone的版本在小目标上的性能不是最好之外,其他一切都跟随表1中以VGG16为backbone的版本的趋势。

    4.7  VOC2007测试结果

          为了与其他作品进行比较,我们在表4中进行了比较。所有比较的方法都用VOC2007 的trainval和VOC2012 的trainval数据集进行训练。虽然与DSSD相比我们的性能更低,但我们的方法运行的FPS为30,而DSSD为12 。

    五、结论

           在本文中,为了提高小目标检测的准确率,我们提出了给SSD增加上下文感知信息的方法。该方法通过融合多尺度特征获取不同层次上的上下文信息,通过注意机制获取目标层上的上下文信息。实验表明,与传统的SSD相比,目标检测的准确率有了很大的提高,特别是对小目标的检测精度有了很大的提高。

    展开全文
  • 目标检测算法——小目标检测

    千次阅读 2021-07-01 18:35:25
    一、定义 1、以物体检测领域的通用数据集COCO...1、包含目标的样本数量较少,这样潜在的让目标检测模型更关注中大目标的检测。 2、由目标覆盖的区域更,这样目标的位置会缺少多样性。我们推测这使得目标
    一、定义
    1、以物体检测领域的通用数据集COCO物体定义为例,小目标是指小于32×32个像素点(中物体是指32*32-96*96,大物体是指大于96*96)。
    2、在实际应用场景中,通常更倾向于使用相对于原图的比例来定义:物体标注框的长宽乘积,除以整个图像的长宽乘积,再开根号,如果结果小于3%,就称之为小目标。
    二、难点
    coco上面:
    1、包含小目标的样本数量较少,这样潜在的让目标检测模型更关注中大目标的检测。
    2、由小目标覆盖的区域更小,这样小目标的位置会缺少多样性。我们推测这使得小目标检测的在验证时的通用性变得很难。
    三、解决方案
    按照常规流程分为:数据层面、backbone、neck & head、其他(后处理、loss)
    数据层面
    1、过采样包含小目标的图像
    注意会使得中大目标一定程度掉点,需要权衡。
    2、在包含小目标样本中多次复制粘贴小目标
    MS COCO中的实例分割mask使得我们可以将任意目标从它原来的位置进行拷贝。拷贝被粘贴在不同的位置。通过增加每张样本中小目标的个数,匹配的anchor的数据增加了。这样改进了小目标在RPN训练期间在loss函数中的贡献。
    但是要注意不同的策略带来的效果,不好的策略甚至造成性能下降
    1)需要保存原图和增广图同时训练
    2)一幅图中黏贴一个物体多次、黏贴多个物体多次、黏贴所有物体多次三种方案,最优的黏贴次数不同,作者的实验条件下黏贴多个物体三次最好。
    3)只考虑 未被遮挡的目标,因为使用有遮挡区域的不连续样本会失真。我们确保新粘贴的目标 不与任何现有的目标重叠,至少与图像边界保持5个像素的距离。不需要进行边缘高斯模糊等(除非用其他更复杂的融合策略)
    4)在将目标粘贴到新路径之前,我们进行随机变换。我们通过将目标尺寸在±20%范围,旋转在±15°范围缩放。
    5)mosaic增强
    3、提升输入图像分辨率
    4、提高图像采集的分辨率
    5、tile图像(裁切)
    检测小物体的另一个重要策略是将图像切割后形成batch,这个操作叫做tile,作为预处理步骤。tile可以有效地将检测器聚焦在小物体上,但允许你保持所需的小输入分辨率,以便能够运行快速推断。 如果你在训练中使用tile,重要的是要记住,你也需要在推理时tile你的图像。
    6、过滤无关类别
    类别管理是提高数据集质量的一项重要技术。如果你有一个类与另一个类明显重叠,你应该从数据集中过滤掉这个类。也许,你认为数据集中的小物体不值得检测,所以你可能希望将其拿掉。
    backbone
    1、RFBNet
    Neck & head
    1、FPN(已开源)
    不同阶段的特征图对应的感受野不同,它们表达的信息抽象程度也不一样。浅层的特征图感受野小,比较适合检测小目标(要检测大目标,则其只“看”到了大目标的一部分,有效信息不够);深层的特征图感受野大,适合检测大目标(要检测小目标,则其”看“到了太多的背景噪音,冗余噪音太多)。所以,有人就提出了将不同阶段的特征图,都融合起来,来提升目标检测的性能,这就是特征金字塔网络。
    这里跳过了SSD网络,因为FPN可以认为是SSD结构的进化。
    2、ssh网络(已开源)
    由于可以通过融合不同分辨率的特征图来提高特征的丰富度和信息含量来检测不同大小的目标,自然会有人进一步猜测,如果只检测高分辨率的特征图(浅层特征)来检测小人脸,使用中分辨率特征图(中间特征)来检测大的脸。(个人感觉并不如FPN,FPN也可以设置不同的规则分治)
    还有一种方法就是不共享主干网络,不同网络检测不同尺寸的人脸(小米是这么干的,由于单独任务简单,每个主干网络也设计的简单)
    整体结构如下:
    检测模块结构如下:
    上下文模块如下:
    3、Faceboxes(已开源)
    对那些底层的小anchor进行一个稠密化的工作,具体就是在每个感受野的中心,也就是SSD中的anchor中心,对其进行偏移。根据其密度大小进行2 、3或4倍的稠密化工作。如下图
    个人感觉可能直接使用后面的anchor free 中基于密集检测的算法更优,比如centernet (object as point)
    4、利用上下文信息
    主要有两篇文章,具体比较晦涩,还未细看
    1) 小目标,特别是像人脸这样的目标,不会单独地出现在图片中(想想单独一个脸出现在图片中,而没有头、肩膀和身体也是很恐怖的)。像[PyramidBox]( PyramidBox: A Context-assisted Single Shot Face Detector )方法,加上一些头、肩膀这样的上下文Context信息,那么目标就相当于变大了一些,上下文信息加上检测也就更容易了。
    2) 通用目标检测中另外一种加入Context信息的思路,[Relation Networks]( Relation Networks for Object Detection )虽然主要是解决提升识别性能和过滤重复检测而不是专门针对小目标检测的,但是也和上面的PyramidBox思想很像的,都是利用上下文信息来提升检测性能,可以归类为Context一类。
    5、利用GAN 网络
    Perceptual GAN 使用了GAN对小目标生成一个和大目标很相似的Super-resolved Feature(如下图所示),然后把这个Super-resolved Feature叠加在原来的小目标的特征图(如下下图所示)上,以此增强对小目标特征表达来提升小目标(在论文中是指交通灯)的检测性能。效果提升非常明显,需要后续仔细学习。
    其他
    1、自动学习模型的anchor
    YOLOv5模型会根据你的自定义数据自动为你完成这项工作。你所要做的就是开始训练。
    主要就是利用kmeas进行聚类。
    2、focal loss
    3、匹配策略
    不是用iou,使用改进版的比如:  GIOU、DIOU、CIOU
    4、如果需要,更改rio pooling为rio align
    5、SNIPER
    图像金字塔是传统的提升物体检测精度的策略之一,其能提升精度的一个原因是尺寸多样性的引入。但是图像金字塔也有一个非常严重的缺点:即增加了模型的计算量,SNIPER提出动机便是解决图像金字塔计算量大的问题。
    需要注意SNIPER并不是一个检测算法,而是对输入图像的一个采样策略,是对图像金字塔的替代。其采样的结果(chips)将作为输入输入到物体检测算法中。
    算法虽然使用了RPN,但是并不是离开了RPN就无法工作了,RPN提供了一个提取假正利率的功能,这个可以通过Selective Search或者Edge Box近似替代。
    另外,SNIPER仅仅是对训练速度的提升,往往更重要的检测速度并没有提升,反而是 模型必须依赖图像金字塔,这反而降低了模型的通用性,并不适合工业界,可能对打比赛提升性能有用
    最后,作者开源的源码和论文出入较大,读起来比较费劲,以后有需要再学习。
    参考链接:
    展开全文
  • 小目标检测在人脸检测领域还是目标检测领域都是难题,如何解决目标问题成为研究者研究的热点。本文总结一些自己见过的小目标检测提升的思路,欢迎各位大佬讨论。 数据增强 数据增强方面,论文推荐Augmentation ...

    点击上方“AI算法修炼营”,选择加星标或“置顶”

    标题以下,全是干货

    来源:本文授权转自知乎作者高毅鹏,整理:极市平台

    https://zhuanlan.zhihu.com/p/121666693,

    未经作者允许,不得二次转载。

    小目标检测在人脸检测领域还是目标检测领域都是难题,如何解决小目标问题成为研究者研究的热点。本文总结一些自己见过的小目标检测提升的思路,欢迎各位大佬讨论。

    数据增强

    数据增强方面,论文推荐Augmentation for small object detection。

    小目标检测中的数据扩展(Augmentation for small object detection)[1]

    Oversampling

    我们通过相对少的包含小目标的在训练时过采样来解决样本少的问题。这个方法是花费最少并且最直接的方式来缓解MS COCO数据集并且改进在小目标检测中的表现。实验中,我们改变过采样率,探索过采样不仅仅在小目标检测,而且在中大型目标检测中同样有效。

    Augmentation

    在 oversampleing 的基础上,我们还引入了针对小目标的数据集的 augmentation。MS COCO 数据集里实例分割中的 mask 使得我们可以将任何标注目标贴到图像中的任意位置。而通过增加每个图像中小目标的数量,匹配的 anchor 的数量也会随之增加,这进而提升了小目标在训练阶段对 loss 计算的贡献。

    将目标粘贴到新位置之前,我们对其进行随机变换。目标缩放范围为±20%±20%,旋转范围为±15∘±15∘。复制时我们只考虑无遮挡的目标,防止图像太不真实。粘贴时确保新粘贴的目标不会与任何现有的对象发生重叠,并且距离图像边界至少有 5 个像素。

    Figure 4,我们用图形说明了所提出的 augmentation 策略以及如何在训练中增加匹配 anchor 的数量,从而更好地检测小目标。

    深度学习笔记(十)Augmentation for small object detection(翻译)[2]

    这篇博客中有详细的介绍。此外常用数据增强方式expand对于小目标检测也有一定的提升作用。之前做过实现,去掉expand操作,模型对于小目标的检测能力大幅下降。

    特征融合

    RFBNet

    不同尺度的特征融合,在扩大感受野的同时,也融合多个尺度的特征,增强了模型对于小目标的检测能力。

    FPN

    不同阶段的特征图对应的感受野不同,它们表达的信息抽象程度也不一样。**浅层的特征图感受野小,比较适合检测小目标(要检测大目标,则其只“看”到了大目标的一部分,有效信息不够);深层的特征图感受野大,适合检测大目标(要检测小目标,则其”看“到了太多的背景噪音,冗余噪音太多)**。所以,有人就提出了将不同阶段的特征图,都融合起来,来提升目标检测的性能,这就是特征金字塔网络[FPN](Feature Pyramid Networks for Object Detection[3])。

    SSH

    SSH中的上下文模块也是特征融合的的一种。上下文网络模块的作用是用于增大感受野,一般在two-stage 的目标检测模型当中,都是通过增大候选框的尺寸大小以合并得到更多的上下文信息,SSH通过单层卷积层的方法对上下文(context)信息进行了合并,其结构图如下图所示:

    通过2个3✖️3的卷积层和3个3✖️3的卷积层并联,从而增大了卷积层的感受野,并作为各检测模块的目标尺寸。通过该方法构造的上下文的检测模块比候选框生成的方法具有更少的参数量,并且上下文模块可以在WIDER数据集上的AP提升0.5个百分点 。

    利用上下文信息,或者目标之间建立联系

    小目标,特别是像人脸这样的目标,不会单独地出现在图片中(想想单独一个脸出现在图片中,而没有头、肩膀和身体也是很恐怖的)。像[PyramidBox](PyramidBox: A Context-assisted Single Shot Face Detector[4])方法,加上一些头、肩膀这样的上下文Context信息,那么目标就相当于变大了一些,上下文信息加上检测也就更容易了。

    这里顺便再提一下通用目标检测中另外一种加入Context信息的思路,[Relation Networks](Relation Networks for Object Detection[5])虽然主要是解决提升识别性能和过滤重复检测而不是专门针对小目标检测的,但是也和上面的PyramidBox思想很像的,都是利用上下文信息来提升检测性能,可以归类为Context一类。

    在扩大感受野方面而言,RFB模块和PyramidBox的CPM模块都能达到扩大感受野的能力。具体用那个比较好,需要实验才能知道。

    CPM模块代码

    class CPM(nn.Module):
        """docstring for CPM"""
    
        def __init__(self, in_plane):
            super(CPM, self).__init__()
            self.branch1 = conv_bn(in_plane, 1024, 1, 1, 0)
            self.branch2a = conv_bn(in_plane, 256, 1, 1, 0)
            self.branch2b = conv_bn(256, 256, 3, 1, 1)
            self.branch2c = conv_bn(256, 1024, 1, 1, 0)
    
            self.ssh_1 = nn.Conv2d(1024, 256, kernel_size=3, stride=1, padding=1)
            self.ssh_dimred = nn.Conv2d(
                1024, 128, kernel_size=3, stride=1, padding=1)
            self.ssh_2 = nn.Conv2d(128, 128, kernel_size=3, stride=1, padding=1)
            self.ssh_3a = nn.Conv2d(128, 128, kernel_size=3, stride=1, padding=1)
            self.ssh_3b = nn.Conv2d(128, 128, kernel_size=3, stride=1, padding=1)
    
        def forward(self, x):
            out_residual = self.branch1(x)
            x = F.relu(self.branch2a(x), inplace=True)
            x = F.relu(self.branch2b(x), inplace=True)
            x = self.branch2c(x)
    
            rescomb = F.relu(x + out_residual, inplace=True)
            ssh1 = self.ssh_1(rescomb)
            ssh_dimred = F.relu(self.ssh_dimred(rescomb), inplace=True)
            ssh_2 = self.ssh_2(ssh_dimred)
            ssh_3a = F.relu(self.ssh_3a(ssh_dimred), inplace=True)
            ssh_3b = self.ssh_3b(ssh_3a)
    
            ssh_out = torch.cat([ssh1, ssh_2, ssh_3b], dim=1)
            ssh_out = F.relu(ssh_out, inplace=True)
            return ssh_out
    

    RFB模块

    class BasicRFB(nn.Module):
    
        def __init__(self, in_planes, out_planes, stride=1, scale=0.1, map_reduce=8, vision=1, groups=1):
            super(BasicRFB, self).__init__()
            self.scale = scale
            self.out_channels = out_planes
            inter_planes = in_planes // map_reduce
    
            self.branch0 = nn.Sequential(
                BasicConv(in_planes, inter_planes, kernel_size=1, stride=1, groups=groups, relu=False),
                BasicConv(inter_planes, 2 * inter_planes, kernel_size=(3, 3), stride=stride, padding=(1, 1), groups=groups),
                BasicConv(2 * inter_planes, 2 * inter_planes, kernel_size=3, stride=1, padding=vision + 1, dilation=vision + 1, relu=False, groups=groups)
            )
            self.branch1 = nn.Sequential(
                BasicConv(in_planes, inter_planes, kernel_size=1, stride=1, groups=groups, relu=False),
                BasicConv(inter_planes, 2 * inter_planes, kernel_size=(3, 3), stride=stride, padding=(1, 1), groups=groups),
                BasicConv(2 * inter_planes, 2 * inter_planes, kernel_size=3, stride=1, padding=vision + 2, dilation=vision + 2, relu=False, groups=groups)
            )
            self.branch2 = nn.Sequential(
                BasicConv(in_planes, inter_planes, kernel_size=1, stride=1, groups=groups, relu=False),
                BasicConv(inter_planes, (inter_planes // 2) * 3, kernel_size=3, stride=1, padding=1, groups=groups),
                BasicConv((inter_planes // 2) * 3, 2 * inter_planes, kernel_size=3, stride=stride, padding=1, groups=groups),
                BasicConv(2 * inter_planes, 2 * inter_planes, kernel_size=3, stride=1, padding=vision + 4, dilation=vision + 4, relu=False, groups=groups)
            )
    
            self.ConvLinear = BasicConv(6 * inter_planes, out_planes, kernel_size=1, stride=1, relu=False)
            self.shortcut = BasicConv(in_planes, out_planes, kernel_size=1, stride=stride, relu=False)
            self.relu = nn.ReLU(inplace=False)
    
        def forward(self, x):
            x0 = self.branch0(x)
            x1 = self.branch1(x)
            x2 = self.branch2(x)
    
            out = torch.cat((x0, x1, x2), 1)
            out = self.ConvLinear(out)
            short = self.shortcut(x)
            out = out * self.scale + short
            out = self.relu(out)
    
            return out
    
    

    两阶段检测小技巧:ROI pooling被ROI align替换

    具体看

    Jarvix贾博士:ROI Pooling和ROI Align[6]

    GAN

    Perceptual Generative Adversarial Networks for Small Object Detection中用使用感知生成式对抗网络(Perceptual GAN)提高小物体检测率,generator将小物体的poor表示转换成super-resolved的表示,discriminator与generator以竞争的方式分辨特征。Perceptual GAN挖掘不同尺度物体间的结构关联,提高小物体的特征表示,使之与大物体类似。包含两个子网络,生成网络和感知分辨网络。生成网络是一个深度残差特征生成模型,通过引入低层精细粒度的特征将原始的较差的特征转换为高分变形的特征。分辨网络一方面分辨小物体生成的高分辨率特征与真实大物体特征,另一方面使用感知损失提升检测率。在交通标志数据库Tsinghua-Tencent 100k及Caltech上实验。具体可以参考博客

    目标检测“Perceptual Generative Adversarial Networks for Small Object Detection”[7]

    提升图像分辨率

    增大输入分辨率来提升小目标的检测能力。

    锚点设计

    匹配策略,不用IoU

    参考:

    [1]小目标检测中的数据扩展(Augmentation for small object detection): https://blog.csdn.net/abrams90/article/details/89371797

    [2]深度学习笔记(十)Augmentation for small object detection(翻译): https://www.cnblogs.com/xuanyuyt/p/11328548.html

    [3][FPN]([Feature Pyramid Networks for Object Detection: https://link.zhihu.com/?target=https%3A//arxiv.org/abs/1612.03144

    [4]PyramidBox]([PyramidBox: A Context-assisted Single Shot Face Detector: https://link.zhihu.com/?target=https%3A//arxiv.org/abs/1803.07737

    [5]Relation Networks]([Relation Networks for Object Detection: https://link.zhihu.com/?target=https%3A//arxiv.org/abs/1711.11575

    [6]Jarvix贾博士:ROI Pooling和ROI Align: https://zhuanlan.zhihu.com/p/73138740

    [7]目标检测“Perceptual Generative Adversarial Networks for Small Object Detection”: https://blog.csdn.net/c2a2o2/article/details/78619614

    
    
    目标检测系列秘籍一:模型加速之轻量化网络秘籍二:非极大值抑制及回归损失优化秘籍三:多尺度检测秘籍四:数据增强秘籍五:解决样本不均衡问题秘籍六:Anchor-Free视觉注意力机制系列Non-local模块与Self-attention之间的关系与区别?视觉注意力机制用于分类网络:SENet、CBAM、SKNetNon-local模块与SENet、CBAM的融合:GCNet、DANetNon-local模块如何改进?来看CCNet、ANN
    语义分割系列一篇看完就懂的语义分割综述最新实例分割综述:从Mask RCNN 到 BlendMask超强视频语义分割算法!基于语义流快速而准确的场景解析CVPR2020 | HANet:通过高度驱动的注意力网络改善城市场景语义分割
    
    基础积累系列卷积神经网络中的感受野怎么算?
    图片中的绝对位置信息,CNN能搞定吗?理解计算机视觉中的损失函数深度学习相关的面试考点总结
    
    
    自动驾驶学习笔记系列 Apollo Udacity自动驾驶课程笔记——高精度地图、厘米级定位 Apollo Udacity自动驾驶课程笔记——感知、预测 Apollo Udacity自动驾驶课程笔记——规划、控制自动驾驶系统中Lidar和Camera怎么融合?
    
    竞赛与工程项目分享系列如何让笨重的深度学习模型在移动设备上跑起来基于Pytorch的YOLO目标检测项目工程大合集目标检测应用竞赛:铝型材表面瑕疵检测基于Mask R-CNN的道路物体检测与分割
    SLAM系列视觉SLAM前端:视觉里程计和回环检测视觉SLAM后端:后端优化和建图模块视觉SLAM中特征点法开源算法:PTAM、ORB-SLAM视觉SLAM中直接法开源算法:LSD-SLAM、DSO视觉SLAM中特征点法和直接法的结合:SVO
    2020年最新的iPad Pro上的激光雷达是什么?来聊聊激光SLAM
    
    
    
    
    展开全文
  • 文章一: ...大多数目标检测算法在小目标检测上都有显著的性能下降,作者通过统计分析发现,这与训练阶段目标对损失函数的贡献有关系,Feedback-driven Data Provider 顾名思义,作者提出了一种基于...
  • 以ResNet-50为backbone为例,网络的输入为640×640×3,经过FPN结构,最终输出的特征图的shape有:10×10、20×20、40×40、80×80、160×160,其中最小的特征图负责检测大目标,最大的特征图负责检测小目标。...
  • 目标检测小目标检测和遮挡问题

    千次阅读 2020-08-11 20:07:06
    小目标检测trick 目标难检测原因 目标在原图中尺寸比较,通用目标检测模型中,一般的基础骨干神经网络(VGG系列和Resnet系列)都有几次下采样处理: 导致目标在特征图的尺寸基本上只有个位数的像素大小,...
  • 小目标检测中的数据扩展

    千次阅读 2019-06-24 17:41:09
    论文:Augmentation for small object detection Abstract 这些年来目标检测领域经历了令人...除了这些改进,在小目标检测与大目标检测领域还是有不的差距。我们在MS COCO上分析了当前SOTA的模型Mask-RCNN。...
  • 小目标检测文章总结

    万次阅读 多人点赞 2018-10-16 10:24:47
    由于最近需要写一篇小目标检测的综述,但是在认真调研之后,发现关于小目标检测的文章真的不多,但是又不想直接放弃度过的文章,所以就写成一篇博客来纪念一下。 在现有的目标检测的文献中,大多数是针对通用的目标...
  • 点击上方“AI算法修炼营”,选择“星标”公众号精选作品,第一时间送达传统的图像金字塔最开始在深度学习方法流行之前,对于不同尺度的目标,大家普遍使用将原图构建出不同分辨率的图像金字塔,再对...
  • SSD和YOLO对小目标检测的思考

    千次阅读 多人点赞 2019-09-20 11:16:04
    所谓的小目标,要看是...ssd对小目标检测不太适用,但R-FCN速度和鲁棒存在问题。 小目标分为很多种,背景单一还是比较好做的。有一篇小人脸检测用的是 fullyconvolutionalnetwork(FCN) + ResNet ,此篇论文检测小...
  • 除了这些改进,在小目标检测与大目标检测领域还是有不的差距。我们在MS COCO上分析了当前SOTA的模型Mask-RCNN。研究成果展示GT目标与预测的anchors的重叠远远小于期望的IoU阈值。我们猜测这可能是由两个情况导致的...
  • (1)目标在原图中尺寸比较,通用目标检测模型中,一般的基础骨干神经网络(VGG系列和Resnet系列)都有几次下采样处理,导致目标在特征图的尺寸基本上只有个位数的像素大小,导致设计的目标检测分类器对目标...
  • 小目标检测的一些总结

    万次阅读 2019-07-19 21:41:46
    1. 概述 无论是在检测还是分割算法中目标的检测或分割都是比中等与大目标难的,一般来讲在COCO...小目标检测困难的原因分析: 1)网络的stride特性:检测网络中一般使用CNN网络作为特征提取工具,在CNN网络中为了...
  • 目标检测(降低误检测率及小目标检测系列笔记)

    千次阅读 多人点赞 2020-05-06 17:17:00
    负样本是指不包含任务所要识别的目标的图像,也叫负图像(Negtive Image)。以识别限速牌为例,如下所示,左图包含限速牌,为正样本,右图不包含限速牌,为背景图,即负样本。 正样本[外链图片转存失败,源站可能有...
  • 关于如何改进YOLOv3进行红外小目标检测的?

    千次阅读 多人点赞 2020-09-21 15:26:00
    关于如何改进YOLOv3进行红外小目标检测?对于提高效果可以做出努力的方向1. 对数据集进行统计2.修改anchor3. 构建Baseline4.数据集部分改进①过采样②在图片中任意位置复制目标5.修改Backbone①注意力模块②即插即...
  • 针对目标检测中的目标问题,主要有以下几种解决方法: (1) 增加输入图片分辨率 [1,2] (2) 混合多尺度特征 [3,4,5,6] (3) 用 GAN 来区分大物体/物体特征,然后对物体特征转化为更精细的特征以此加强...
  • 在百度与机器之心联合举办的【三小时AI开发进阶】系列公开课中,百度资深研发工程师倾囊相授,首节课关注视觉模型开发难点:解析小目标检测的技术原理并带来现场实战演示,让我们一文快速回顾本节课的核心干货!...
  • 小目标检测论文阅读

    万次阅读 多人点赞 2018-08-26 11:15:33
    下面记录了一些论文的阅读总结: 算法发展历程: 传统图像算法: 传统图像算法使用hand-made feature,常用方法有SIFT、HOG、图像金字塔等...早期的目标检测框架(R-CNN、YOLO系列)对于小目标检测的效果都不甚良...
  • 小目标检测的解决办法

    千次阅读 2020-05-09 11:07:08
    在深度学习目标检测中,由于目标分辨率低,图片模糊,信息少,噪声多所以是一个实际且常见的困难问题 解决方法:使用不同分辨率的图像金字塔,再对每层金字塔用固定输入分辨率的分类器在该层滑动来检测目标,以求...
  • 对于ssd对小目标检测效果的思考

    千次阅读 2019-02-16 10:05:23
    对于ssd模型对于小目标检测效果不好的问题,我认为可以结合.prototxt文件进行分析,以conv4_3_norm_mbox_priorbox为例: prior_box_param { min_size: 30.0 max_size: 60.0 aspect_ratio: 2 flip: true clip...
  • 目标检测——深度学习下的小目标检测(检测难的原因和Tricks) 目标难检测原因 主要原因 (1)目标在原图中尺寸比较,通用目标检测模型中,一般的基础骨干神经网络(VGG系列和Resnet系列)都有几...
  • 深度学习红外小目标研究现状 2019年 TBC-Net link TBC-net分为目标特征提取模块TEM和语义约束模块SCM,分别用于从红外图像中提取小目标和对训练过程中提取的目标图像进行分类。 TEM模块进行目标提取,TEM模块为轻...
  • GitHub:小目标检测最全资料集锦

    千次阅读 2020-10-17 16:31:55
    实际上,小目标检测目标检测落地应用中非常棘手的问题,比如经常在遥感/无人机目标检测、人脸检测应用中出现。 小目标检测(Small/Tiny Object Detection)概念很好理解,定性分析简单来说就是:相对于图像占比很...
  • 小目标检测算法对比——AZ-NET VS PGAN

    千次阅读 2019-03-08 00:28:59
    两篇小目标检测算法的对比
  • 在SSD算法中,每个feature map的像素点都会生成prior box,SSD通过prior box进而对feature map进行训练。 文章中提到,SSD在训练过程中,prior box与GroundTruth的之间ROI 达到...相反小目标用于训练的的prior bo...
  • 弱监督学习和小目标检测

    千次阅读 2018-11-01 15:20:09
    在简书上看到一篇弱监督学习的帖子,由于没有使用简书的习惯,因此分享下这篇...本文收集整理弱监督学习和小目标检测方面的资料。 [TOC] 弱监督学习 何谓弱监督学习 CV中的弱监督学习 People Approaches...
  • 小目标检测与识别

    千次阅读 2019-03-07 10:45:22
    小目标检测:Improving Small Object Detection - 海星..._CSDN博客 小目标检测论文阅读 - 开心的火龙果的博客 - CSDN博客 小目标检测的一些理解 - weixin_38440272的博客 - CSDN博客 ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 561,432
精华内容 224,572
关键字:

小目标检测