欢迎来到学术参考网
当前位置:发表论文>论文发表

特征检测论文整理

发布时间:2023-03-03 22:17

特征检测论文整理

对于目标检测方向并不是特别熟悉,本文记录一下RCNN, fast-RCNN, faster-RCNN, mask-RCNN这4篇有关目标检测的论文笔记和学习心得。

R-CNN的意思就是Region based,主要思路就是根据一张图像,提取多个region,再将每个Region输入CNN来进行特征的提取。因此RCNN就可以分为 Region proposals , Feature extraction 两个主要部分,提取的特征就可以输入任意一个分类器来进行分类。 模型的流程图如下:

在训练的时候,首先使用的是已经训练好的CNN网络作为特征提取器,但是由于预训练是在分类数据集上,因此在应用到检测之前要做finetune。也就是说,为了将用ImageNet数据集训练的网络应用到新的任务(检测),新的数据集(region)上,作者将原来的CNN最后的1000类的fc层,更改为了 层, 代表待检测的物体的类别数。然后,对于所有的region,如果它和ground truth的重叠率大于0.5,就认为是正类。 对于分类器的训练,作者发现选择多大的IoU来区分正类和负类非常关键。并且,对于每一类,都会训练一个分类器。

框的回归非常重要,在对每一个region proposal使用分类器进行打分评价之后,作者使用一个回归器来预测一个新的框作为结果。这个回归器使用的特征是从CNN中提取的特征。回归器的训练中,输入是 region proposal 的 和ground truth的 ,目标是学习一种变换,使得region proposal通过该变换能够接近ground truth。同时,希望这种变换拥有尺度不变性,也就是说尺度变化的话,变换不会改变。 如下图所示,每一个regressor会学习一组参数,特征输入是pool 5的特征输出,拟合的目标是 。

Fast-RCNN 主要解决的问题是在RCNN中对于每一个region proposal都进行特征提取,会产生非常多的冗余计算,因此可以先对一张图像进行特征提取,再根据region proposal在相应的特征上进行划分得到对应region的特征(映射关系)。 这样便可以实现共享计算提高速度,但是与SPPnets不同,SPPnets在一副图像得到对应的特征后,从这张图像的特征上proposal对应的部分,采用空间金字塔池化,如下图:

RoI pooling的方法很简单,类似于空间金字塔pooling,它将proposal部分对应卷积层输出的特征(称之为RoI,因为用于做pooling的特征是 region of interest,也就是我们感兴趣的区域)划分成 块,然后对每一块求最大值,最终得到了一个 的特征图。可以看出,它只是空间金字塔pooling的一部分。 但是SPP-nets的空间金字塔也是可以求导的,那么它到底不好在哪里呢?因为当每一个RoI都可能来源于不同的图像的时候(R-CNN和SPPnets的训练策略是从一个batch的不同图像中,分别挑选一个proposal region),SPPNets的训练非常地低效,这种低效来源于在SPPnets的训练中,每个RoI的感受野都非常地大,很可能对应了原图的整个图像,因此,得到的特征也几乎对应了整张图像,所以输入的图像也就很大。 为了提高效率,Fast-RCNN首先选取 个图像,再从每个图像上选择 个RoI,这样的效率就比从每个图像提取一个RoI提高了 倍。

为了将分类和框回归结合起来,作者采用了多任务的loss,来进行联合的训练。具体来说就是将分类的loss和框回归的loss结合起来。网络的设计上非常直接,就是将RoI得到的特征接几个FC层后,分别接不同的输出层。对应于分类部分,特征会接一个softmax输出,用于分类,对于框回归部分,会接一个输出4维特征的输出层,然后分别计算loss,用于反向传播。loss的公式如下:

回归的target可以参考前面的R-CNN部分。

notes

为什么比fast还fast呢?主要原因是在这篇论文中提出了一个新的层:RPN(region proposal networks)用于替代之前的selective search。这个层还可以在GPU上运算来提高速度。 RPN的目的:

为了能够进行region proposal,作者使用了一个小的网络,在基础的卷积层输出的特征上进行滑动,这个网络输入大小为 ,输入后会映射(用 的卷积)为一个固定长度的特征向量,然后接两个并联的fc层(用 的卷积层代替),这两个fc层,一个为box-regressoin,一个为box-classification。如下图:

