论文发表百科

目标检测论文图

发布时间:2024-07-04 04:39:05

目标检测论文图

论文原文:

YOLO(you only look once)是继RCNN、faster-RCNN之后,又一里程碑式的目标检测算法。yolo在保持不错的准确度的情况下,解决了当时基于深度学习的检测中的痛点---速度问题。下图是各目标检测系统的检测性能对比:

如果说faster-RCNN是真正实现了完全基于深度学习的端到端的检测,那么yolo则是更进一步,将 目标区域预测 与 目标类别判断 整合到单个神经网络模型中。各检测算法结构见下图:

每个网格要预测B个bounding box,每个bounding box除了要回归自身的位置之外,还要附带预测一个confidence值。这个confidence代表了所预测的box中含有object的置信度和这个box预测的有多准两重信息,其值是这样计算的:

其中如果有object落在一个grid cell里,第一项取1,否则取0。第二项是预测的bounding box和实际的groundtruth之间的IoU值。

每个bounding box要预测(x, y, w, h)和confidence共5个值,每个网格还要预测一个类别信息,记为C类。即SxS个网格,每个网格除了要预测B个bounding box外,还要预测C个categories。输出就是S x S x (5*B+C)的一个tensor。(注意:class信息是针对每个网格的,即一个网格只预测一组类别而不管里面有多少个bounding box,而confidence信息是针对每个bounding box的。)

举例说明: 在PASCAL VOC中,图像输入为448x448,取S=7,B=2,一共有20个类别(C=20)。则输出就是7x7x30的一个tensor。整个网络结构如下图所示:

在test的时候,每个网格预测的class信息和bounding box预测的confidence信息相乘,就得到每个bounding box的class-specific confidence score:

等式左边第一项就是每个网格预测的类别信息,第二三项就是每个bounding box预测的confidence。这个乘积即encode了预测的box属于某一类的概率,也有该box准确度的信息。

得到每个box的class-specific confidence score以后,设置阈值,滤掉得分低的boxes,对保留的boxes进行NMS(非极大值抑制non-maximum suppresssion)处理,就得到最终的检测结果。

1、每个grid因为预测两个bounding box有30维(30=2*5+20),这30维中,8维是回归box的坐标,2维是box的confidence,还有20维是类别。其中坐标的x,y用bounding box相对grid的offset归一化到0-1之间,w,h除以图像的width和height也归一化到0-1之间。

2、对不同大小的box预测中,相比于大box预测偏一点,小box预测偏一点肯定更不能被忍受的。而sum-square error loss中对同样的偏移loss是一样。为了缓和这个问题,作者用了一个比较取巧的办法,就是将box的width和height取平方根代替原本的height和width。这个参考下面的图很容易理解,小box的横轴值较小,发生偏移时,反应到y轴上相比大box要大。其实就是让算法对小box预测的偏移更加敏感。

3、一个网格预测多个box,希望的是每个box predictor专门负责预测某个object。具体做法就是看当前预测的box与ground truth box中哪个IoU大,就负责哪个。这种做法称作box predictor的specialization。

4、损失函数公式见下图:

在实现中,最主要的就是怎么设计损失函数,坐标(x,y,w,h),confidence,classification 让这个三个方面得到很好的平衡。简单的全部采用sum-squared error loss来做这件事会有以下不足:

解决方法:

只有当某个网格中有object的时候才对classification error进行惩罚。只有当某个box predictor对某个ground truth box负责的时候,才会对box的coordinate error进行惩罚,而对哪个ground truth box负责就看其预测值和ground truth box的IoU是不是在那个cell的所有box中最大。

作者采用ImageNet 1000-class 数据集来预训练卷积层。预训练阶段,采用网络中的前20卷积层,外加average-pooling层和全连接层。模型训练了一周,获得了top-5 accuracy为(ImageNet2012 validation set),与GoogleNet模型准确率相当。

然后,将模型转换为检测模型。作者向预训练模型中加入了4个卷积层和两层全连接层,提高了模型输入分辨率(224×224->448×448)。顶层预测类别概率和bounding box协调值。bounding box的宽和高通过输入图像宽和高归一化到0-1区间。顶层采用linear activation,其它层使用 leaky rectified linear。

作者采用sum-squared error为目标函数来优化,增加bounding box loss权重,减少置信度权重,实验中,设定为\lambda _{coord} =5 and\lambda _{noobj}= 。

作者在PASCAL VOC2007和PASCAL VOC2012数据集上进行了训练和测试。训练135轮,batch size为64,动量为,学习速率延迟为。Learning schedule为:第一轮,学习速率从缓慢增加到(因为如果初始为高学习速率,会导致模型发散);保持速率到75轮;然后在后30轮中,下降到;最后30轮,学习速率为。

作者还采用了dropout和 data augmentation来预防过拟合。dropout值为;data augmentation包括:random scaling,translation,adjust exposure和saturation。

YOLO模型相对于之前的物体检测方法有多个优点:

1、 YOLO检测物体非常快

因为没有复杂的检测流程,只需要将图像输入到神经网络就可以得到检测结果,YOLO可以非常快的完成物体检测任务。标准版本的YOLO在Titan X 的 GPU 上能达到45 FPS。更快的Fast YOLO检测速度可以达到155 FPS。而且,YOLO的mAP是之前其他实时物体检测系统的两倍以上。

2、 YOLO可以很好的避免背景错误,产生false positives

不像其他物体检测系统使用了滑窗或region proposal,分类器只能得到图像的局部信息。YOLO在训练和测试时都能够看到一整张图像的信息,因此YOLO在检测物体时能很好的利用上下文信息,从而不容易在背景上预测出错误的物体信息。和Fast-R-CNN相比,YOLO的背景错误不到Fast-R-CNN的一半。

3、 YOLO可以学到物体的泛化特征

当YOLO在自然图像上做训练,在艺术作品上做测试时,YOLO表现的性能比DPM、R-CNN等之前的物体检测系统要好很多。因为YOLO可以学习到高度泛化的特征,从而迁移到其他领域。

尽管YOLO有这些优点,它也有一些缺点:

1、YOLO的物体检测精度低于其他state-of-the-art的物体检测系统。

2、YOLO容易产生物体的定位错误。

3、YOLO对小物体的检测效果不好(尤其是密集的小物体,因为一个栅格只能预测2个物体)。

对于目标检测方向并不是特别熟悉,本文记录一下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的重叠率大于,就认为是正类。 对于分类器的训练,作者发现选择多大的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的设计等等细节,无一不体现了大师们的思考和创造力。 可能在我们这些“拿来”者的眼中,这些方法都显得“理所应当”和巧妙,好用,但是,它们背后隐藏的选择和这些选择的思考却更值得我们学习。 以及,对待每一个问题,如何设计出合理的解决方案,以及方案的效率,通用性,更是应该我们努力的方向。

