- Java锁的逻辑(结合对象头和ObjectMonitor)
- 还在用饼状图?来瞧瞧这些炫酷的百分比可视化新图形(附代码实现)⛵
- 自动注册实体类到EntityFrameworkCore上下文,并适配ABP及ABPVNext
- 基于Sklearn机器学习代码实战
该综述涵盖了400篇目标检测文章,时间跨度将近四分之一世纪。包括目标检测历史上的里程碑检测器、数据集、衡量指标、基本搭建模块、加速技术,最近的sota检测模型。还引入了一些重要的目标检测应用,比如行人检测、人脸检测、文本检测等。对这些技术以及挑战做出深度的解析.
。
目标检测的其中一个基本任务:什么物体?在什么位置?
目标检测是计算机图像任务的基础,比如实例分割、图像翻译、目标追踪.
从应用层面来看,目标检测又被分为 通用目标检测 和 特殊场景下的目标检测 。通用目标检测指的是采用统一的框架去检测不同类别的物体,而特殊场景目标检测就比如行人检测、人脸检测、文本检测.
近20年目标检测出版数量:
。
。
。
该综述与其它综述的不同之处:
对技术发展进行全面的概括 。
覆盖400篇论文,时间跨度大,站在历史的高速上可以帮助读者建立全面的知识层次,并且有助于找到未来发展方向.
对最新技术的深度探索 。
经过多年的发展,最新的目标检测系统与大量的技术相结合,包括:multi- scale detection”(多尺度检测), “hard negative mining”(难例挖掘), “bounding box“(边界框)。之前的综述缺少分析去帮助读者理解复杂技术的本质。本文对”它们从哪来?如何演变的?“ ”每组方法的优缺点什么? “这些问题进行了深入分析.
对检测加速技术的全面分析 。
回顾20多年多层次目标检测中的加速技术,包括”detection piline“(cascaded detection, feature map shared computaion), "detection backbone"(network compression, lightweright network design), "numerical computation"(integral image, vector quantization) 。
。
目标检测的困难与挑战 。
不同的目标检测任务的困难不同,除了常见的挑战:对象在不同视点、照明和类内变化,还包括但不限于以下方面:对象旋转和尺度变化(例如,小对象)、精确的对象定位、密集和遮挡对象检测、检测速度等.
。
目标检测路线图,包含两个时期:传统目标检测(2014年前),基于深度学习的目标检测(2014年后) 。
。
。
。
。
大多数早期的目标检测算法都是基于手工特征构建的。由于当时缺乏有效的图像表示,人们别无选择,只能设计复杂的特征表示,以及各种加速技能,以耗尽有限的计算资源.
Viola Jones Detectors 。
在没有任何约束(如肤色分割)的情况下实现了人脸实时检测。并且在相同的检测精度下比其它算法要快几十倍甚至几百倍。 采用的是滑动窗口的方式,遍历图像中所有可能的位置和比例。VJ检测器结合了三种重要的技术:“积分图像‘、”特征选择“、”检测联级“。 1) 积分图像 :一种加速框过滤或者卷积过程的计算方法,VJ使用了 哈尔小波变换 来表示图像的特征。积分图像使VJ探测器中每个窗口的计算复杂度与其窗口大小无关.
(10条消息) 积分图像(Integral image) 吃瓜群众110的博客-CSDN博客 积分图 。
(10条消息) 哈尔小波变换的原理及其实现(Haar) fullstack_lth的博客-CSDN博客 哈尔小波变换 2)特征选择:作者采用Adaboost算法从一个庞大的随机特征池中选取一组小的特征,代替了手工选择的哈尔基滤波器.
3)检测联级:多阶段检测范式,又名特征联级。在VJ检测器中用于在背景窗口中花费更少的计算,但在人脸目标上花费更多计算来减少计算开销.
。
HOG Detector 。
HOG可以被认为是对尺度不变特征变换以及 形状上下文 的重要改进。为了平衡特征不变性(包括平移、缩放、照明等)和非线性(区分不同的对象类别),HOG描述符被设计为在均匀间隔单元的密集网格上计算,并使用重叠的局部对比度归一化(在“块”上)来提高精度。尽管HOG可以用于检测各种对象类别,它的主要动机是行人检测问题。为了检测不同大小的对象,HOG检测器在保持检测窗口大小不变的同时多次重新缩放输入图像.
(10条消息) shape context (形状上下文)_AIvin24的博客-CSDN博客 。
。
Deformable Part-based Model (DPM) 。
传统目标检测的巅峰。遵循”分而治之“的哲学。比如检测一辆车,可以视为检测车窗、车身、轮子。”星模型“则实现了这种方法,后来R.Girshick又进行了改进,称为”混合模型“,为了解决物体在现实世界中变化明显的问题。 典型的DPM由一个root过滤器,和若干个局部过滤器组成。弱监督的学习方法被使用在DPM中,过滤器的配置可以作为学习的参数,而不是手动的去配置。同时还加上了其它技术:“难例挖掘”、“边界框回归”、“ 上下文交互 ”。下面2.3节有介绍。为了加速检测,大神Girshick开发了一种“编译”检测模型技术,实现了级联的结构,不降低准确率能提高十倍速度😦。(“Cascade object detection with deformable part models,” 看了论文的介绍,感觉跟剪枝操作很像) 。
尽管如今的目标检测模型在精度上远远超过了DPM,但其中的优化技术仍然在影响着如今的检测器。 2010年,P.Felzenszwalb和R.Girshick被PASCAL VOC授予“终身成就。6! 。
。
2010年以后,手动提取特征就遇到了瓶颈,2010-2012获得一些小进展.
2012年,世界见证了卷积神经网络的重生 。大神Girshick在2014年首先提出用于目标检测的CNN——RCNN网络,开辟了深度学习在目标检测的历史.
基于深度学习的检测器可以分为两种:二阶段检测和一阶段检测。前者将检测框架定义为由“粗略到精细”的过程,而后者则是一个一步到位的过程.
。
RCNN 。
首先通过选择性搜索搜索抽取一组目标候选框,然后每个候选框重新调整至固定大小,并将其送入到在ImageNet上训练过的CNN模型进行特征提取。最后用SVM做分类来对类别做预测.
优点:RCNN在VOC07上性能提升显著,mAP从 DPM-V5的 33.7%到 58.5%.
缺点:对冗余特征的计算导致检测速度极慢,产生2000多个候选框。即使在GPU上也是一幅图像14秒。同年,SPPNet解决了以上问题.
。
SPPNet 。
2014年,何凯明团队提出空间特征金字塔池化网络(Spatial Pyramid Pooling Networks )主要贡献就是引入了SPP层,能够使得CNN生成固定长度的表征,不需要考虑图片或者感兴趣区域(ROI)的大小,进行重新缩放.
缺点:1.训练仍是多级的(没有集成到一个系统);2.只对全连接层调参 。
。
Fast RCNN 。
2015,大神Girshick又提出该模型。是对RCNN和SPPNet的改进。能够在同一个网络配置下同时训练检测器和边界框回归器。 优点:VOC07 mAP从RCNN的58.5%到了70.0%,并且速度是RCNN的两百倍。 缺点:仍受候选框的限制,然后提出疑问:“我们能用CNN来生成候选框吗?” 。
。
Faster RCNN 。
2015,Ren 提出该模型。是第一个端到端,第一个接近实时检测的检测器。 (COCO mAP@.5=42.7%, COCO mAP@[.5,.95]=21.9%, VOC07 mAP=73.2%, VOC12 mAP=70.4%, 17fps with ZF- Net ) 。
优点:主要贡献就是提出区域候选网络,实现几乎无开销的候选区域。并且将之前独立的模块,候选区域检测、特征提取、边界框回归等都集成到了一个统一的端到端系统.
缺点:在后续的检测阶段仍然存在冗余计算。之后一些改进被提出,比如RFCN、Light head RCNN等.
。
Feature Pyramid Networks 。
2017,T.-Y . Lin提出特征金字塔网络(FPN),在FPN之前,大多数基于深度学习的检测器仅在网络顶层运行检测。尽管CNN较深层的特征有利于类别识别,但它不利于定位对象。为此,在FPN中开发了一个具有横向连接的自上而下的体系结构,用于构建所有规模的高级语义。由于CNN通过其正向传播自然形成特征金字塔,因此FPN在检测各种尺度的物体方面取得了巨大进步。在基本的Faster R-CNN系统中使用FPN,使得其在MSCOCO数据集上实现了sota.
。
2.1.3 🗿 基于一阶段检测器的CNN 。
You Only Look Once (YOLO) 。
2015,R. Joseph提出。 深度学习领域的第一个一阶段检测器。以快著称,最快的 版本能跑到155fps,VOC07mAP52.7%,VOC12mAP57.9%。从名字可以看出, 作者完全抛弃了之前的“proposal detection + verification”的检测机制,而是用不 同的机制代替:它应用单个神经网络到整个图像,将图像分成区域,并同时预测每 个区域的边界框和类别概率。之后R. Joseph做了一系列的提升得出v2,v3版本。 缺点:尽管它在速度上有极大的优势,但在定位准确性上不如two-stage的检测器,尤其在对小目标。后来提出的SSD就针对这个问题进行了改进.
。
Single Shot MultiBox Detector (SSD) 。
2015年W. Liu提出Single Shot Multi Box Detector (SSD),它是深度学习 时代 S第二个one stage检测器。它最主要的贡献是引入了multi-reference和multi- resolution检测技术,这极大地提高了一阶段检测器的精度,尤其对小目标。同时 期,SSD在检测精度和速度上都具有优势。SSD与以往的检测器的主要区别在于前者 在网络的不同层检测不同尺度的目标,而后者仅在其顶层进行检测。 缺点:没说 。
。
RetinaNet 。
2017年, T.-Y . Lin发现了一阶段检测器精度远不如二阶段检测器的原因,所以提出了RetinaNet。他们认为在训练 dense detectors 的过程中遇到的极端前景背景类不平衡是主要原因。因此也引入了”focal loss“来关注更多的难样本或者被错误分类的样本。Focal Loss能够让一阶段检测器拥有二阶段检测器精度的同时,保持较快的检测速度.
(4条消息) 如何理解 “Dense object detection“中的dense?_坠金的博客-CSDN博客 。
。
从VJ到深度学习 : 走近人脸检测:从 VJ 到深度学习(上) - 走看看 (zoukankan.com) 。
长文干货!走近人脸检测:从VJ到深度学习(下) - 知乎 (zhihu.com) 。
。
二阶段与一阶段的理解 : 深度学习中的目标检测网络中的one stage和two stage? - 知乎 (zhihu.com) ⭐️ 。
。
不同检测模型在不同数据集上的精度变化:
。
。
。
。
。
。
Pascal VOC PASCAL视觉目标分类挑战赛(2005-2012)是早期最重要的计算机竞赛之一。包括图像分类、目标检测、语义分割和行为检测多种任务。Pascal VOC的两个版本VOC07和VOC12主要用于目标检测。这两个数据集标注了生活中常见的20类物体.
http://host.robots.ox.ac.uk/pascal/VOC/ 。
。
ILSVRC 。
ImageNet大规模视觉识别挑战(ILSVRC)2[52]推动了一般对象检测的最新技术。ILSVRC从2010年至2017年每年组织一次。它包含使用ImageNet图像的检测挑战[57]。ILSVRC检测数据集包含200类视觉对象。其数量图像/对象实例比VOC大两个数量级。例如,ILSVRC-14包含517k个图像和534k个注释对象.
http://image-net.org/challenges/LSVRC/ 。
。
MS-COCO 。
MS-COCO3[53]是当今最具挑战性的目标检测数据集。自2015年以来,基于MS-COCO数据集的年度竞赛一直在举行。与ILSVRC相比,它的目标类别数量更少,但对象实例更多。例如,MS-COCO-17包含来自80个类别的164k个图像和897k个带注释的对象。与VOC和ILSVRC相比,MS-COCO的最大进步是除了边界框注释之外,每个对象都进一步使用逐实例分割进行标记,以帮助精确定位。此外,与VOC和ILSVRC相比,MS-COCO包含更多的小对象(其面积小于图像的1%)和更密集的对象。所有这些特性使MSCOCO中的对象分布更接近真实世界.
http://cocodataset.org/ 。
。
Open Images 。
2018年,继MS-COCO之后,开放式图像检测(OID)挑战赛4[58]问世,但规模 空前。中有两个任务开放图像:1)标准目标检测,2)视觉关系检测,检测特定 关系中的成对目标。对于目标检测任务,数据集由1910k个图像组成,在600个 对象类别上有15440k个带注释的边界框.
https://storage.googleapis.com/openimages/web/index.html 。
。
Datasets of Other Detecion Tasks 。
除了一般的物体检测,过去20年还见证了特定领域检测应用的繁荣,如行人检测、人脸检测、文本检测、交通标志/灯光检测和遥感目标检测.
。
。
。
。
。
。
近年来最常用的指标是“平均精度(AP)”。被定义为不同召回率下的平均检测精度,通常以特定类别的方式进行评估。为了比较检测所有类别的性能,通常使用所有类别平均的平均精度(mAP)作为检测性能的最终评估指标。 为了评估目标定位精度,使用联合交集(IoU)来检测预测框和真实目标框直接的重合度是否大于预定的阈值。一般用0.5作为阈值。 2014年后,由于MS-COCO数据集的普及。研究人员开始更加关注边界框位置的准确性。使用MS-COO AP,在阈值为0.5 - 0.95之间的多个IoU上进行平均。 最近,Open Images数据集中的评估有了进一步发展。一些研究人员甚至提出了代替指标:“localization recall precision” Localization Recall Precision (LRP): A New Performance Metric for Object Detection (thecvf.com) 。
。
2000年以前的目标检测并不遵循滑动窗口的检测准则,而是基于低层次和高层次视觉来设计的.
Components, shapes and edges 。
一些早期的研究人员将物体检测定义为物体组成、形状和轮廓之间的相似性度量。 包括距离变换,形状上下文,Edgelet等。刚开始很有希望,但是对于复杂的检测过程效果就不好。因此,基于机器学习的检测方法开始繁荣起来.
基于机器学习的检测的时期又可以分为很多阶段,包括appearance的统计模型(1998前),小波特征表示(1998-2005), 基于梯度的表示( 2005-2012).
构建目标的统计模型比如Eigenfaces,是基于学习的目标检测的第一波浪潮。在1995年,M,Turk使用Eigenface分解实现了实验室环境的实时人脸检测。相比于同时期的基于规则和模板的方法,统计模型方法通过从数据中学习任务明确的知识能够得到更好的对目标appearance的描述.
从2000开始, 小波特征变换 开始主导视觉识别和目标检测方法。这类方法的本质是通过变换图像像素到一系列小波系数。在这些方法中,Haar小波由于它的计算高效性被广泛应用于很多目标检测任务中,比如通用目标检测、人脸检测、行人检测.
。
早期用于目标检测的CNN 。
最早可以追溯到1990,Y.LeCun做出了巨大贡献。但是由于计算资源的原因,当时的CNN模型很小。尽管如此,在早期基于CNN的检测模型中,计算效率仍然被认为是一个棘手的问题。Y.Lecun在此做了一些提升,像share-weight replication neural network和space displacement network,通过扩展卷积网络的每一层以覆盖整个输入图像来减少计算量。在这一方法下,只需用一次前向过程就能提取整个图像上的任意位置的特征。 这也可视为20年后提出的全卷积网络FCN的原型.
。
。
。
。
多尺度检测就是检测不同尺寸、不同长宽比的目标,是目标检测的主要技术挑战之一。多尺度检测经历了多个历史时期:
。
。
。
。
feature pyramids + sliding windows (before 2014) 。
自 VJ detector 之后,随着算力的增加,一种新的检测模式开始出现:feature pyramid + sliding windows。2004 ~ 2014 年间的许多 detector 都是依据这一模式发明的,如 HOG detector、DPM、Overfeat detector (ILSVRC-13 localization task 冠军).
。
。
。
为什么会出现 “object proposals” 这一概念?这个问题要追溯到早期的 VJ detector 和 HOG detector,这两个 detector 都是用 “fixed aspect ratio” 来检测目标的,这样它们就解决不了 “various aspect ratio” 的问题。为了应对这一问题,当时出现了两种解决方案:mixture model 以及 exemplar-based detection。但是随着一些更复杂的数据集的出现(如 MS-COCO),前面提到的这两种解决方案会产生各种五花八门的检测模型,导致检测领域变得十分混乱。为了找到一种统一的能够解决 different aspect ratios 问题的 multi-scale 方法,“object proposals”便应运而生.
。
detection with object proposals (2010 ~ 2015):
object propsals指的是一组类无关的候选框,它们可能包含任何对象。线代候选检测方法可以分为三类:1)segmentation grouping approaches 2) window scoring approaches 3) neural network based approaches 。
然而,在 2014 ~ 2015 年间,人们开始问这样一个问题:在目标检测系统中,object proposals 到底在扮演着什么样的角色呢?它是为了提升准确率吗?或者仅仅是为了提升检测速度?有研究者尝试去解决这个问题,但是最终并没有找到令人满意的答案。后来,随着 one-stage 方法以及 “deep regression” 方法的兴起,proposal detection 逐渐淡出了人们的视野.
。
deep regression (2013 ~ 2016):
近些年,随着 GPU 算力的增加,multi-scale detection 问题的解决变 得更加简单粗暴,deep regression 就是其中的典型代表。这一方法依 据深度学习模型学习到的特征, 直接去预测 bbox 的坐标值 。它的优点 是简单而且容易实现,缺点是定位不够准确(尤其是对小的物体),后 来出现的 “multi-reference detection” 解决了这一问题.
。
Multi-reference/-resolution detection(after 2015) 。
多参考检测:主要思想是在图像的不同位置去预设置一些拥有不同大小和长宽比的候选框,然后基于这些参考去预测检测框.
对于预定义的候选框损失包含两部分:1)识别类别的交叉熵损失 2)目标定位的L1/L2回归损失。就是一个分类损失,一个位置损失.
。
。
。
这里 t 和 t∗ 分别是预测框和ground truth,同理 p 和 p* 分别是预测的概率向量和真实的概率向量。需要注意的是 I(t) 这个函数,限制了只有包含object的box才会计算位置上的损失.
。
多分辨率检测:检测不同尺度和不同网络层中的物体。 由于CNN在其正向传播过程中自然形成了一个特征金字塔,因此更容易在较深的层中检测到较大的物体,而在较浅的层中更容易检测到较小的物体.
。
。
。
。
边界框The Bounding Box(BB)回归是指基于初始候选框来调整预测框的位置.
Without BB regression (before 2008) 。
早期大多数检测方法都不用BB回归,而是直接采用滑动窗口作为检测框。为了获得物体准确位置,只能构建密集的金字塔,并且在每个位置滑动窗口.
From BB to BB (2008-2013) 。
在DMP模型中首次引入BB回归,但当时是作为一个可选的后处理模块。R.Girshick采用基于目标假设的完整结构来预测边界框,并将其过程描述为最小二乘回归问题.
From features to BB (after 2013) 。
。
背景启动长期以来被用于提高检测效果.
Detection with local context 。
局部背景是指围绕要检测的对象的区域中的视觉信息。在21世纪初,Sinha和Torralba发现,包含局部上下文区域(如面部边界轮廓)可显著提高面部检测性能。Dalal和Triggs还发现,结合少量背景信息可以提高行人检测的准确性。最近基于深度学习的检测器也可以通过简单地扩大网络的感受域或对象提议的大小来利用局部上下文进行改进.
Detection with global context 。
全局背景就是利用场景的结构作为目标检测的附加信息。基于深度学习的线代检测模型一般有两种方法利用全局背景信息,第一个是利用大的感受野或者CNN特征的全局池化操作。第二种就是将全局背景信息看做一种顺序的信息,利用递归神经网络(RNN)去学习.
Context interactive 。
上下文交互指的是通过视觉元素的交互来传达的信息,例如约束和依 赖。最近的一些改进可以分为两类,其中第一类是探索单个对象之间 的关系。第二类是探索对象和场景之间的依赖关系的建模.
。
相邻的检测框具有相似的检测评分,则需要非极大值抑制(NMS)来去除重复的边界框。主要发展了一下三类方法:
Greedy selection 。
贪心搜索,过于重叠的检测框,直接选择分数最大的那个,然后根据阈值移除其它相邻的框。现在的 NMS 实际上用的就是 greedy selection,只不过在这个基础上可能会有一些其他的改动.
BB agregation 。
BB aggregation 是将多个重合的 bbox 通过聚类或其他组合方式得到一个最终的 bbox 。这种方法的优点是它可以充分考虑各个目标之间的联系以及它们的空间布局,VJ detector 和 Overfeat 用的就是这种方法.
Learning to NMS 。
将NMS视为过滤器,对所有原始检测进行评分,并以端到端的方式将NMS训练为网络的一部分。对于 改善遮挡 和 密集对象检测 方面有效.
。
在利用滑动窗口的检测器时,背景和目标之间存在样本不平衡的情况。每个目标的背景窗口能达到 10^4 到 10^5 。这显然对训练是有影响的,HNM就是为了解决这个问题.
Bootstrap 。
目标检测中的Bootstrap是指在训练过程中从一小部分背景样本开始训练,然后迭代地添加新的未分类背景的一组训练技术。在早期的object detector中,bootstrap最初被引入的目的是减少在数百万个背景样本上的训练计算量。后来它成为DPM和HOG检测器的标准训练技术,用于解决数据不平衡问题.
Bootstrap详解 : 机器学习中Bootstrap的应用 - 知乎 (zhihu.com) 。
。
HNM in deep learning based detectors 。
随着算力的增长,bootstrap其实是被遗弃了一段时间,为了克服数据的 imbalance,很多算法只是简单的balance一下正负样本对损失的权重(YOLO,RCNN),但是这个方法后来被发现不能完全解决imbalance的问题。2016年之后,bootstrap又被重新提出,在SSD或者OHEM中,只有比较少的一部分样本的梯度会被反向传播,这些样本都是loss很大的样本,即难以区分的样本,而简单样本的损失就忽略不计。在RefineDet中,一个“锚优化模块”被设计用来过滤容易的样本。另一种改进是设计新的损失函数,通过重塑标准交叉熵损失(比如focal loss),使其将更多的注意力放在硬的、错误分类的例子上.
SSD、OHEM、RefineDet都值得一读.
。
大致可以分为三类:
speed up of detection pipeline 。
speed up of detection engine 。
speed up of numerical computation 。
。
。
。
在目标检测器的不同计算阶段中,特征提取通常主导计算量。对于基于滑动窗口的检测器,计算冗余从position和scale两个方面入手,位置冗余是由于相邻尺度之间的重叠引起的,而尺度冗余是由于相邻尺度之间的特征相关性引起的.
简单而言就是只计算feature map一次,像RCNN是对每个ROI都通过卷积网络计算feature map,而后来的fast,faster都是原图经过CNN网络生成feature map,不会进行重复计算。这样做的缺陷也很明显,因为图片resolution将会受到卷积网络的影响,很可能忽略掉其中一些小物体.
建立检测器金字塔是一个减少尺度冗余不错的方法,因为我们只需要在多个不同的feature map上进行计算即可,避免了对原图或者feature map的调整.
主要讲述的是对 kernel SVM 的一些加速方法 。
级联检测需要一个粗到细的检测原理:用简单的计算过滤掉大多数简单的背景窗口,然后用复杂的窗口处理那些困难的窗口。VJ检测器是级联检测的代表。此后,许多经典的对象检测器如HOG检测器和DPM都使用该技术进行了加速.
现代的深度学习目标检测器也同样使用了 cascaded detection 的方法,尤其是当要检测 small objects in large scenes 时(如人脸检测、行人检测),这种方法更是发挥了至关重要的作用.
。
。
。
。
分离卷积:
群卷积:
深度可分离卷积:
颈部网络设计:
神经架构搜索:
。
数学计算上的加速,包括一下方面:
Speed Up with Integral Image(积分图像加速) 。
Speed Up in Frequency Domain(频域加速,需要用到信号处理的知识) 。
Vector Quantization(矢量量化) 。
。
就是对16-19年以来的SOTA方法进行了汇总 。
检测精度很大程度上是取决于特征提取网络,称为backbone network,各个阶段主要的SOTA网络有以下这些:
AlexNet 。
VGG 。
GoogleNet 。
ResNet 。
DenseNet 。
SENet 。
可以具体去看对应的论文和代码 。
一些最近的目标检测系统,如 STDN,DSOD,TinyDSOD 以及 Pelee 都选择将 DenseNet 作为 backbone; 。
Mask RCNN (instance segmentation 的 SOTA),将 ResNeXt (第二代 ResNet) 作为 backbone; 。
此外,为了能够加快检测速度,一些检测系统如 MobileNet 和 LightHead RCNN 中用到了 depth-wise separable convolution operation (这一方法在 Xception 中首次被提出,Xception 是 Inception 的改进版).
。
最重要的两种方法:1)特征融合 2)学习具有大感受野的高分辨率特征 。
图像的特征表示具有不变性和等变性的两种属性。分类任务学习高级的语义信息,需要不变的特征的表示。定位任务要区分位置和尺度的变化,需要等变性表示。因此,检测器同时学习不变性和等变性是至关重要的.
由于CNN模型将一些列卷积和池化层组成,使得较深层的特征值具有更强的不变性,而较少的等变性。浅层的特征不利于学习语义信息, 但有助于定位,因为它包含更多的边缘和轮廓的信息。 因此结合深层和浅层的特征有助于提高不变性和等变性.
。
PS:这篇文章对CNN的平移不变性以及等变性进行批判性的思考,感觉说得挺有道理 。
(4条消息) 【深入思考】卷积网络(CNN)的平移不变性_风巽·剑染春水的博客-CSDN博客 。
。
。
不同特征融合方法的示例:(a)自下而上融合,(b)自上而下融合,(c)逐元素求和,(d)逐元素积,以及(e)级联.
Processing flow 不同层的特征图在其空间维度和通道维度可能具有不同的尺寸,因此需要使特征图适应。比如调整通道数量,上采样低分辨率图,下采样高分辨率图到合适的大小。最早的方法是采用临近或者双线性插值法。此外,反卷积(也称转置卷积)也是一个最近流行的方法。该方法的优点是可以学习一个合适的方法来自己执行上采样.
Element-wise operation 。
从局部来看,特征融合就是不同特征图之间的逐元素操作。有三组方法:1)元素相加 2)元素相乘 3)串联 。
按元素求和是执行特征融合的最简单方法。逐元素乘积的一个优点是,它可以用于抑制或突出特定区域内的特征, 这有利于小对象检测 。特征拼接是特征融合的另一种方式。其优点是它 可以用于集成不同区域的上下文信息 而其缺点是占用内存.
。
为了能够增加特征分辨率,最直接的方法是移除池化层或减小下采样率。然而这样做会导致一个新的问题,那就是感受野也会跟着减小,就相当于缩小了检测器的“视野”,这样它就有可能会漏掉一些比较大的目标.
一种能够同时增大感受野以及提高特征分辨率的方法就是使用空洞卷积(dilated convolution)。空洞卷积最早是在语义分割任务中提出来的,它的核心想法就是扩大卷积核并且使用稀疏参数(例如,一个 3x3 的卷积核,如果把 dilation rate 设为 2 ,那么它的感受野就会和 5x5 的卷积核相当,但它仍然只有 9 个参数。) 。
空洞卷积 已经被广泛地用在目标检测系统中,它既能够提高准确率,又不会引入额外的参数,而且不会带来额外的计算负担.
(4条消息) 一文详解什么是空洞卷积?_Mr.Jk.Zhang的博客-CSDN博客 。
。
摆脱提取特征用滑动窗口这种固有模式,有一下两种方式:
Detection as sub-region search 将检测视为一个路径规划的过程.
Detection as key points localization 。
关键点定位是一项重要任务,采用左上角和右下角两点进行定位,简化锚框。常用于面部表情识别,人类姿态识别。 优点是在语义分割框架下实现,并且不需要设计多尺度锚框.
(4条消息) CornerNet论文详解CornerNet: Detecting Objects as Paired Keypoints_yanghaoplus的博客-CSDN博客 。
。
。
使用语义分割进行学习,可以改进目标检测.
三个原因:
语义分割任务的特征很好地捕捉了对象的边界,因此分割可能有助于类别识别.
目标的真实框是由精确定义的边界所检测的。对于一些有特殊形状的物体,很难预测出高的IoU。当目标边界能够被编码至语义分割特征中,因此带分割的学习对精确定位目标有帮助.
日常生活中的物体被不同的背景所包围,如天空、水、草等,这些元素构成了一个物体的上下文。结合上下文的语义分割将有助于目标检测,例如,飞机更有可能出现在天空而不是水 。
Learning with enriched features 。
将segmentation network视作一个特征提取器然后将它融入我们的backbone作为额外的特征。这样做很容易实现但是额外增加很多计算量.
Learning with multi-task loss functions 。
在原始检测框架上引用额外的分割分支,并使用多任务的损失函数(分割损失+检测损失)来训练该模型。在大多数情况下,分割的branch将在inference阶段被删除。优点是检测速度不会受到影响,缺点是训练需要像素级的图像标注.
。
目标旋转在检测任务中比较常见,最好的办法就是数据增强。另一种方法就是独立训练每个方向的检测器.
使用旋转不变损失函数。最近的一些工作对原始检测损失函数引入了约束,以使旋转对象的特征保持不变.
对候选目标进行几何变换,这对多级检测器尤其有用。代表:STN网络 。
由于网格网格是在笛卡尔坐标系中进行的,因此特征对旋转变换不具有不变性。最近的一项改进是在极坐标系中对网格进行网格化,从而使特征对旋转变化具有鲁棒性 。
分为训练和检测两个阶段 。
Scale adaptive training 。
现代检测器大多数是将输入图像重新缩放到固定大小,在所有尺度上进行反向传播训练。这样会出现“尺度不平衡”问题。检测过程构建图像金字塔不能够从根本上解决该问题。最近的改进是将图像金字塔的尺度进行归一化Scale Normalization for Image Pyramids(SNIP).
Scale adaptive detection 。
学习预测图像中对象的比例分布,然后根据该分布自适应地重新缩放图像.
。
这一部分抛出了一个问题:检测任务是否一定先要在大型数据集 (如 ImageNet) 上进行预训练?何凯明的研究表明:ImageNet 预训练可以加快收敛速度,但不一定提供正则化或提高最终检测精度.
(4条消息) 【翻译】Aggregated Residual Transformations for Deep Neural Networks_异想天开的长颈鹿的博客-CSDN博客 。
。
近两年,GAN网络也被用于目标检测,有助于改进对小目标和被遮挡目标的检测。对目标检测模型进行攻击,以提高模型的鲁棒性.
。
Supervised Object Detection (WSOD) ,手工打标签耗时费力,WSOD采用图像级的标签代替边界框标签.
多实例学习被用于WSOD.
多示例学习(Multiple Instance Learning) - 知乎 (zhihu.com) 。
Class activation mapping(CAM) 类激活映射 。
WSDDN模型 。
掩盖图像的不同部分,如果检测分数下降,则这个物体存在的概率就变高.
不要边界框,用人工验证 。
将GAN应用于WSOD 。
。
。
未来的研究方向: 🌟 。
轻量检测模型 。
神经网络架构搜索(AutoML)深度学习学深度学习 。
对不是独立同分布的数据进行目标检测,GAN目前在这个方面有效果 。
弱监督学习 。
小目标检测,方向有注意力机制的集成以及高分辨率轻量级网络设计 。
视频目标检测,利用帧与帧之间的相关性 。
信息融合检测:RGB图像、三维点云、激光雷达 。
。
参考: 《Object Detection in 20 Years: A Survey》论文阅读笔记 - 简书 (jianshu.com) 。
精读一篇目标检测综述-Object Detection in 20 Years: A Survey - 知乎 (zhihu.com) 。
最后此篇关于【DL论文精读笔记】ObjectDetectionin20Years:ASurvey目标检测综述的文章就讲到这里了,如果你想了解更多关于【DL论文精读笔记】ObjectDetectionin20Years:ASurvey目标检测综述的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。
我需要本地化所有可能性: 1年, 2 年,然后……(不超过任何数字)。 1个月, 2 个月,然后……(不超过任何数字)。 在各种语言中,“年”这个词会根据它前面的数字而变化。比如法语: 22 年 =
本文整理了Java中org.joda.time.Years.years()方法的一些代码示例,展示了Years.years()的具体用法。这些代码示例主要来源于Github/Stackoverflow
年.hs: year = year + 1 main = print year 这不是尾递归调用: year = year + 1 year = (year + 1) + 1 year = ((yea
我有一个表,其中包含来自流量计的数据,排列如下: Water.Year May Jun Jul Aug Sep Oct Nov Dec Jan Feb
本文整理了Java中com.meidusa.amoeba.sqljep.function.Year.year()方法的一些代码示例,展示了Year.year()的具体用法。这些代码示例主要来源于Git
我是 Java 新手,希望获得一些有关正在尝试解决的问题的建议。我必须编写一个方法来生成唯一的编号。 因此,以字符串表示的唯一数字将有 10 个字符。 #1. First 2 will represe
谁有权威的答案,哪个性能更好? GROUP BY YEAR(FROM_UNIXTIME(col)) /* or */ GROUP BY EXTRACT(YEAR FROM FROM_U
我从今年过去了 20 年。但目前我希望它显示为年复一年。例如:1992 - 1999 1999 - 2002 2003 - 2015 这是我的代码。 function populatedropdown
我目前能够将 Landsat 图像拆分为 LC80440142014093LGN00.tar.gz 的日期信息, 我把它分成 2014093 .现在我需要将其更改为 Excel 或 Open Offi
我有一些数据想总结一下。我想对所有列进行总结,固定 YEAR 列。即对于一个变量我可以做: df %>% group_by(LG1, YEAR) %>% summarise(Freq = n(
我有一个独特的问题,我根本无法解决。 所以我在 SQL Server 2005 中,我得到了以下要处理的数据: FISCAL_YEAR_START_MONTH INT(财政年度的第一个月) COUNT
我有一些数据想总结一下。我想对所有列进行总结,固定 YEAR 列。即对于一个变量我可以做: df %>% group_by(LG1, YEAR) %>% summarise(Freq = n(
我想从指定年份的表中获取所有数据。但问题是我将日期设置为 DATETIME 类型。 我正在尝试类似的东西: SELECT * FROM table WHERE entrytim
使用日期选择器,年份下拉菜单默认只显示 10 年。用户必须单击最后一年才能添加更多年份。 我们如何将初始范围设置为 100 年,以便用户默认看到一个大列表? function InitDate
我必须将我的数据帧从当前格式转换为新格式(请参阅下面的图像或结构)。我不知道如何才能做到这一点。我想要每个 ID 一年,从 2013 年到 2018 年(所以每个 ID 有 6 行,每年一个)。日期是
在学习了 Hadley 的书并在 SO 上搜索之后,我创建了一个由年和月矩阵组成的热图,颜色根据时间序列变量的百分比变化而变化。热图和我用来获取它的代码如下所示。我还有一些我自己无法解决的问题。 1)
在电子表格上,我有各种谷歌分析 channel (有机、直接、移动、桌面等)的月度报告表。对于每个 channel ,我都有另一列自动计算 Y-o-Y EX 的增长百分比:(A12-A1)/A1。然后
我有几个气象变量的时间序列数据集。时间数据记录在三个单独的列中: 年份(例如 2012) 一年中的第几天(例如 261 代表闰年的 9 月 17 日) 时:分(例如 1610) 有没有一种方法可以合并
YEAR(x) 和 EXTRACT(YEAR FROM x) 在 MySQL 中是否等价? 似乎在我所有的实验中都有,但我不确定是否没有任何边缘情况。 举个例子:这两个查询返回完全相同的结果。但我不确
我读到“将日期字符串转换为mysql日期时间字段”:但这对我没有帮助 所以我想做的是将dat文件读入mysql中的空表。 table CLIMBED(TRIP_ID int,PEAK VARCHAR(
我是一名优秀的程序员,十分优秀!