在每一个滑动窗口(可以参考 ),为了考虑到尽可能多的框的情况,作者设计了anchors来作为region proposal。anchors就是对于每一个滑动窗口的中心位置,在该位置对应的原图位置的基础上,按照不同的尺度,长宽比例框出 个不同的区域。然后根据这些anchors对应的原始图像位置以及区域,和ground truth,就可以给每一个滑动窗口的每一个anchor进行标记,也就是赋予label,满足一定条件标记为正类(比如和ground truth重叠大于一个值),一定条件为负类。对于正类,就可以根据ground truth和该anchor对应的原图的区域之间的变换关系(参考前面的R-CNN的框回归),得到回归器中的目标,用于训练。也就是论文中的loss function部分:

自然地,也就要求RPN的两个并联的FC层一个输出2k个值用于表示这k个anchor对应的区域的正类,负类的概率,另一个输出4k个值,用于表示框回归的变换的预测值。

对于整个网络的训练,作者采用了一种叫做 4-step Alternating Training 的方法。具体可以参考论文。

与之前的检测任务稍有不同,mask r-cnn的任务是做instance segmentation。因此,它需要对每一个像素点进行分类。 与Faster R-CNN不同,Faster R-CNN对每一个候选框产生两个输出,一个是类别,一个是bounding box的offset。Mask R-CNN新增加了一个输出,作为物体的mask。这个mask类似于ps中的蒙版。

与Faster R-CNN类似的是,Mask R-CNN同样采用RPN来进行Region Proposal。但是在之后,对于每一个RoI,mask r-cnn还输出了一个二值化的mask。

不像类别,框回归,输出都可以是一个向量,mask必须保持一定的空间信息。因此,作者采用FCN来从每个RoI中预测一个 的mask。

由于属于像素级别的预测问题,就需要RoI能够在进行特征提取的时候保持住空间信息,至少在像素级别上能够对应起来。因此,传统的取最大值的方法就显得不合适。 RoI Pooling,经历了两个量化的过程: 第一个:从roi proposal到feature map的映射过程。 第二个:从feature map划分成7*7的bin,每个bin使用max pooling。

为此,作者使用了RoIAlign。如下图

为了避免上面提到的量化过程

可以参考

作者使用ResNet作为基础的特征提取的网络。 对于预测类别,回归框,mask的网络使用如下图结构:

整体看完这几篇大佬的论文,虽说没有弄清楚每一个实现细节,但是大体上了解了算法的思路。可以看出,出发点都源于深度神经网络在特征提取上的卓越能力,因此一众大神试图将这种能力应用在检测问题中。从R-CNN中简单地用于特征提取,到为了提高速度减少计算的Fast R-CNN,再到为了将region proposal集成进入整个模型中,并且利用GPU加速的RPN,也就是Faster R-CNN。再到为了应用于instance segmentation任务中,设计的RoIAlign和mask。包括bounding box regression,pooling层的设计,训练方法的选择,loss的设计等等细节,无一不体现了大师们的思考和创造力。 可能在我们这些“拿来”者的眼中,这些方法都显得“理所应当”和巧妙,好用,但是,它们背后隐藏的选择和这些选择的思考却更值得我们学习。 以及,对待每一个问题,如何设计出合理的解决方案,以及方案的效率,通用性,更是应该我们努力的方向。

论文 | 目标检测HOG特征解读《Histograms of Oriented Gradients for Human Detection》

有一个月没更博客了,捂脸 o( ̄= ̄)d

端午回家休息了几天,6月要加油~

回到正文,HOG是很经典的一种图像特征提取方法,尤其是在行人识别领域被应用的很多。虽然文章是2005年发表在CVPR上的,但近十年来还没有被淹没的文章真的是很值得阅读的研究成果了。

key idea: 局部物体的形状和外观可以通过局部梯度或者边缘的密度分布所表示。

主要步骤:

上图为论文中提供的图,个人觉得我在参考资料中列出的那篇 博客 中给出的图可能更好理解一些。

具体细节: 关于每一个过程的详细解释还是在 这篇博客 中已经写得很清楚了,这里就不再搬运了。

文章中数据集的图像大小均为:64*128, block大小为16x16, block stride为8x8,cell size为8x8,bins=9(直方图等级数);

获取到每张图的特征维度后,再用线性SVM训练分类器即可。

下图为作者而给出的示例图:

这两篇博客写的都很好,推荐阅读一波。

论文里什么是目标值?

论文里的目标值就是你要围绕什么目标写论文啊,
要达到什么水平

目标检测算法经典论文回顾(一)

论文名称:Rich feature hierarchies for accurate object detection and semantic segmentation

提出时间:2014年

论文地址:

针对问题:

从Alexnet提出后,作者等人思考如何利用卷积网络来完成检测任务,即输入一张图,实现图上目标的定位(目标在哪)和分类(目标是什么)两个目标,并最终完成了RCNN网络模型。