原文: Scalable Object Detection using Deep Neural Networks——学术范 最近,深度卷积神经网络在许多图像识别基准上取得了最先进的性能,包括ImageNet大规模视觉识别挑战(ILSVRC-2012)。在定位子任务中获胜的模型是一个网络,它预测了图像中每个对象类别的单个边界框和置信度得分。这样的模型捕获了围绕对象的整幅图像上下文,但如果不天真地复制每个实例的输出数量,就无法处理图像中同一对象的多个实例。在这篇论文中提出了一个显著性启发的神经网络检测模型,它预测了一组与类无关的边界框,每个框有一个分数,对应于它包含任何感兴趣的对象的可能性。该模型自然地为每个类处理数量可变的实例,并允许在网络的最高级别上进行跨类泛化。 目标检测是计算机视觉的基本任务之一。一个解决这个问题的通用范例是训练在子图像上操作的对象检测器,并在所有的场所和尺度上以详尽的方式应用这些检测器。这一范例被成功地应用于经过区别训练的可变形零件模型(DPM)中,以实现检测任务的最新结果。对所有可能位置和尺度的穷举搜索带来了计算上的挑战。随着类数量的增加,这个挑战变得更加困难,因为大多数方法都训练每个类单独的检测器。为了解决这个问题,人们提出了多种方法,从检测器级联到使用分割提出少量的对象假设。 关于对象检测的文献非常多,在本节中,我们将重点讨论利用类不可知思想和解决可伸缩性的方法。 许多提出的检测方法都是基于基于部件的模型,最近由于有区别学习和精心设计的特征,已经取得了令人印象深刻的性能。然而,这些方法依赖于在多个尺度上详尽地应用零件模板,这是非常昂贵的。此外,它们在类的数量上是可伸缩的,这对像ImageNet这样的现代数据集来说是一个挑战。 为了解决前一个问题,Lampert等人使用分支绑定策略来避免计算所有可能的对象位置。为了解决后一个问题,Song et al.使用了一个低维部件基,在所有对象类中共享。基于哈希算法的零件检测也取得了良好的结果。 另一种不同的工作,与我们的工作更接近,是基于对象可以本地化的想法,而不必知道它们的类。其中一些方法建立在自底向上无阶级分割[9]的基础上。通过这种方式得到的片段可以使用自上而下的反馈进行评分。基于同样的动机,Alexe等人使用一种廉价的分类器对对象假设是否为对象进行评分,并以这种方式减少了后续检测步骤的位置数量。这些方法可以被认为是多层模型,分割作为第一层,分割分类作为后续层。尽管它们编码了已证明的感知原理,但我们将表明,有更深入的模型,充分学习可以导致更好的结果。 最后,我们利用了DeepLearning的最新进展,最引人注目的是Krizhevsky等人的工作。我们将他们的边界盒回归检测方法扩展到以可扩展的方式处理多个对象的情况。然而,基于dnn的回归已经被Szegedy等人应用到对象掩模中。最后一种方法实现了最先进的检测性能,但由于单个掩模回归的成本,不能扩展到多个类。 我们的目标是通过预测一组表示潜在对象的边界盒来实现一种与类无关的可扩展对象检测。更准确地说,我们使用了深度神经网络(DNN),它输出固定数量的包围盒。此外,它为每个盒子输出一个分数,表示这个盒子包含一个对象的网络信任度。 为了形式化上述思想,我们将i-thobject框及其相关的置信度编码为最后一网层的节点值: Bounding box: 我们将每个框的左上角和右下角坐标编码为四个节点值,可以写成vectorli∈R4。这些坐标是归一化的w. r. t.图像尺寸,以实现图像绝对尺寸的不变性。每个归一化坐标是由最后一层的线性变换产生的。 Confidence: 置信度:包含一个对象的盒子的置信度得分被编码为单个节点valueci∈[0,1]。这个值是通过最后一个隐藏层的线性变换产生的,后面跟着一个sigmoid。 我们可以组合边界盒位置sli,i∈{1,…K}为一个线性层。同样,我们可以将所有置信区间ci,i∈{1,…K}作为一个s型层的输出。这两个输出层都连接到最后一个隐藏层 在推理时,我们的算法生成kbound盒。在我们的实验中,我们使用ek = 100和K= 200。如果需要,我们可以使用置信分数和非最大抑制在推理时获得较少数量的高置信框。这些盒子应该代表对象。因此,它们可以通过后续的分类器进行分类,实现目标检测。由于盒子的数量非常少,我们可以提供强大的分类器。在我们的实验中,我们使用另一个dnn进行分类。 我们训练一个DNN来预测每个训练图像的边界框及其置信度得分,以便得分最高的框与图像的groundtruth对象框很好地匹配。假设对于一个特定的训练例子,对象被标记为boundingboxesgj,j∈{1,…,M}。在实践中,pre- dictionary的数量远远大于groundtruthboxm的数量。因此,我们试图只优化与地面真实最匹配的预测框子集。我们优化他们的位置,以提高他们的匹配度,最大化他们的信心。与此同时,我们将剩余预测的置信度最小化,这被认为不能很好地定位真实对象。为了达到上述目的,我们为每个训练实例制定一个分配问题。Wexij∈{0,1}表示赋值:xij= 1,如果第i个预测被赋值给第j个真对象。这项任务的目标可以表示为 其中,我们使用标准化边界框坐标之间的el2距离来量化边界框之间的不同。此外,我们希望根据分配x优化盒子的可信度。最大化指定预测的置信度可以表示为  最终的损失目标结合了匹配损失和信心损失 受式1的约束。α平衡了不同损失条款的贡献。 对于每个训练例子,我们通过解决一个最佳的赋值x*的预测到真实的盒子 约束执行赋值解决方案。这是二部匹配的一种变体,是一种多项式复杂度匹配。在我们的应用程序中,匹配是非常便宜的——每幅图像中标记的对象的数量少于一打,而且在大多数情况下只有很少的对象被标记。然后,通过反向传播优化网络参数。例如,反向传播算法的一阶导数计算w、r、t、l和c 尽管上述定义的损失在原则上是足够的,但三次修改使其有可能更快地达到更好的准确性。第一个修改是对地面真实位置进行聚类,并找到这样的聚类/质心,我们可以使用这些聚类/质心作为每个预测位置的先验。因此,鼓励学习算法为每个预测位置学习一个残差到一个先验。 第二个修改涉及到在匹配过程中使用这些先验:不是将N个groundtruth位置与K个预测进行匹配,而是在K个先验和groundtruth之间找到最佳匹配。一旦匹配完成,就会像之前一样计算目标的置信度。此外,位置预测损失也不变:对于任何一对匹配的(目标,预测)位置,其损失定义为groundtruth和对应于匹配先验的坐标之间的差值。我们把使用先验匹配称为先验匹配,并假设它促进了预测的多样化。  需要注意的是,尽管我们以一种与类无关的方式定义了我们的方法,但我们可以将它应用于预测特定类的对象盒。要做到这一点,我们只需要在类的边框上训练我们的模型。此外,我们可以预测每个类的kbox。不幸的是,这个模型的参数数量会随着类的数量线性增长。此外,在一个典型的设置中,给定类的对象数量相对较少,这些参数中的大多数会看到很少有相应梯度贡献的训练示例。因此,我们认为我们的两步过程——首先本地化,然后识别——是一个更好的选择,因为它允许使用少量参数利用同一图像中多个对象类型的数据 我们使用的本地化和分类模型的网络架构与[10]使用的网络架构相同。我们使用Adagrad来控制学习速率衰减,128的小批量,以及使用多个相同的网络副本进行并行分布式训练,从而实现更快的收敛。如前所述,我们在定位损失中使用先验——这些是使用训练集上的均值来计算的。我们还使用α = 来平衡局部化和置信度损失。定位器可以输出用于推断的种植区以外的坐标。坐标被映射和截断到最后的图像区域。另外,使用非最大抑制对盒进行修剪,Jaccard相似度阈值为。然后,我们的第二个模型将每个边界框分类为感兴趣的对象或“背景”。为了训练我们的定位器网络,我们从训练集中生成了大约3000万幅图像,并对训练集中的每幅图像应用以下步骤。最后,样品被打乱。为了训练我们的本地化网络,我们通过对训练集中的每一幅图像应用以下步骤,从训练集中生成了大约3000万幅图像。对于每幅图像,我们生成相同数量的平方样本,使样本总数大约为1000万。对于每幅图像,样本被桶状填充,这样,对于0 - 5%、5 - 15%、15 - 50%、50 - 100%范围内的每个比例,都有相同数量的样本,其中被包围框覆盖的比例在给定范围内。训练集和我们大多数超参数的选择是基于过去使用非公开数据集的经验。在下面的实验中,我们没有探索任何非标准数据生成或正则化选项。在所有的实验中,所有的超参数都是通过对训练集。 Pascal Visual Object Classes (VOC)挑战是最常用的对象检测算法基准。它主要由复杂的场景图像组成,其中包含了20种不同的对象类别的边界框。在我们的评估中,我们关注的是2007版VOC,为此发布了一个测试集。我们通过培训VOC 2012展示了结果,其中包含了大约。11000张图片。我们训练了一个100框的定位器和一个基于深度网络的分类器。 我们在一个由1000万作物组成的数据集上训练分类器,该数据集重叠的对象至少为 jaccard重叠相似度。这些作物被标记为20个VOC对象类中的一个。•2000万负作物与任何物体盒最多有个Jaccard相似度。这些作物被贴上特殊的“背景”类标签。体系结构和超参数的选择遵循。 在第一轮中,定位器模型应用于图像中最大-最小中心方形作物。作物的大小调整到网络输入大小is220×220。单次通过这个网络,我们就可以得到上百个候选日期框。在对重叠阈值为的非最大抑制后,保留评分最高的前10个检测项,并通过21路分类器模型分别通过网络进行分类。最终的检测分数是给定盒子的定位分数乘以分类器在作物周围的最大方形区域上评估的分数的乘积。这些分数通过评估,并用于计算精确查全曲线。 首先,我们分析了本地化器在隔离状态下的性能。我们给出了被检测对象的数量,正如Pascal检测标准所定义的那样,与生成的包围框的数量相对比。在图1中,我们展示了使用VOC2012进行训练所获得的结果。此外,我们通过使用图像的最大中心面积(max-center square crop)作为输入以及使用两个尺度(second scale)来给出结果:最大中心面积(max-center crop)的第二个尺度(select3×3windows的大小为图像大小的60%)正如我们所看到的,当使用10个边界框的预算时,我们可以用第一个模型本地化的对象,用第二个模型本地化48%的对象。这显示出比其他报告的结果更好的性能,例如对象度算法达到42%[1]。此外,这个图表显示了在不同分辨率下观察图像的重要性。虽然我们的算法通过使用最大中心作物获得了大量的对象,但当使用更高分辨率的图像作物时,我们获得了额外的提升。进一步,我们用21-way分类器对生成的包围盒进行分类,如上所述。表1列出了VOC 2007的平均精度(APs)。达到的平均AP是,与先进水平相当。注意,我们的运行时间复杂度非常低——我们只使用top10框。示例检测和全精度召回曲线分别如图2和图3所示。值得注意的是,可视化检测是通过仅使用最大中心方形图像裁剪,即使用全图像获得的。然而,我们设法获得了相对较小的对象,例如第二行和第二列的船,以及第三行和第三列的羊。 在本工作中,我们提出了一种新的方法来定位图像中的对象,该方法可以预测多个边界框的时间。该方法使用深度卷积神经网络作为基本特征提取和学习模型。它制定了一个能够利用可变数量的groundtruth位置的多箱定位成本。在“一个类一个箱”方法的情况下,对1000个盒子进行非max-suppression,使用与给定图像中感兴趣的DeepMulti-Box方法相同的准则,并学习在未见图像中预测这些位置。 我们在VOC2007和ILSVRC-2012这两个具有挑战性的基准上给出了结果,在这两个基准上,所提出的方法具有竞争力。此外,该方法能够很好地预测后续分类器将探测到的位置。我们的结果表明,deepmultibox的方法是可扩展的,甚至可以在两个数据集之间泛化,就能够预测感兴趣的定位,甚至对于它没有训练的类别。此外,它能够捕获同一类物体的多种情况,这是旨在更好地理解图像的算法的一个重要特征。 在未来,我们希望能够将定位和识别路径折叠到一个单一的网络中,这样我们就能够在一个通过网络的一次性前馈中提取位置和类标签信息。即使在其当前状态下,双通道过程(本地化网络之后是分类网络)也会产生5-10个网络评估,每个评估的速度大约为1个CPU-sec(现代机器)。重要的是,这个数字并不与要识别的类的数量成线性关系,这使得所提出的方法与类似dpm的方法非常有竞争力。

论文检测图标

论文呢主要是检测这个时间,地点,人物,事件,还有一个故事的产生,到这个故事的结束,所发生的故事都要举一说明。

包含论文正文、原创说明、摘要、图标及公式说明、参考文献、附录、实验研究成果,以及各种引用文献图片和表格。论文查重时,查重系统会先对其进行分层处理,之后按照连续出现13个字符类似就会判为重

论文检测主要检测正文部分,一般查重率在20%左右,就可以通过论文检测,撰写论文时尽量不要抄袭。

1、如果是引用,在引用标号后,不要轻易使用句号,如果写了句号,句号后面的就是剽窃了(尽管自已认为是引用),所以,引用没有结束前,尽量使用分号。有些人将引用的上标放在了句号后面,这是不对的,应该在句号之前。2、可以将文字转换为表格,将表格边框隐藏。3、如果你看的外文的多,由外文自己翻译过来引用的,个人认为,不需要尾注,就可以当做自己的,因为查重的数据库只是字符的匹配,无法做到中文和英文的匹配。4、查重是一个匹配的过程,是以句为单位,如果一句话重复了,就很容易判定重复了,所以:的确是经典的句子,就用上标的尾注的方式,在参考文献中表达出来,或者是用:原文章作者《名字》和引号的方式,将引用的内容框出来。引号内的东西,系统会识别为引用如果是一般的引用,就采用罗嗦法,将原句中省略的主语、谓语、等等添加全,反正哪怕多一个字,就是胜利,也可以采用横刀法,将一些句子的成分,去除,用一些代词替代。或者是用洋鬼子法,将原文中的洋名,是中文的,就直接用英文,是英文的直接用中文,或是哦中文的全姓名,就用中文的名,如果是中文的名,就找齐了,替换成中文的姓名。故意在一些缩写的英文边上,加上(注释)(画蛇添足法),总之,将每句话都可以变化一下,哪怕增加一个字或减少一个字,都是胜利了。特别注意标点符号,变化变化,将英文的复合句,变成两个或多个单句,等等,自己灵活掌握。因为真正写一篇论文,很罕见地都是自己的,几乎不可能,但大量引用别人的东西,说明你的综合能力强,你已经阅读了大量的资料,这就是一个过程,一个学习、总结的过程。所有的一切,千万别在版面上让导师责难,这是最划不来的。导师最讨厌版面不规范的,因为他只负责内容,但又不忍心因为版面问题自己的弟子被轰出来。5、下面这一条我傻妞试过的,决对牛B:将别人的文字和部分你自己的文字,选中,复制(成为块,长方形),另外在桌面建一个空文件,将内容,复制到文件中,存盘,关闭。将这个文件的图标选中,复制,在你的正文中的位置上,直接黏贴,就变成了图片了,不能编辑的。这个操作事实上是将内容的文件作为一个对象插入的,所以是图片。这个操作事实上是将内容的文件作为一个对象插入的。所以是图片。 -------------------------------------------------点我用户名,空间博文有介绍 详细各种论文检测系统软件介绍见我空间 各种有效论文修改秘籍、论文格式 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!没有免费的,或者免费的不好用,都是在线的含有的,另外博客的内容也可能是复制知网上的你说的那个没法做到,检测结果只是参考,你加了引用就没问题了

数字图像目标检测论文

论文名称: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算法,从而实现真正的端到端检测算法。 参考博客 :

数字图像处理是利用计算机对图像信息进行加工以满足人的视觉心理或者应用需求的行为,应用广泛,多用于测绘学、大气科学、天文学、美图、使图像提高辨识等。这里学术堂为大家整理了一些数字图像处理毕业论文题目,希望对你有用。1、基于模糊分析的图像处理方法及其在无损检测中的应用研究2、数字图像处理与识别系统的开发3、关于数字图像处理在运动目标检测和医学检验中若干应用的研究4、基于ARM和DSP的嵌入式实时图像处理系统设计与研究5、基于图像处理技术的齿轮参数测量研究6、图像处理技术在玻璃缺陷检测中的应用研究7、图像处理技术在机械零件检测系统中的应用8、基于MATLAB的X光图像处理方法9、基于图像处理技术的自动报靶系统研究10、多小波变换及其在数字图像处理中的应用11、基于图像处理的检测系统的研究与设计12、基于DSP的图像处理系统的设计13、医学超声图像处理研究14、基于DSP的视频图像处理系统设计15、基于FPGA的图像处理算法的研究与硬件设计

论文原文:

YOLO(you only look once)是继RCNN、faster-RCNN之后,又一里程碑式的目标检测算法。yolo在保持不错的准确度的情况下,解决了当时基于深度学习的检测中的痛点---速度问题。下图是各目标检测系统的检测性能对比:

如果说faster-RCNN是真正实现了完全基于深度学习的端到端的检测,那么yolo则是更进一步,将 目标区域预测 与 目标类别判断 整合到单个神经网络模型中。各检测算法结构见下图:

每个网格要预测B个bounding box,每个bounding box除了要回归自身的位置之外,还要附带预测一个confidence值。这个confidence代表了所预测的box中含有object的置信度和这个box预测的有多准两重信息,其值是这样计算的:

其中如果有object落在一个grid cell里,第一项取1,否则取0。第二项是预测的bounding box和实际的groundtruth之间的IoU值。

每个bounding box要预测(x, y, w, h)和confidence共5个值,每个网格还要预测一个类别信息,记为C类。即SxS个网格,每个网格除了要预测B个bounding box外,还要预测C个categories。输出就是S x S x (5*B+C)的一个tensor。(注意:class信息是针对每个网格的,即一个网格只预测一组类别而不管里面有多少个bounding box,而confidence信息是针对每个bounding box的。)

举例说明: 在PASCAL VOC中,图像输入为448x448,取S=7,B=2,一共有20个类别(C=20)。则输出就是7x7x30的一个tensor。整个网络结构如下图所示:

在test的时候,每个网格预测的class信息和bounding box预测的confidence信息相乘,就得到每个bounding box的class-specific confidence score:

等式左边第一项就是每个网格预测的类别信息,第二三项就是每个bounding box预测的confidence。这个乘积即encode了预测的box属于某一类的概率,也有该box准确度的信息。

得到每个box的class-specific confidence score以后,设置阈值,滤掉得分低的boxes,对保留的boxes进行NMS(非极大值抑制non-maximum suppresssion)处理,就得到最终的检测结果。

1、每个grid因为预测两个bounding box有30维(30=2*5+20),这30维中,8维是回归box的坐标,2维是box的confidence,还有20维是类别。其中坐标的x,y用bounding box相对grid的offset归一化到0-1之间,w,h除以图像的width和height也归一化到0-1之间。

2、对不同大小的box预测中,相比于大box预测偏一点,小box预测偏一点肯定更不能被忍受的。而sum-square error loss中对同样的偏移loss是一样。为了缓和这个问题,作者用了一个比较取巧的办法,就是将box的width和height取平方根代替原本的height和width。这个参考下面的图很容易理解,小box的横轴值较小,发生偏移时,反应到y轴上相比大box要大。其实就是让算法对小box预测的偏移更加敏感。

3、一个网格预测多个box,希望的是每个box predictor专门负责预测某个object。具体做法就是看当前预测的box与ground truth box中哪个IoU大,就负责哪个。这种做法称作box predictor的specialization。

4、损失函数公式见下图:

在实现中,最主要的就是怎么设计损失函数,坐标(x,y,w,h),confidence,classification 让这个三个方面得到很好的平衡。简单的全部采用sum-squared error loss来做这件事会有以下不足:

解决方法:

只有当某个网格中有object的时候才对classification error进行惩罚。只有当某个box predictor对某个ground truth box负责的时候,才会对box的coordinate error进行惩罚,而对哪个ground truth box负责就看其预测值和ground truth box的IoU是不是在那个cell的所有box中最大。

作者采用ImageNet 1000-class 数据集来预训练卷积层。预训练阶段,采用网络中的前20卷积层,外加average-pooling层和全连接层。模型训练了一周,获得了top-5 accuracy为(ImageNet2012 validation set),与GoogleNet模型准确率相当。

然后,将模型转换为检测模型。作者向预训练模型中加入了4个卷积层和两层全连接层,提高了模型输入分辨率(224×224->448×448)。顶层预测类别概率和bounding box协调值。bounding box的宽和高通过输入图像宽和高归一化到0-1区间。顶层采用linear activation,其它层使用 leaky rectified linear。

作者采用sum-squared error为目标函数来优化,增加bounding box loss权重,减少置信度权重,实验中,设定为\lambda _{coord} =5 and\lambda _{noobj}= 。

作者在PASCAL VOC2007和PASCAL VOC2012数据集上进行了训练和测试。训练135轮,batch size为64,动量为,学习速率延迟为。Learning schedule为:第一轮,学习速率从缓慢增加到(因为如果初始为高学习速率,会导致模型发散);保持速率到75轮;然后在后30轮中,下降到;最后30轮,学习速率为。

作者还采用了dropout和 data augmentation来预防过拟合。dropout值为;data augmentation包括:random scaling,translation,adjust exposure和saturation。

YOLO模型相对于之前的物体检测方法有多个优点:

1、 YOLO检测物体非常快

因为没有复杂的检测流程,只需要将图像输入到神经网络就可以得到检测结果,YOLO可以非常快的完成物体检测任务。标准版本的YOLO在Titan X 的 GPU 上能达到45 FPS。更快的Fast YOLO检测速度可以达到155 FPS。而且,YOLO的mAP是之前其他实时物体检测系统的两倍以上。

2、 YOLO可以很好的避免背景错误,产生false positives

不像其他物体检测系统使用了滑窗或region proposal,分类器只能得到图像的局部信息。YOLO在训练和测试时都能够看到一整张图像的信息,因此YOLO在检测物体时能很好的利用上下文信息,从而不容易在背景上预测出错误的物体信息。和Fast-R-CNN相比,YOLO的背景错误不到Fast-R-CNN的一半。

3、 YOLO可以学到物体的泛化特征

当YOLO在自然图像上做训练,在艺术作品上做测试时,YOLO表现的性能比DPM、R-CNN等之前的物体检测系统要好很多。因为YOLO可以学习到高度泛化的特征,从而迁移到其他领域。

尽管YOLO有这些优点,它也有一些缺点:

1、YOLO的物体检测精度低于其他state-of-the-art的物体检测系统。

2、YOLO容易产生物体的定位错误。

3、YOLO对小物体的检测效果不好(尤其是密集的小物体,因为一个栅格只能预测2个物体)。

基于图像分割目标检测论文

作为计算机视觉三大任务(图像分类、目标检测、图像分割)之一,目标检测任务在于从图像中定位并分类感兴趣的物体。传统视觉方案涉及霍夫变换、滑窗、特征提取、边界检测、模板匹配、哈尔特征、DPM、BoW、传统机器学习(如随机森林、AdaBoost)等技巧或方法。在卷积神经网络的加持下,目标检测任务在近些年里有了长足的发展。其应用十分广泛,比如在自动驾驶领域,目标检测用于无人车检测其他车辆、行人或者交通标志牌等物体。

目标检测的常用框架可以分为两类,一类是 two-stage/two-shot 的方法,其特点是将兴趣区域检测和分类分开进行,比较有代表性的是R-CNN,Fast R-CNN,Faster R-CNN;另一类是 one-stage/one-shot 的方法,用一个网络同时进行兴趣区域检测和分类,以YOLO(v1,v2,v3)和SSD为代表。

Two-stage的方式面世比较早,由于需要将兴趣区域检测和分类分开进行,虽然精度比较高,但实时性比较差,不适合自动驾驶无人车辆感知等应用场景。因而此次我们主要介绍一下SSD和YOLO系列框架。

SSD与2016年由W. Liu et al.在 SSD: Single Shot MultiBox Detector 一文中提出。虽然比同年提出的YOLO(v1)稍晚,但是运行速度更快,同时更加精确。

SSD的框架在一个基础CNN网络(作者使用VGG-16,但是也可以换成其他网络)之上,添加了一些额外的结构,从而使网络具有以下特性:

用多尺度特征图进行检测 作者在VGG-16后面添加了一些特征层,这些层的尺寸逐渐减小,允许我们在不同的尺度下进行预测。越是深层小的特征图,用来预测越大的物体。

用卷积网络进行预测 不同于YOLO的全连接层,对每个用于预测的 通道特征图,SSD的分类器全都使用了 卷积进行预测,其中 是每个单元放置的先验框的数量, 是预测的类别数。

设置先验框 对于每一个特征图上的单元格,我们都放置一系列先验框。随后对每一个特征图上的单元格对应的每一个先验框,我们预测先验框的 维偏移量和每一类的置信度。例如,对于一个 的特征图,若每一个特征图对应 个先验框,同时需要预测的类别有 类,那输出的大小为 。(具体体现在训练过程中) 其中,若用 表示先验框的中心位置和宽高, 表示预测框的中心位置和宽高,则实际预测的 维偏移量 是 分别是:

下图是SSD的一个框架,首先是一个VGG-16卷积前5层,随后级联了一系列卷积层,其中有6层分别通过了 卷积(或者最后一层的平均池化)用于预测,得到了一个 的输出,随后通过极大值抑制(NMS)获得最终的结果。

图中网络用于检测的特征图有 个,大小依次为 , , , , , ;这些特征图每个单元所对应的预置先验框分别有 , , , , , 个,所以网络共预测了 个边界框,(进行极大值抑制前)输出的维度为 。

未完待续

参考: chenxp2311的CSDN博客:论文阅读:SSD: Single Shot MultiBox Detector 小小将的知乎专栏:目标检测|SSD原理与实现 littleYii的CSDN博客:目标检测论文阅读:YOLOv1-YOLOv3(一)

作者的其他相关文章: 图像分割:全卷积神经网络(FCN)详解 PointNet:基于深度学习的3D点云分类和分割模型 详解 基于视觉的机器人室内定位

SDNET: MULTI-BRANCH FOR SINGLE IMAGE DERAINING USING SWIN 最近,流行的transformer具有全局计算特性,可以进一步促进图像去雨任务的发展。本文首次将Swim-transformer引入图像去雨领域,研究了Swim-transformer在图像去雨领域的性能和潜力。具体来说,我们对Swim-transformer的基本模块进行了改进,设计了一个三分支模型来实现单幅图像的去雨。前者实现了基本的雨型特征提取,而后者融合不同的特征进一步提取和处理图像特征。此外,我们还采用jump connection来融合深层特征和浅层特征。实验表明,现有的公共数据集存在图像重复和背景相对均匀的问题。因此,我们提出了一个新的数据集Rain3000来验证我们的模型。 Transformer[28]最初是自然语言处理(NLP)领域的一个模型,用于并行处理单词向量,以加速模型推理。它的全局计算特性适用于远距离传递特征。这正是计算机视觉领域中卷积运算所不擅长的。Dosovitskiy等人[29]将图像分割成16x16个图像块,将不同的图像块作为不同的词输入到transformer中,提高了图像分类的精度。近年来,人们从深度[30]、多尺度[31]等角度应用transformer来完成相关任务。然而,Transformer也有不可忽视的缺点,例如计算量与图像大小之间存在二次关系,这限制了它的应用环境。Liu等人[32]提出的Swin-transformer使用滑动窗口使模型具有线性计算复杂度,通过跨窗口连接改善了窗口间的信息交换,最终提高了模型在图像分类、目标检测和实例分割等方面的性能。 本文提出了一种新的图像去雨网络SDNet,它是利用Swim-transformer强大的特征表示能力构建的端到端去雨网络。具体地说,我们改进了Swim-transformer的基本模块,重新设计了一个双分支模型,实现了单图像去雨。前者实现了基本的雨型特征提取,后者融合了不同分支的特征。此外,我们采用jump connection来融合深度特征和浅层特征,以提高网络模型的性能。 本文贡献如下: 最近有大量的研究工作将transformer引入CV域,并取得了良好的效果。具体来说,Dosovitskiy等人[29]将图像分成16X16个图像块,然后将其拉伸成一维向量,然后送入网络中完成图像分类任务。Chen等人[38]提出了一种基于卷积运算的transformer与Unet相结合的TransUnet方法,实现医学图像的分割。蒋等[39]设计了与对抗生成网络结构相同的图像生成transformer。transformer中的self-attention导致模型计算直线增长,导致transformer不能在低计算能力的硬件上运行。Liu[32]提出了一种利用滑动窗口方法使网络计算线性增长并加速网络推理的方法。我们的方法是基于这种方法来实现一个单一的图像去雨任务的融合特征。 本文的方法是基于这种方法[32]来实现一个单一的图像去雨任务,融合不同分支的特征、深度特征和浅层特征。 Transformer是一个功能强大的网络模块,可以取代CNN操作。但其中的Muti-Head Attention导致模型的计算量迅速增加,导致transformer模型无法在许多底层硬件中测试和使用,注意力的数学表达式如下:本文使用一个简单而强大的前馈网络作为主干,如图2所示。SDnet网络基本上由三个多分支融合模块组成,称为MSwt,一个多分支模块MSwt-m和两个基本block模块。此外,还增加了跳转连接,目的是融合深特征和浅特征,以提高网络去雨的性能。为了更灵活地构建网络,提出了Basic-block的概念,并设计了两个三分支特征融合块。如图4和图5所示,与后者相比,前者有一个用于融合特征的附加基本块。数学表达式如下: 其中F(·)表示基本块的操作。x表示模块Mswt的输入。这种设计的思想来源于自我注意中的多头注意机制。通过学习F1、F2、F3,可以自适应地学习不同的特征。将输入映射到不同的子空间,分别提取不同的特征。与自我注意不同的是,我们对提取的特征求和,而不是级联操作。通过F4融合增加的特征,实现进一步的特征提取。由于设计思想来源于多头注意机制,多分支具有与该机制相同的特点,即在一定范围内,分支越多,模型性能越好。为了平衡模型的规模和模型的性能,我们选择了三个分支进行特征提取。 虽然transformer可以保持特征在长距离传播,但是仍然需要在网络中结合深特征和浅特征,为此我们设计了一个没有特征融合的Mswt模块,我们称之为Mswt-m,如图5所示,其数学表达式如下: F1、F2、F3将输入映射到三个不同的空间进行特征提取,对提取的特征求和,然后与第二个Mswt模块的输出求和,再经过一个基本块,实现深度特征和浅层特征的融合,如图2中的小跳跃连接所示,而图2中相对较长的跳跃连接则考虑了主要特征中包含的丰富的空间和纹理信息,有助于完成深度特征中缺失的纹理信息。 其中,O为雨图像,B为对应标签。是绝对差(SAD)之和,用于计算相似预测图像和标签之间的像素损失,如等式6所示。SSIM(结构相似性)是结构相似性,最初用作评估两个图像内容的结构相似性的度量。Ren等人[41]证明了SSIM作为损失函数在图像降额任务中的有效性的负面作用,其数学表达式如等式7所示。尽管使用该损失函数可以获得高SSIM度量,但图像仍然存在失真和低峰值信噪比(PSNR)。identity loss(等式8)由CycleGAN[42]导出,CycleGAN[42]用于约束生成图像的颜色丢失,这里我们使用它来约束图像去雨后的图像样式,这减少了图像失真,提高了网络性能。α , β , λ 是SAD损失、SSIM损失和identity loss的系数。在本文中,分别设置为、4和1。 实验使用Tesla V100 16G GPU进行训练,使用Pytorch框架和(Adam)[43],初始学习率为5× 10−4,减少到5× 10−5和5× 10−6当训练迭代次数分别为总迭代次数的3/5和4/5时。输入模型的图像大小设置为231×231. batch size为5。 我们提出了一个全新的数据集用于网络训练和消融实验。该数据集是从ImageNet中随机抽取的10万幅图像,保证了图像的多样性。从Efficientderain[12]降雨模式数据集中随机选择一到四种降雨模式,并添加到选定的图像中。我们最终选择了3000张合成图像作为训练集,400张作为测试集。我们把这个数据集命名为Rain3000。此外,我们还使用公开的数据集Rain100L和Rain100H[44]来验证SDnet模型。两个公开的数据集都包含1800个训练图像和200个测试图像。 使用SSIM和PSNR作为评价指标,这两种指标已被广泛用于评价预测图像的质量。PSNR是根据两幅图像之间的像素误差来计算的,误差越小,值越大,图像越相似,除雨效果越好。相反,图像去雨的效果越差 首先,本文提出了一种基于Swin-transformer的三分支端到端除雨网络,它充分利用了Swin-transformer强大的学习能力,用一种改进的Swin-transformer代替卷积运算,并设计了一个多分支模块来融合不同空间域的信息,使用跳转连接来融合深特征和浅特征。此外,我们提出了一个新的数据集,由3000个训练对和400个测试对组成。该数据集是基于ImageNet生成的,具有丰富的背景和雨型组合,便于模型的推广。我们提出的模型在数据集Rain3000和公共数据集Rain100L、Rain100H上都达到了最佳性能。我们的工作还有些不足。例如,在参数数目相同的情况下,哪种方法更适合于并行或串行的图像去噪任务还没有详细探讨。以及是否可以使用多个不同大小的滑动窗口来实现窗口间的进一步信息交换,以提高网络降容的性能。此外,我们正在使用更简单的前馈网络,更复杂的网络仍然值得研究

随着图像处理技术的迅速发展,图像识别技术的应用领域越来越广泛。我整理了图像识别技术论文,欢迎阅读!

图像识别技术研究综述

摘要:随着图像处理技术的迅速发展,图像识别技术的应用领域越来越广泛。图像识别是利用计算机对图像进行处理、分析和理解,由于图像在成像时受到外部环境的影响,使得图像具有特殊性,复杂性。基于图像处理技术进一步探讨图像识别技术及其应用前景。

关键词:图像处理;图像识别;成像

中图分类号:TP391 文献标识码:A 文章编号:1009-3044(2013)10-2446-02

图像是客观景物在人脑中形成的影像,是人类最重要的信息源,它是通过各种观测系统从客观世界中获得,具有直观性和易理解性。随着计算机技术、多媒体技术、人工智能技术的迅速发展,图像处理技术的应用也越来越广泛,并在科学研究、教育管理、医疗卫生、军事等领域已取得的一定的成绩。图像处理正显著地改变着人们的生活方式和生产手段,比如人们可以借助于图像处理技术欣赏月球的景色、交通管理中的车牌照识别系统、机器人领域中的计算机视觉等,在这些应用中,都离不开图像处理和识别技术。图像处理是指用计算机对图像进行处理,着重强调图像与图像之间进行的交换,主要目标是对图像进行加工以改善图像的视觉效果并为后期的图像识别大基础[1]。图像识别是利用计算机对图像进行处理、分析和理解,以识别各种不同模式的目标和对像的技术。但是由于获取的图像本事具有复杂性和特殊性,使得图像处理和识别技术成为研究热点。