创新点:

RCNN提出时,检测网络的执行思路还是脱胎于分类网络。也就是深度学习部分仅完成输入图像块的分类工作。那么对检测任务来说如何完成目标的定位呢,作者采用的是Selective Search候选区域提取算法,来获得当前输入图上可能包含目标的不同图像块,再将图像块裁剪到固定的尺寸输入CNN网络来进行当前图像块类别的判断。

参考博客: 。

论文题目:OverFeat: Integrated Recognition, Localization and Detection using Convolutional Networks

提出时间:2014年

论文地址:

针对问题:

该论文讨论了,CNN提取到的特征能够同时用于定位和分类两个任务。也就是在CNN提取到特征以后,在网络后端组织两组卷积或全连接层,一组用于实现定位,输出当前图像上目标的最小外接矩形框坐标,一组用于分类,输出当前图像上目标的类别信息。也是以此为起点,检测网络出现基础主干网络(backbone)+分类头或回归头(定位头)的网络设计模式雏形。

创新点:

在这篇论文中还有两个比较有意思的点,一是作者认为全连接层其实质实现的操作和1x1的卷积是类似的,而且用1x1的卷积核还可以避免FC对输入特征尺寸的限制,那用1x1卷积来替换FC层,是否可行呢?作者在测试时通过将全连接层替换为1x1卷积核证明是可行的;二是提出了offset max-pooling,也就是对池化层输入特征不能整除的情况,通过进行滑动池化并将不同的池化层传递给后续网络层来提高效果。另外作者在论文里提到他的用法是先基于主干网络+分类头训练,然后切换分类头为回归头,再训练回归头的参数,最终完成整个网络的训练。图像的输入作者采用的是直接在输入图上利用卷积核划窗。然后在指定的每个网络层上回归目标的尺度和空间位置。

参考博客:

论文题目:Scalable Object Detection using Deep Neural Networks

提出时间:2014年

论文地址:

针对问题:

既然CNN网络提取的特征可以直接用于检测任务(定位+分类),作者就尝试将目标框(可能包含目标的最小外包矩形框)提取任务放到CNN中进行。也就是直接通过网络完成输入图像上目标的定位工作。

创新点:

本文作者通过将物体检测问题定义为输出多个bounding box的回归问题. 同时每个bounding box会输出关于是否包含目标物体的置信度, 使得模型更加紧凑和高效。先通过聚类获得图像中可能有目标的位置聚类中心,(800个anchor box)然后学习预测不考虑目标类别的二分类网络,背景or前景。用到了多尺度下的检测。

参考博客:

论文题目:DeepBox: Learning Objectness with Convolutional Networks

提出时间:2015年ICCV

论文地址:

主要针对的问题:

本文完成的工作与第三篇类似,都是对目标框提取算法的优化方案,区别是本文首先采用自底而上的方案来提取图像上的疑似目标框,然后再利用CNN网络提取特征对目标框进行是否为前景区域的排序;而第三篇为直接利用CNN网络来回归图像上可能的目标位置。

创新点:

本文作者想通过CNN学习输入图像的特征,从而实现对输入网络目标框是否为真实目标的情况进行计算,量化每个输入框的包含目标的可能性值。

参考博客:

论文题目:AttentionNet: AggregatingWeak Directions for Accurate Object Detection

提出时间:2015年ICCV

论文地址:

主要针对的问题:

对检测网络的实现方案进行思考,之前的执行策略是,先确定输入图像中可能包含目标位置的矩形框,再对每个矩形框进行分类和回归从而确定目标的准确位置,参考RCNN。那么能否直接利用回归的思路从图像的四个角点,逐渐得到目标的最小外接矩形框和类别呢?

创新点:

通过从图像的四个角点,逐步迭代的方式,每次计算一个缩小的方向,并缩小指定的距离来使得逐渐逼近目标。作者还提出了针对多目标情况的处理方式。

参考博客:

论文题目:Spatial Pyramid Pooling in Deep Convolutional Networks for Visual Recognition

提出时间:2014年

论文地址:

针对问题:

如RCNN会将输入的目标图像块处理到同一尺寸再输入进CNN网络,在处理过程中就造成了图像块信息的损失。在实际的场景中,输入网络的目标尺寸很难统一,而网络最后的全连接层又要求输入的特征信息为统一维度的向量。作者就尝试进行不同尺寸CNN网络提取到的特征维度进行统一。

创新点:

作者提出的SPPnet中,通过使用特征金字塔池化来使得最后的卷积层输出结果可以统一到全连接层需要的尺寸,在训练的时候,池化的操作还是通过滑动窗口完成的,池化的核宽高及步长通过当前层的特征图的宽高计算得到。原论文中的特征金字塔池化操作图示如下。

参考博客 :

论文题目:Object detection via a multi-region & semantic segmentation-aware CNN model

提出时间:2015年

论文地址:

针对问题:

既然第三篇论文multibox算法提出了可以用CNN来实现输入图像中待检测目标的定位,本文作者就尝试增加一些训练时的方法技巧来提高CNN网络最终的定位精度。

创新点:

作者通过对输入网络的region进行一定的处理(通过数据增强,使得网络利用目标周围的上下文信息得到更精准的目标框)来增加网络对目标回归框的精度。具体的处理方式包括:扩大输入目标的标签包围框、取输入目标的标签中包围框的一部分等并对不同区域分别回归位置,使得网络对目标的边界更加敏感。这种操作丰富了输入目标的多样性,从而提高了回归框的精度。

参考博客 :

论文题目:Fast-RCNN

提出时间:2015年

论文地址:

针对问题:

RCNN中的CNN每输入一个图像块就要执行一次前向计算,这显然是非常耗时的,那么如何优化这部分呢?

创新点:

作者参考了SPPNet(第六篇论文),在网络中实现了ROIpooling来使得输入的图像块不用裁剪到统一尺寸,从而避免了输入的信息丢失。其次是将整张图输入网络得到特征图,再将原图上用Selective Search算法得到的目标框映射到特征图上,避免了特征的重复提取。

参考博客 :

论文题目:DeepProposal: Hunting Objects by Cascading Deep Convolutional Layers

提出时间:2015年

论文地址:

主要针对的问题:

本文的作者观察到CNN可以提取到很棒的对输入图像进行表征的论文,作者尝试通过实验来对CNN网络不同层所产生的特征的作用和情况进行讨论和解析。

创新点:

作者在不同的激活层上以滑动窗口的方式生成了假设,并表明最终的卷积层可以以较高的查全率找到感兴趣的对象,但是由于特征图的粗糙性,定位性很差。相反,网络的第一层可以更好地定位感兴趣的对象,但召回率降低。

论文题目:Faster R-CNN: Towards Real-Time Object Detection with Region Proposal Networks

提出时间:2015年NIPS

论文地址:

主要针对的问题:

由multibox(第三篇)和DeepBox(第四篇)等论文,我们知道,用CNN可以生成目标待检测框,并判定当前框为目标的概率,那能否将该模型整合到目标检测的模型中,从而实现真正输入端为图像,输出为最终检测结果的,全部依赖CNN完成的检测系统呢?

创新点:

将当前输入图目标框提取整合到了检测网络中,依赖一个小的目标框提取网络RPN来替代Selective Search算法,从而实现真正的端到端检测算法。

参考博客 :

论文阅读——D2-Net: A Trainable CNN for Joint Description and Detection of Local Features

  作为近两年detector和descriptor joint learning(也称one-stage)类型论文的又一代表,D2-Net是一种相当特别的结构。其特点是“一图两用”,即网络预测出的dense tensor即是detection score maps,又是description map特征图即代表特征检测结果又代表特征描述结果(注意预测的特征图并不是原图分辨率大小)。换句话说,D2-Net的特征检测模块和描述模块是高度耦合的。

  本文主要针对的是appearance变化较大(包括日-夜变化、大的视角变化等)场景下的图像匹配任务。文章作者比较了两种局部特征学习方法:sparse方法和dense方法。其中sparse方法高效,但是在appearance变化大的场景提取不到可重复的关键点,其原因在于特征提取器只使用浅层图像信息,不使用语义信息;dense方法则直接利用深层特征提取密集特征描述,更加鲁棒却以更高的匹配时间和内存开销为代价。

  因此作者的目的在于,提出一种足够鲁棒的sparse local feature,让其提取的特征(兴趣点)具有更好的repeatability,进而实现既有sparse方法的高效性,又有dense方法的鲁棒性。其核心idea是将特征提取阶段延后,使得局部特征也可以利用高层语义信息,而不是只考虑低层信息。

问题:关于这里的sparse和dense方法