1 图像处理技术

图像处理(image processing)利用计算机对图像进行分析,以达到所需的结果。图像处理可分为模拟图像处理和数字图像图像处理,而图像处理一般指数字图像处理。这种处理大多数是依赖于软件实现的。其目的是去除干扰、噪声,将原始图像编程适于计算机进行特征提取的形式,主要包括图像采样、图像增强、图像复原、图像编码与压缩和图像分割。

1)图像采集,图像采集是数字图像数据提取的主要方式。数字图像主要借助于数字摄像机、扫描仪、数码相机等设备经过采样数字化得到的图像,也包括一些动态图像,并可以将其转为数字图像,和文字、图形、声音一起存储在计算机内,显示在计算机的屏幕上。图像的提取是将一个图像变换为适合计算机处理的形式的第一步。

2)图像增强,图像在成像、采集、传输、复制等过程中图像的质量或多或少会造成一定的退化,数字化后的图像视觉效果不是十分满意。为了突出图像中感兴趣的部分,使图像的主体结构更加明确,必须对图像进行改善,即图像增强。通过图像增强,以减少图像中的图像的噪声,改变原来图像的亮度、色彩分布、对比度等参数。图像增强提高了图像的清晰度、图像的质量,使图像中的物体的轮廓更加清晰,细节更加明显。图像增强不考虑图像降质的原因,增强后的图像更加赏欣悦目,为后期的图像分析和图像理解奠定基础。

3)图像复原,图像复原也称图像恢复,由于在获取图像时环境噪声的影响、运动造成的图像模糊、光线的强弱等原因使得图像模糊,为了提取比较清晰的图像需要对图像进行恢复,图像恢复主要采用滤波方法,从降质的图像恢复原始图。图像复原的另一种特殊技术是图像重建,该技术是从物体横剖面的一组投影数据建立图像。

4)图像编码与压缩,数字图像的显著特点是数据量庞大,需要占用相当大的存储空间。但基于计算机的网络带宽和的大容量存储器无法进行数据图像的处理、存储、传输。为了能快速方便地在网络环境下传输图像或视频,那么必须对图像进行编码和压缩。目前,图像压缩编码已形成国际标准,如比较著名的静态图像压缩标准JPEG,该标准主要针对图像的分辨率、彩色图像和灰度图像,适用于网络传输的数码相片、彩色照片等方面。由于视频可以被看作是一幅幅不同的但有紧密相关的静态图像的时间序列,因此动态视频的单帧图像压缩可以应用静态图像的压缩标准。图像编码压缩技术可以减少图像的冗余数据量和存储器容量、提高图像传输速度、缩短处理时间。

5)图像分割技术,图像分割是把图像分成一些互不重叠而又具有各自特征的子区域,每一区域是像素的一个连续集,这里的特性可以是图像的颜色、形状、灰度和纹理等。图像分割根据目标与背景的先验知识将图像表示为物理上有意义的连通区域的集合。即对图像中的目标、背景进行标记、定位,然后把目标从背景中分离出来。目前,图像分割的方法主要有基于区域特征的分割方法、基于相关匹配的分割方法和基于边界特征的分割方法[2]。由于采集图像时会受到各种条件的影响会是图像变的模糊、噪声干扰,使得图像分割是会遇到困难。在实际的图像中需根据景物条件的不同选择适合的图像分割方法。图像分割为进一步的图像识别、分析和理解奠定了基础。

2 图像识别技术

图像识别是通过存储的信息(记忆中存储的信息)与当前的信息(当时进入感官的信息)进行比较实现对图像的识别[3]。前提是图像描述,描述是用数字或者符号表示图像或景物中各个目标的相关特征,甚至目标之间的关系,最终得到的是目标特征以及它们之间的关系的抽象表达。图像识别技术对图像中个性特征进行提取时,可以采用模板匹配模型。在某些具体的应用中,图像识别除了要给出被识别对象是什么物体外,还需要给出物体所处的位置和姿态以引导计算初工作。目前,图像识别技术已广泛应用于多个领域,如生物医学、卫星遥感、机器人视觉、货物检测、目标跟踪、自主车导航、公安、银行、交通、军事、电子商务和多媒体网络通信等。主要识别技术有:

指纹识别

指纹识别是生物识别技术中一种最实用、最可靠和价格便宜的识别手段,主要应用于身份验证。指纹识别是生物特征的一个部分,它具有不变性:一个人的指纹是终身不变的;唯一性:几乎没有两个完全相同的指纹[3]。一个指纹识别系统主要由指纹取像、预处理与特征提取、比对、数据库管理组成。目前,指纹识别技术与我们的现实生活紧密相关,如信用卡、医疗卡、考勤卡、储蓄卡、驾驶证、准考证等。

人脸识别 目前大多数人脸识别系统使用可见光或红外图像进行人脸识别,可见光图像识别性能很容易受到光照变化的影响。在户外光照条件不均匀的情况下,其正确识别率会大大降低。而红外图像进行人脸识别时可以克服昏暗光照条件变化影响,但由于红外线不能穿透玻璃,如果待识别的对象戴有眼镜,那么在图像识别时,眼部信息全部丢失,将严重影响人脸识别的性能[4]。

文字识别

文字识别是将模式识别、文字处理、人工智能集与一体的新技术,可以自动地把文字和其他信息分离出来,通过智能识别后输入计算机,用于代替人工的输入。文字识别技术可以将纸质的文档转换为电子文档,如银行票据、文稿、各类公式和符号等自动录入,可以提供文字的处理效率,有助于查询、修改、保存和传播。文字识别方法主要有结构统计模式识别、结构模式识别和人工神经网络[5]。由于文字的数量庞大、结构复杂、字体字形变化多样,使得文字识别技术的研究遇到一定的阻碍。

3 结束语

人类在识别现实世界中的各种事物或复杂的环境是一件轻而易举的事,但对于计算机来讲进行复杂的图像识别是非常困难的[6]。在环境较为简单的情况下,图像识别技术取得了一定的成功,但在复杂的环境下,仍面临着许多问题:如在图像识别过程中的图像分割算法之间的性能优越性比较没有特定的标准,以及算法本身存在一定的局限性,这使得图像识别的最终结果不十分精确等。

参考文献:

[1] 胡爱明,周孝宽.车牌图像的快速匹配识别方法[J].计算机工程与应用,2003,39(7):90—91.

[2] 胡学龙.数字图像处理[M].北京:电子工业出版社,2011.

[3] 范立南,韩晓微,张广渊.图像处理与模式识别[M].北京:科学出版社,2007.

[4] 晓慧,刘志镜.基于脸部和步态特征融合的身份识别[J].计算机应用,2009,1(29):8.

[5] 陈良育,曾振柄,张问银.基于图形理解的汉子构型自动分析系统[J].计算机应用,2005,25(7):1629-1631.

[6] Sanderson C,Paliwal K Fusion and Person Verification Using Speech & Face Information[C].IDIAP-RR 02-33,Martigny,Swizerland,2002.

点击下页还有更多>>>图像识别技术论文

yolov3目标检测论文