关键词:A single CNN plays a dual role; joint optimization; different train/test model structure

  不同于SuperPoint或者SEKD,本文虽然也是dense prediction类型的结构,但并不同时预测kpt和description两个图,而是只预测了一个形状为HxWxd(d为特征描述的长度)的特征图,然后既作描述结果又作检测结果…从spatial维度来说,该特征图的每个像素位置是一个描述子;从channel维度来说,每一个通道代表一个特征检测器的检测结果,总共得到d个2D响应图,这里可以用SIFT中的高斯差分金字塔响应来类比。

  后续的兴趣点提取需要对这个d通道的特征图做进一步的后处理:

  按照上面对D2特征图的定义,如果(i,j)位置是一个兴趣点,则从通道维度来说该像素位置最终的检测结果肯定要取检测器响应值最大的通道对应数值,这样就选出了通道;从空间维度来说又要满足该位置在该通道的2D map必须为一个局部最大值。即本文中的"hard feature detection":

  首先对输入图像构建图像金字塔,然后在每个scale上进行forward,得到D2特征图,再把多尺度特征图逐scale上采样并与同分辨率融合(见下式),得到融合后的特征图。预测阶段根据融合特征图进行上述后处理,即可提取出特征点。

  由于上述特点,网络结构本身发非常简单,直接用VGG16 conv4_3之前的部分,恢复ImageNet上的预训练权重,然后除了最后一层conv4_3之外全部冻结,只对该层做微调。不过关于模型,有两个值得注意的地方:

  1.使用VGG16的结果比ReseNet好很多
  2.训练时和测试时的模型结构不同
  具体来说,在测试阶段为了提高特征的分辨率,将pool3改成一个stride为1的avg pool,随后的三层conv dilation ratio调整为2,以维持相同的感受野。作者解释是说训练时为了减小内存使用比较小的特征分辨率,测试时为了提高特征定位能力,将分辨率提升到原图的1/4,并加上了一个类似SIFT中使用的局部特征提炼,然后将特征插值上采样到原分辨率。

  不过训练过程不能用上面的hard feature detection,因为其不可微。故作者提出了一个soft的版本,其设计思想就是模仿hard方法的通道选择和空间位置选择(即通道内的局部最大值):

  对于空间位置选择,作者会对特征图的每个像素求一个α(i,j),得到α map(shape为[h,w,d]):

  其中N(i,j)代表以(i,j)为中心的9-邻域。因此可见这里的局部最大值其实是在3x3区域内的最大值,而不是式(3)中写的那样,整个通道只输出一个最大值。

  对于通道选择,直接计算一个ratio-to-max得到β图(shape为[h,w,d]):

  根据kpt的定义,score map s就应该是α map和β map的乘积map在通道维度求最大值的结果。最后再做一个归一化:(问题:这个归一化让score map的像素值之和为1是什么意思?score map不应该用sigmoid之类的转为0-1之间的分布比较合理吗?)

  关于这部分还要考虑一个问题,为什么D2-Net需要在训练中提取兴趣点?(比如R2D2等结构,都是直接针对kpt score map做优化,只有实际预测时才需要根据score map提取特征点这个步骤)

  答:这个问题的理解是不正确的,训练中并不是提取兴趣点,而是在得到”single score map"。上面的hard feature detection相当于NMS的过程,输出的是稀疏的兴趣点位置坐标;而训练检测模块需要hxw的score map,故先要把hxwxd的特征图经过一个可微的步骤,处理后得到该score map。

①triplet margin ranking loss(只考虑描述子)

  训练描述子其实没有太多不一样的地方,就是根据输入pair的correspondences,将每一个匹配对c视为正对,不匹配对为负对,对构成的三元组进行训练。主要问题是如何根据当前匹配对c构建最有意义的负对。作者这里用了一个基于邻域的困难样本挖掘策略,假如当前匹配为下图的点A和点B,那么分别在I1和I2扣去A\B邻域的区域找负对,并分别与B的描述子dB、A的描述子dA进行比较,找到所有这种负对中相似度最小的,与c构建三元组。

  以下p(c)和n(c)分别代表正对距离和负对距离。m(c)代表当前匹配c的triplet loss。

②加入描述子优化的triplet margin ranking loss

  由于D2特征即代表兴趣点score map也代表描述子,本文的优化需要对检测和描述进行联合优化。作者在triplet margin ranking loss基础上加入了提升检测结果可重复性这一优化目标,具体实现方法是:利用输入两图像中所有correspondences的检测得分来对当前匹配计算出的triplet loss进行加权平均,如果当前匹配triplet loss很低(即该对匹配的距离远小于其各自的最难负对),则为了最小化loss,这一对triplet loss小(即区分度高)的correspondence自然要给更大的权值;其他triplet loss大的correspondence就给小点的权值。

  感觉文中式(13)的符号有点confusing,m(p(c),n(c))直接写成,m(c)可能更加简洁。

上一篇:水声对抗毕业论文

下一篇:法律本科论文查重