本文是我对YOLO算法的细节理解总结,本文的阅读前提是已读过YOLO相关论文,文中不会谈及YOLO的发展过程,不会与其他对象检测算法进行对比,也不会介绍YOLO9000相关的内容,只总结YOLOv3算法的具体流程和实现细节。所以,下文中所有提到的YOLO,如非特别说明,均指YOLOv3。 如果需要了解更多对象检测算法,可以参考以下部分相关论文: R-CNN Fast R-CNN Faster R-CNN SSD YOLOv1 YOLOv2 YOLOv3 RetinaNet 最新关于对象检测的综述文献可以参考这篇论文: Deep Learning for Generic Object Detection: A Survey 在YOLO算法发表之前,大部分表现比较好的对象检测(Object Detection)算法都是以R-CNN为代表两阶段算法,这样的算法存在一个很明显的问题,那就是速度太慢,对于实时性要求很高的应用场景是不适用的。YOLO算法的作者没有走优化算法第一阶段或者第二阶段的老路子,而是直接提出一步完成预测,而且是在一个CNN网络模型中完成图片中所有位置对象的box和类别预测,推理速度大大提升,完全可以满足实时对象检测。 YOLO算法创新性地提出了将输入图片进行N*N的栅格化(每个小单元叫grid cell),然后将图片中某个对象的位置的预测任务交与该对象中心位置所在的grid cell的bouding box。简单理解的话,可以认为这也是一种很粗糙的区域推荐(region proposal),在训练的时候,我们通过grid cell的方式告诉模型,图片中对象A应该是由中心落在特定grid cell 的某个范围内的某些像素组成,模型接收到这些信息后就在grid cell周围以一定大小范围去寻找所有满足对象A特征的像素,经过很多次带惩罚的尝试训练后,它就能找到这个准确的范围了(说明不是瞎找,如滑动窗口),当然这个方位不仅是指长宽的大小范围,也包括小幅度的中心位置坐标变化,但是不管怎么变,中心位置不能越过该grid cell的范围。这大大限制了模型在图片中瞎找时做的无用功。这样将位置检测和类别识别结合到一个CNN网络中预测,即只需要扫描一遍(you only look once)图片就能推理出图片中所有对象的位置信息和类别。举例如下图。 以上是我个人理解的YOLO算法的核心思想,不管是YOLOv1还是v2、v3,其主要的核心还是以上所述,只是在bounding box的拟合方式、骨干网络的设计、模型训练的稳定性、精度方面有所提升罢了。下面对整个模型的网络结构、实现和训练细节进行阐述。 既然已经有了you only look once的想法,那接下来就要将这个想法数学化,这样才能用数学的方法训练模型学习拟合坐标和类别的特征,用于后期的预测。YOLO算法几乎是输入原图就直接预测出每个grid cell“附近”是否有某个对象和具体的 box位置,那最终这个想法数学化后便体现在loss函数上,这里我先不给出loss函数的具体公式,因为在提出loss函数之前要先了解三个概念:anchor box、置信度(confidence)和对象条件类别概率(conditional class probabilities)。作者提出,在网络最后的输出中,对于每个grid cell对应bounding box的输出有三类参数:一个是对象的box参数,一共是四个值,即box的中心点坐标(x,y)和box的宽和高(w,h);一个是置信度,这是个区间在[0,1]之间的值;最后一个是一组条件类别概率,都是区间在[0,1]之间的值,代表概率。下面分别具体介绍这三个参数的意义。 anchor box最初是由Faster RCNN引入的。anchor box(论文中也称为bounding box prior,后面均使用anchor box)其实就是从训练集的所有ground truth box中统计(使用k-means)出来的在训练集中最经常出现的几个box形状和尺寸。比如,在某个训练集中最常出现的box形状有扁长的、瘦高的和宽高比例差不多的正方形这三种形状。我们可以预先将这些统计上的先验(或来自人类的)经验加入到模型中,这样模型在学习的时候,瞎找的可能性就更小了些,当然就有助于模型快速收敛了。以前面提到的训练数据集中的ground truth box最常出现的三个形状为例,当模型在训练的时候我们可以告诉它,你要在grid cell 1附件找出的对象的形状要么是扁长的、要么是瘦高的、要么是长高比例差不多的正方形,你就不要再瞎试其他的形状了。anchor box其实就是对预测的对象范围进行约束,并加入了尺寸先验经验,从而可以有效解决对象多尺度的问题(Faster RCNN论文中指出的作用)。 这篇文章 对anchor box的作用进行了另外的解释,个人觉得也很有道理,将部分内容翻译如下: 要在模型中使用这些形状,总不能告诉模型有个形状是瘦高的,还有一个是矮胖的,我们需要量化这些形状。YOLO的做法是想办法找出分别代表这些形状的宽和高,有了宽和高,尺寸比例即形状不就有了。YOLO作者的办法是使用k-means算法在训练集中所有样本的ground truth box中聚类出具有代表性形状的宽和高,作者将这种方法称作维度聚类(dimension cluster)。细心的读者可能会提出这个问题:到底找出几个anchor box算是最佳的具有代表性的形状。YOLO作者方法是做实验,聚类出多个数量不同anchor box组,分别应用到模型中,最终找出最优的在模型的复杂度和高召回率(high recall)之间折中的那组anchor box。作者在COCO数据集中使用了9个anchor box,我们前面提到的例子则有3个anchor box。 那么有了量化的anchor box后,怎么在实际的模型中加入anchor box的先验经验呢?我们在前面中简单提到过最终负责预测grid cell中对象的box的最小单元是bounding box,那我们可以让一个grid cell输出(预测)多个bounding box,然后每个bounding box负责预测不同的形状不就行了?比如前面例子中的3个不同形状的anchor box,我们的一个grid cell会输出3个参数相同的bounding box,第一个bounding box负责预测的形状与anchor box 1类似的box,其他两个bounding box依次类推。作者在YOLOv3中取消了v2之前每个grid cell只负责预测一个对象的限制,也就是说grid cell中的三个bounding box都可以预测对象,当然他们应该对应不同的ground truth。那么如何在训练中确定哪个bounding box负责某个ground truth呢?方法是求出每个grid cell中每个anchor box与ground truth box的IOU(交并比),IOU最大的anchor box对应的bounding box就负责预测该ground truth,也就是对应的对象,后面还会提到负责预测的问题。 到此,还有最后一个问题需要解决,我们才能真正在训练中使用anchor box,那就是我们怎么告诉模型第一个bounding box负责预测的形状与anchor box 1类似,第二个bounding box负责预测的形状与anchor box 2类似?YOLO的做法是不让bounding box直接预测实际box的宽和高(w,h),而是将预测的宽和高分别与anchor box的宽和高绑定,这样不管一开始bounding box输出的(w,h)是怎样的,经过转化后都是与anchor box的宽和高相关,这样经过很多次惩罚训练后,每个bounding box就知道自己该负责怎样形状的box预测了。这个绑定的关系是什么?那就是下面这个公式: 其中, 和 为anchor box的宽和高, 和 为bounding box直接预测出的宽和高, 和 为转换后预测的实际宽和高,这也就是最终预测中输出的宽和高。你可能会想,这个公式这么麻烦,为什么不能用 这样的公式,我的理解是上面的公式虽然计算起来比较麻烦,但是在误差函数求导后还带有 和 参数,而且也好求导 (此观点只是个人推测,需要进一步查证) 。 既然提到了最终预测的宽和高公式,那我们也就直接带出最终预测输出的box中心坐标 的计算公式,我们前面提到过box中心坐标总是落在相应的grid cell中的,所以bounding box直接预测出的 和 也是相对grid cell来说的,要想转换成最终输出的绝对坐标,需要下面的转换公式: 其中, 为sigmoid函数, 和 分别为grid cell方格左上角点相对整张图片的坐标。作者使用这样的转换公式主要是因为在训练时如果没有将 和 压缩到(0,1)区间内的话,模型在训练前期很难收敛。 最终可以得出实际输出的box参数公式如下,这个也是在推理时将输出转换为最终推理结果的公式:关于box参数的转换还有一点值得一提,作者在训练中并不是将 、 、 和 转换为 、 、 和 后与ground truth box的对应参数求误差,而是使用上述公式的逆运算将ground truth box的参数转换为与 、 、 和 对应的 、 、 和 ,然后再计算误差,计算中由于sigmoid函数的反函数难计算,所以并没有计算sigmoid的反函数,而是计算输出对应的sigmoid函数值。关于anchor box训练相关的问题除了与loss函数相关的基本上都解释清楚了,但是预测的问题还没有解释清楚,还存在一个很关键的问题:在训练中我们挑选哪个bounding box的准则是选择预测的box与ground truth box的IOU最大的bounding box做为最优的box,但是在预测中并没有ground truth box,怎么才能挑选最优的bounding box呢?这就需要另外的参数了,那就是下面要说到的置信度。 置信度是每个bounding box输出的其中一个重要参数,作者对他的作用定义有两重:一重是代表当前box是否有对象的概率 ,注意,是对象,不是某个类别的对象,也就是说它用来说明当前box内只是个背景(backgroud)还是有某个物体(对象);另一重表示当前的box有对象时,它自己预测的box与物体真实的box可能的 的值,注意,这里所说的物体真实的box实际是不存在的,这只是模型表达自己框出了物体的自信程度。以上所述,也就不难理解作者为什么将其称之为置信度了,因为不管哪重含义,都表示一种自信程度:框出的box内确实有物体的自信程度和框出的box将整个物体的所有特征都包括进来的自信程度。经过以上的解释,其实我们也就可以用数学形式表示置信度的定义了:其中, 表示第i个grid cell的第j个bounding box的置信度。对于如何训练 的方法,在损失函数小节中说明。 对象条件类别概率是一组概率的数组,数组的长度为当前模型检测的类别种类数量,它的意义是当bounding box认为当前box中有对象时,要检测的所有类别中每种类别的概率,其实这个和分类模型最后使用softmax函数输出的一组类别概率是类似的,只是二者存在两点不同:的对象类别概率中没有background一项,也不需要,因为对background的预测已经交给置信度了,所以它的输出是有条件的,那就是在置信度表示当前box有对象的前提下,所以条件概率的数学形式为 ;2.分类模型中最后输出之前使用softmax求出每个类别的概率,也就是说各个类别之间是互斥的,而YOLOv3算法的每个类别概率是单独用逻辑回归函数(sigmoid函数)计算得出了,所以每个类别不必是互斥的,也就是说一个对象可以被预测出多个类别。这个想法其实是有一些YOLO9000的意思的,因为YOLOv3已经有9000类似的功能,不同只是不能像9000一样,同时使用分类数据集和对象检测数据集,且类别之间的词性是有从属关系的。 介绍完所有的输出参数后,我们总结下模型最终输出层的输出维数是多少。假如一个图片被分割成S*S个grid cell,我们有B个anchor box,也就是说每个grid cell有B个bounding box, 每个bounding box内有4个位置参数,1个置信度,classes个类别概率,那么最终的输出维数是: 。 介绍完模型最终输出中有哪些参数后,我们应该可以定义loss函数了,作者使用了最简单的差平方和误差(sum-squared error),使用的原因很简单,因为好优化。那我们试着给出loss函数的公式:如果看过YOLOv1的论文你会发现,这里的公式和论文中的公式虽然相似,但是差别还是很大的。其实,作者是在上面这个公式的基础上加了很多限制和优化参数,上面的公式只是我为了更好说明YOLO的loss公式而给出的对比公式,这样有助于更好的理解YOLO的loss函数公式中加入的每个参数的意义,下面给出真正的YOLO loss函数公式(这个公式是我根据YOLO三篇论文前后的发展总结出来的,v3论文中未给出此类似的公式):细心的你一定也注意到了,这个公式和YOLOv1论文中的公式是不一样的。那是因为在YOLOv3中,作者将置信度和条件类别概率放到了每个bounding box中,即每个bounding box都有一对置信度和条件类别概率,而v1中所有的bounding box共用一个条件类别概率,上文中在说明输出的各个参数时,默认解释的是v3的输出格式,关于v1的细节不再赘述。下面几点是loss函数的几点细节: YOLO算法从三个不同的尺寸预测对象box,这三个不同的尺寸来自不同层级的卷积层的输出。该方法借鉴了feature pyramid network的思想: 由于卷积层每隔几层,特征映射(feature mapping)的宽和高就会减少,而通道数会增加,随着网络层次的加深,特征映射组成的形状类似于金字塔,如果将不同层级的特征映射转换为最终的输出,那么将有助于提升模型在对象不同尺度大小上的表现,即有助于提高模型从小目标到大目标的综合检测(box的精度)能力,关于feature pyramid network的具体内容,此处不详细展开,可参考 论文 。我们先看下YOLO模型的网络结构,我们以检测COCO数据集输入尺寸为416*416的网络结构为例(COCO数据集类别数为80,anchor box总数为9): 从上面的模型的网络结构图我们可以明显看出基于darknet-53的最新的模型结构有以下几个特点: 以上,就是我个人理解的YOLO算法的一些细节。 作者能力有限,不正确之处欢迎斧正。

论文原文:

YOLO(you only look once)是继RCNN、faster-RCNN之后,又一里程碑式的目标检测算法。yolo在保持不错的准确度的情况下,解决了当时基于深度学习的检测中的痛点---速度问题。下图是各目标检测系统的检测性能对比:

如果说faster-RCNN是真正实现了完全基于深度学习的端到端的检测,那么yolo则是更进一步,将 目标区域预测 与 目标类别判断 整合到单个神经网络模型中。各检测算法结构见下图:

每个网格要预测B个bounding box,每个bounding box除了要回归自身的位置之外,还要附带预测一个confidence值。这个confidence代表了所预测的box中含有object的置信度和这个box预测的有多准两重信息,其值是这样计算的:

其中如果有object落在一个grid cell里,第一项取1,否则取0。第二项是预测的bounding box和实际的groundtruth之间的IoU值。

每个bounding box要预测(x, y, w, h)和confidence共5个值,每个网格还要预测一个类别信息,记为C类。即SxS个网格,每个网格除了要预测B个bounding box外,还要预测C个categories。输出就是S x S x (5*B+C)的一个tensor。(注意:class信息是针对每个网格的,即一个网格只预测一组类别而不管里面有多少个bounding box,而confidence信息是针对每个bounding box的。)

举例说明: 在PASCAL VOC中,图像输入为448x448,取S=7,B=2,一共有20个类别(C=20)。则输出就是7x7x30的一个tensor。整个网络结构如下图所示:

在test的时候,每个网格预测的class信息和bounding box预测的confidence信息相乘,就得到每个bounding box的class-specific confidence score:

等式左边第一项就是每个网格预测的类别信息,第二三项就是每个bounding box预测的confidence。这个乘积即encode了预测的box属于某一类的概率,也有该box准确度的信息。

得到每个box的class-specific confidence score以后,设置阈值,滤掉得分低的boxes,对保留的boxes进行NMS(非极大值抑制non-maximum suppresssion)处理,就得到最终的检测结果。

1、每个grid因为预测两个bounding box有30维(30=2*5+20),这30维中,8维是回归box的坐标,2维是box的confidence,还有20维是类别。其中坐标的x,y用bounding box相对grid的offset归一化到0-1之间,w,h除以图像的width和height也归一化到0-1之间。

2、对不同大小的box预测中,相比于大box预测偏一点,小box预测偏一点肯定更不能被忍受的。而sum-square error loss中对同样的偏移loss是一样。为了缓和这个问题,作者用了一个比较取巧的办法,就是将box的width和height取平方根代替原本的height和width。这个参考下面的图很容易理解,小box的横轴值较小,发生偏移时,反应到y轴上相比大box要大。其实就是让算法对小box预测的偏移更加敏感。

3、一个网格预测多个box,希望的是每个box predictor专门负责预测某个object。具体做法就是看当前预测的box与ground truth box中哪个IoU大,就负责哪个。这种做法称作box predictor的specialization。

4、损失函数公式见下图:

在实现中,最主要的就是怎么设计损失函数,坐标(x,y,w,h),confidence,classification 让这个三个方面得到很好的平衡。简单的全部采用sum-squared error loss来做这件事会有以下不足:

解决方法:

只有当某个网格中有object的时候才对classification error进行惩罚。只有当某个box predictor对某个ground truth box负责的时候,才会对box的coordinate error进行惩罚,而对哪个ground truth box负责就看其预测值和ground truth box的IoU是不是在那个cell的所有box中最大。

作者采用ImageNet 1000-class 数据集来预训练卷积层。预训练阶段,采用网络中的前20卷积层,外加average-pooling层和全连接层。模型训练了一周,获得了top-5 accuracy为(ImageNet2012 validation set),与GoogleNet模型准确率相当。

然后,将模型转换为检测模型。作者向预训练模型中加入了4个卷积层和两层全连接层,提高了模型输入分辨率(224×224->448×448)。顶层预测类别概率和bounding box协调值。bounding box的宽和高通过输入图像宽和高归一化到0-1区间。顶层采用linear activation,其它层使用 leaky rectified linear。

作者采用sum-squared error为目标函数来优化,增加bounding box loss权重,减少置信度权重,实验中,设定为\lambda _{coord} =5 and\lambda _{noobj}= 。

作者在PASCAL VOC2007和PASCAL VOC2012数据集上进行了训练和测试。训练135轮,batch size为64,动量为,学习速率延迟为。Learning schedule为:第一轮,学习速率从缓慢增加到(因为如果初始为高学习速率,会导致模型发散);保持速率到75轮;然后在后30轮中,下降到;最后30轮,学习速率为。

作者还采用了dropout和 data augmentation来预防过拟合。dropout值为;data augmentation包括:random scaling,translation,adjust exposure和saturation。

YOLO模型相对于之前的物体检测方法有多个优点:

1、 YOLO检测物体非常快

因为没有复杂的检测流程,只需要将图像输入到神经网络就可以得到检测结果,YOLO可以非常快的完成物体检测任务。标准版本的YOLO在Titan X 的 GPU 上能达到45 FPS。更快的Fast YOLO检测速度可以达到155 FPS。而且,YOLO的mAP是之前其他实时物体检测系统的两倍以上。

2、 YOLO可以很好的避免背景错误,产生false positives

不像其他物体检测系统使用了滑窗或region proposal,分类器只能得到图像的局部信息。YOLO在训练和测试时都能够看到一整张图像的信息,因此YOLO在检测物体时能很好的利用上下文信息,从而不容易在背景上预测出错误的物体信息。和Fast-R-CNN相比,YOLO的背景错误不到Fast-R-CNN的一半。

3、 YOLO可以学到物体的泛化特征

当YOLO在自然图像上做训练,在艺术作品上做测试时,YOLO表现的性能比DPM、R-CNN等之前的物体检测系统要好很多。因为YOLO可以学习到高度泛化的特征,从而迁移到其他领域。

尽管YOLO有这些优点,它也有一些缺点:

1、YOLO的物体检测精度低于其他state-of-the-art的物体检测系统。

2、YOLO容易产生物体的定位错误。

3、YOLO对小物体的检测效果不好(尤其是密集的小物体,因为一个栅格只能预测2个物体)。

深度学习目前已经应用到了各个领域,应用场景大体分为三类:物体识别,目标检测,自然语言处理。  目标检测可以理解为是物体识别和物体定位的综合 ,不仅仅要识别出物体属于哪个分类,更重要的是得到物体在图片中的具体位置。 2014年R-CNN算法被提出,基本奠定了two-stage方式在目标检测领域的应用。它的算法结构如下图 算法步骤如下: R-CNN较传统的目标检测算法获得了50%的性能提升,在使用VGG-16模型作为物体识别模型情况下,在voc2007数据集上可以取得66%的准确率,已经算还不错的一个成绩了。其最大的问题是速度很慢,内存占用量很大,主要原因有两个 针对R-CNN的部分问题,2015年微软提出了Fast R-CNN算法,它主要优化了两个问题。 R-CNN和fast R-CNN均存在一个问题,那就是 由选择性搜索来生成候选框,这个算法很慢 。而且R-CNN中生成的2000个左右的候选框全部需要经过一次卷积神经网络,也就是需要经过2000次左右的CNN网络,这个是十分耗时的(fast R-CNN已经做了改进,只需要对整图经过一次CNN网络)。这也是导致这两个算法检测速度较慢的最主要原因。 faster R-CNN 针对这个问题, 提出了RPN网络来进行候选框的获取,从而摆脱了选择性搜索算法,也只需要一次卷积层操作,从而大大提高了识别速度 。这个算法十分复杂,我们会详细分析。它的基本结构如下图 主要分为四个步骤: 使用VGG-16卷积模型的网络结构: 卷积层采用的VGG-16模型,先将PxQ的原始图片,缩放裁剪为MxN的图片,然后经过13个conv-relu层,其中会穿插4个max-pooling层。所有的卷积的kernel都是3x3的,padding为1,stride为1。pooling层kernel为2x2, padding为0,stride为2。 MxN的图片,经过卷积层后,变为了(M/16) x (N/16)的feature map了。 faster R-CNN抛弃了R-CNN中的选择性搜索(selective search)方法,使用RPN层来生成候选框,能极大的提升候选框的生成速度。RPN层先经过3x3的卷积运算,然后分为两路。一路用来判断候选框是前景还是背景,它先reshape成一维向量,然后softmax来判断是前景还是背景,然后reshape恢复为二维feature map。另一路用来确定候选框的位置,通过bounding box regression实现,后面再详细讲。两路计算结束后,挑选出前景候选框(因为物体在前景中),并利用计算得到的候选框位置,得到我们感兴趣的特征子图proposal。 卷积层提取原始图像信息,得到了256个feature map,经过RPN层的3x3卷积后,仍然为256个feature map。但是每个点融合了周围3x3的空间信息。对每个feature map上的一个点,生成k个anchor(k默认为9)。anchor分为前景和背景两类(我们先不去管它具体是飞机还是汽车,只用区分它是前景还是背景即可)。anchor有[x,y,w,h]四个坐标偏移量,x,y表示中心点坐标,w和h表示宽度和高度。这样,对于feature map上的每个点,就得到了k个大小形状各不相同的选区region。 对于生成的anchors,我们首先要判断它是前景还是背景。由于感兴趣的物体位于前景中,故经过这一步之后,我们就可以舍弃背景anchors了。大部分的anchors都是属于背景,故这一步可以筛选掉很多无用的anchor,从而减少全连接层的计算量。 对于经过了3x3的卷积后得到的256个feature map,先经过1x1的卷积,变换为18个feature map。然后reshape为一维向量,经过softmax判断是前景还是背景。此处reshape的唯一作用就是让数据可以进行softmax计算。然后输出识别得到的前景anchors。 另一路用来确定候选框的位置,也就是anchors的[x,y,w,h]坐标值。如下图所示,红色代表我们当前的选区,绿色代表真实的选区。虽然我们当前的选取能够大概框选出飞机,但离绿色的真实位置和形状还是有很大差别,故需要对生成的anchors进行调整。这个过程我们称为bounding box regression。 假设红色框的坐标为[x,y,w,h], 绿色框,也就是目标框的坐标为[Gx, Gy,Gw,Gh], 我们要建立一个变换,使得[x,y,w,h]能够变为[Gx, Gy,Gw,Gh]。最简单的思路是,先做平移,使得中心点接近,然后进行缩放,使得w和h接近。如下:我们要学习的就是dx dy dw dh这四个变换。由于是线性变换,我们可以用线性回归来建模。设定loss和优化方法后,就可以利用深度学习进行训练,并得到模型了。对于空间位置loss,我们一般采用均方差算法,而不是交叉熵(交叉熵使用在分类预测中)。优化方法可以采用自适应梯度下降算法Adam。 得到了前景anchors,并确定了他们的位置和形状后,我们就可以输出前景的特征子图proposal了。步骤如下: 1,得到前景anchors和他们的[x y w h]坐标。 2,按照anchors为前景的不同概率,从大到小排序,选取前pre_nms_topN个anchors,比如前6000个 3,剔除非常小的anchors。 4,通过NMS非极大值抑制,从anchors中找出置信度较高的。这个主要是为了解决选取交叠问题。首先计算每一个选区面积,然后根据他们在softmax中的score(也就是是否为前景的概率)进行排序,将score最大的选区放入队列中。接下来,计算其余选区与当前最大score选区的IOU(IOU为两box交集面积除以两box并集面积,它衡量了两个box之间重叠程度)。去除IOU大于设定阈值的选区。这样就解决了选区重叠问题。 5,选取前post_nms_topN个结果作为最终选区proposal进行输出,比如300个。 经过这一步之后,物体定位应该就基本结束了,剩下的就是物体识别了。 和fast R-CNN中类似,这一层主要解决之前得到的proposal大小形状各不相同,导致没法做全连接。全连接计算只能对确定的shape进行运算,故必须使proposal大小形状变为相同。通过裁剪和缩放的手段,可以解决这个问题,但会带来信息丢失和图片形变问题。我们使用ROI pooling可以有效的解决这个问题。 ROI pooling中,如果目标输出为MxN,则在水平和竖直方向上,将输入proposal划分为MxN份,每一份取最大值,从而得到MxN的输出特征图。 ROI Pooling层后的特征图,通过全连接层与softmax,就可以计算属于哪个具体类别,比如人,狗,飞机,并可以得到cls_prob概率向量。同时再次利用bounding box regression精细调整proposal位置,得到bbox_pred,用于回归更加精确的目标检测框。 这样就完成了faster R-CNN的整个过程了。算法还是相当复杂的,对于每个细节需要反复理解。faster R-CNN使用resNet101模型作为卷积层,在voc2012数据集上可以达到的准确率,超过yolo ssd和yoloV2。其最大的问题是速度偏慢,每秒只能处理5帧,达不到实时性要求。 针对于two-stage目标检测算法普遍存在的运算速度慢的缺点, yolo创造性的提出了one-stage。也就是将物体分类和物体定位在一个步骤中完成。 yolo直接在输出层回归bounding box的位置和bounding box所属类别,从而实现one-stage。通过这种方式, yolo可实现45帧每秒的运算速度,完全能满足实时性要求 (达到24帧每秒,人眼就认为是连续的)。它的网络结构如下图: 主要分为三个部分:卷积层,目标检测层,NMS筛选层。 采用Google inceptionV1网络,对应到上图中的第一个阶段,共20层。这一层主要是进行特征提取,从而提高模型泛化能力。但作者对inceptionV1进行了改造,他没有使用inception module结构,而是用一个1x1的卷积,并联一个3x3的卷积来替代。(可以认为只使用了inception module中的一个分支,应该是为了简化网络结构) 先经过4个卷积层和2个全连接层,最后生成7x7x30的输出。先经过4个卷积层的目的是为了提高模型泛化能力。yolo将一副448x448的原图分割成了7x7个网格,每个网格要预测两个bounding box的坐标(x,y,w,h)和box内包含物体的置信度confidence,以及物体属于20类别中每一类的概率(yolo的训练数据为voc2012,它是一个20分类的数据集)。所以一个网格对应的参数为(4x2+2+20) = 30。如下图 其中前一项表示有无人工标记的物体落入了网格内,如果有则为1,否则为0。第二项代表bounding box和真实标记的box之间的重合度。它等于两个box面积交集,除以面积并集。值越大则box越接近真实位置。 分类信息: yolo的目标训练集为voc2012,它是一个20分类的目标检测数据集 。常用目标检测数据集如下表: | Name | # Images (trainval) | # Classes | Last updated | | --------------- | ------------------- | --------- | ------------ | | ImageNet | 450k | 200 | 2015 | | COCO | 120K | 90 | 2014 | | Pascal VOC | 12k | 20 | 2012 | | Oxford-IIIT Pet | 7K | 37 | 2012 | | KITTI Vision | 7K | 3 | | 每个网格还需要预测它属于20分类中每一个类别的概率。分类信息是针对每个网格的,而不是bounding box。故只需要20个,而不是40个。而confidence则是针对bounding box的,它只表示box内是否有物体,而不需要预测物体是20分类中的哪一个,故只需要2个参数。虽然分类信息和confidence都是概率,但表达含义完全不同。 筛选层是为了在多个结果中(多个bounding box)筛选出最合适的几个,这个方法和faster R-CNN 中基本相同。都是先过滤掉score低于阈值的box,对剩下的box进行NMS非极大值抑制,去除掉重叠度比较高的box(NMS具体算法可以回顾上面faster R-CNN小节)。这样就得到了最终的最合适的几个box和他们的类别。 yolo的损失函数包含三部分,位置误差,confidence误差,分类误差。具体公式如下: 误差均采用了均方差算法,其实我认为,位置误差应该采用均方差算法,而分类误差应该采用交叉熵。由于物体位置只有4个参数,而类别有20个参数,他们的累加和不同。如果赋予相同的权重,显然不合理。故yolo中位置误差权重为5,类别误差权重为1。由于我们不是特别关心不包含物体的bounding box,故赋予不包含物体的box的置信度confidence误差的权重为,包含物体的权重则为1。 Faster R-CNN准确率mAP较高,漏检率recall较低,但速度较慢。而yolo则相反,速度快,但准确率和漏检率不尽人意。SSD综合了他们的优缺点,对输入300x300的图像,在voc2007数据集上test,能够达到58 帧每秒( Titan X 的 GPU ),的mAP。 SSD网络结构如下图: 和yolo一样,也分为三部分:卷积层,目标检测层和NMS筛选层 SSD论文采用了VGG16的基础网络,其实这也是几乎所有目标检测神经网络的惯用方法。先用一个CNN网络来提取特征,然后再进行后续的目标定位和目标分类识别。 这一层由5个卷积层和一个平均池化层组成。去掉了最后的全连接层。SSD认为目标检测中的物体,只与周围信息相关,它的感受野不是全局的,故没必要也不应该做全连接。SSD的特点如下。 每一个卷积层,都会输出不同大小感受野的feature map。在这些不同尺度的feature map上,进行目标位置和类别的训练和预测,从而达到 多尺度检测 的目的,可以克服yolo对于宽高比不常见的物体,识别准确率较低的问题。而yolo中,只在最后一个卷积层上做目标位置和类别的训练和预测。这是SSD相对于yolo能提高准确率的一个关键所在。 如上所示,在每个卷积层上都会进行目标检测和分类,最后由NMS进行筛选,输出最终的结果。多尺度feature map上做目标检测,就相当于多了很多宽高比例的bounding box,可以大大提高泛化能力。 和faster R-CNN相似,SSD也提出了anchor的概念。卷积输出的feature map,每个点对应为原图的一个区域的中心点。以这个点为中心,构造出6个宽高比例不同,大小不同的anchor(SSD中称为default box)。每个anchor对应4个位置参数(x,y,w,h)和21个类别概率(voc训练集为20分类问题,在加上anchor是否为背景,共21分类)。如下图所示: 另外,在训练阶段,SSD将正负样本比例定位1:3。训练集给定了输入图像以及每个物体的真实区域(ground true box),将default box和真实box最接近的选为正样本。然后在剩下的default box中选择任意一个与真实box IOU大于的,作为正样本。而其他的则作为负样本。由于绝大部分的box为负样本,会导致正负失衡,故根据每个box类别概率排序,使正负比例保持在1:3。SSD认为这个策略提高了4%的准确率 另外,SSD采用了数据增强。生成与目标物体真实box间IOU为 的patch,随机选取这些patch参与训练,并对他们进行随机水平翻转等操作。SSD认为这个策略提高了的准确率。 和yolo的筛选层基本一致,同样先过滤掉类别概率低于阈值的default box,再采用NMS非极大值抑制,筛掉重叠度较高的。只不过SSD综合了各个不同feature map上的目标检测输出的default box。 SSD基本已经可以满足我们手机端上实时物体检测需求了,TensorFlow在Android上的目标检测官方模型,就是通过SSD算法实现的。它的基础卷积网络采用的是mobileNet,适合在终端上部署和运行。 针对yolo准确率不高,容易漏检,对长宽比不常见物体效果差等问题,结合SSD的特点,提出了yoloV2。它主要还是采用了yolo的网络结构,在其基础上做了一些优化和改进,如下 网络采用DarkNet-19:19层,里面包含了大量3x3卷积,同时借鉴inceptionV1,加入1x1卷积核全局平均池化层。结构如下 yolo和yoloV2只能识别20类物体,为了优化这个问题,提出了yolo9000,可以识别9000类物体。它在yoloV2基础上,进行了imageNet和coco的联合训练。这种方式充分利用imageNet可以识别1000类物体和coco可以进行目标位置检测的优点。当使用imageNet训练时,只更新物体分类相关的参数。而使用coco时,则更新全部所有参数。 YOLOv3可以说出来直接吊打一切图像检测算法。比同期的DSSD(反卷积SSD), FPN(feature pyramid networks)准确率更高或相仿,速度是其1/3.。 YOLOv3的改动主要有如下几点:不过如果要求更精准的预测边框,采用COCO AP做评估标准的话,YOLO3在精确率上的表现就弱了一些。如下图所示。 当前目标检测模型算法也是层出不穷。在two-stage领域, 2017年Facebook提出了mask R-CNN 。CMU也提出了A-Fast-RCNN 算法,将对抗学习引入到目标检测领域。Face++也提出了Light-Head R-CNN,主要探讨了 R-CNN 如何在物体检测中平衡精确度和速度。 one-stage领域也是百花齐放,2017年首尔大学提出 R-SSD 算法,主要解决小尺寸物体检测效果差的问题。清华大学提出了 RON 算法,结合 two stage 名的方法和 one stage 方法的优势,更加关注多尺度对象定位和负空间样本挖掘问题。 目标检测领域的深度学习算法,需要进行目标定位和物体识别,算法相对来说还是很复杂的。当前各种新算法也是层不出穷,但模型之间有很强的延续性,大部分模型算法都是借鉴了前人的思想,站在巨人的肩膀上。我们需要知道经典模型的特点,这些tricks是为了解决什么问题,以及为什么解决了这些问题。这样才能举一反三,万变不离其宗。综合下来,目标检测领域主要的难点如下: 一文读懂目标检测AI算法:R-CNN,faster R-CNN,yolo,SSD,yoloV2 从YOLOv1到v3的进化之路 SSD-Tensorflow超详细解析【一】:加载模型对图片进行测试  YOLO              C#项目参考: 项目实践贴个图。

相关百科
热门百科
首页
发表服务