微信小程序>新闻>资讯>「详解目标检测Faster R-CNN」百家号
「详解目标检测Faster R-CNN」百家号-微信小程序

「详解目标检测Faster R-CNN」百家号

73

分类:新闻资讯

开发作者: 「详解目标检测Faster R-CNN」百家号

发布时间: 2019-04-10 11:24:06

更新时间: 2019-04-10 11:24:06

查看要求: 微信app最新版本

更多信息: 关于「详解目标检测Faster R-CNN」百家号

「详解目标检测Faster R-CNN」百家号-微信小程序二维码

微信扫码体验

「详解目标检测Faster R-CNN」百家号小程序介绍

「详解目标检测Faster R-CNN」百家号_作者自评:

如何看待百家号Lite小程序热议话题「详解目标检测Faster R-CNN」
目标检测的一般结构:背景
R-CNN-是FasterR-CNN的启发版本.R-CNN是采用SelectiveSearch算法来提取(propose)可能的RoIs(regionsofinterest)区域,然后对每个提取区域采用标准CNN进行分类。
出现于2015年早期的FastR-CNN是R-CNN的改进,其采用兴趣区域池化(RegionofInterestPooling,RoIPooling)来共享计算量较大的部分,提高模型的效率.
FasterR-CNN随后被提出,其是第一个完全可微分的模型.是R-CNN论文的第三个版本。
网络结构
FasterR-CNN的结构是复杂的,因为其有几个移动部件。这里先对整体框架宏观介绍,然后再对每个部分的细节分析。
问题描述:
针对一张图片,需要获得的输出有:
边界框(boundingboxes)列表
每个边界框的类别标签
每个边界框和类别标签的概率FasterR-CNN结构
首先,输入图片表示为Height×Width×Depth的张量(多维数组)形式,经过预训练CNN模型的处理,得到卷积特征图(convfeaturemap).即,将CNN作为特征提取器,送入下一个部分.
这种技术在迁移学习(TransferLearning)中比较普遍,尤其是,采用在大规模数据集训练的网络权重,来对小规模数据集训练分类器。
然后,RPN(RegionProposeNetwork)对提取的卷积特征图进行处理。RPN用于寻找可能包含objects的预定义数量的区域(regions,边界框)
.
基于深度学习的目标检测中,可能最难的问题就是生成长度不定(variable-length)的边界框列表。在构建深度神经网络时,最后的网络输出一般是固定尺寸的张量输出(采用RNN的除外)。例如,在图片分类中,网络输出是(N,)的张量,N是类别标签数,张量的每个位置的标量值表示图片是类别i的概率值.
在RPN中,通过采用anchors来解决边界框列表长度不定的问题,即,在原始图像中统一放置固定大小的参考边界框。不同于直接检测objects的位置,这里将问题转化为两部分:
对每一个anchor而言,
anchor是否包含相关的object?
如何调整anchor以更好的拟合相关的object?这里可能不容易理解,后面会深入介绍。
当获得了可能的相关objects和其在原始图像中的对应位置之后,问题就更加直接了.采用CNN提取的特征和包含相关objects的边界框,采用RoIPooling处理,并提取相关object的特征,得到一个新的向量.
最后,基于R-CNN模块,得到:
对边界框内的内容进行分类,(或丢弃边界框,采用background作为一个label)
调整边界框坐标,以更好的使用object显而易见,上面忽略了一些重要的细节信息。但,包括了FasterR-CNN的大致思想。
下面对网络结构和每个部分的训练及loss进行详细说明.
基础网络
正如上面所说,FasterR-CNN第一步是采用基于分类任务(如,ImageNet)的CNN模型作为特征提取器.听起来是比较简单的,但,重要的是理解其如何工作和为什么会有效,并可视化中间层,查看其输出形式。
网络结构很难说哪种是最好的。FasterR-CNN最早是采用在ImageNet训练的ZF和VGG,其后出现了很多其它权重不同的网络.MobileNet是一种小型效率高的网络结构,仅有3.3M参数;而ResNet-152的参数量达到了60M.新网络结构DenseNet在提高了结果的同时,降低了参数数量。
VGG在讨论网络结构孰优孰劣之前,这里以VGG16为例。
VGG16网络结构
VGG16是ImageNetILSVRC2014竞赛的模型,其是由KarenSimonyan和AndrewZisserman发表在论文VeryDeepConvolutionalNetworksforLarge-ScaleImageRecognition上.
今天来看,VGG16网络结构是不算深的,但在当时,其将网络层比常用的网络结构扩展了两倍,开始了"deeper→morecapacity→better"的网络结构设计方向(在训练允许的情况)。
VGG16图片分类时,输入为224×224×3的张量(一张224×224像素的RGB图片).网络结构最后采用FC层(而不是Conv层)得到固定长度的向量,以进行图片分类。对最后一个卷积层的输出拉伸为rank1的张量,然后送入FC层。
由于FasterR-CNN是采用VGG16的中间卷积层的输出,因此,不用关心输入的尺寸.而且,该模块仅利用了卷积层.进一步去分析模块所使用的哪一层卷积层.论文中没有指定所使用的卷积层,但在官方实现中是采用的卷积层conv5/conv5_1
的输出.
每个卷积层利用前面网络信息来生成抽象描述.第一层一般学习边缘edges信息,第二层学习边缘edges中的图案patterns,以学习更复杂的形状等信息.最终,可以得到卷积特征图,其空间维度(分辨率)比原图小了很多,但更深.特征图的width和height由于卷积层间的池化层而降低,而depth由于卷积层学习的filters数量而增加.
图像到卷积特征图
在depth上,卷积特征图对图片的所有信息进行了编码,同时保持相对于原始图片所编码"things"的位置.例如,如果在图片的左上角存在一个红色正方形,而且卷积层有激活响应,那么该红色正方形的信息被卷积层编码后,仍在卷积特征图的左上角.
VGGvsResNetResNet结构逐渐取代VGG作为基础网络,用于提取特征。FasterR-CNN的共同作者也是ResNet网络结构论文DeepResidualLearningforImageRecognition的共同作者。
ResNet相对于VGG的明显优势是,网络更大,因此具有更强的学习能力。这对于分类任务是重要的,在目标检测中也如此。
另外,ResNet采用残差连接(residualconnection)和BN(batchnormalization)使得深度模型的训练比较容易.这对于VGG首次提出的时候没有出现.
Anchors在获得了处理后的图片后,需要寻找proposals,如用于分类的RoIs(regionsofinterest).anchors是用来解决长度不定问题的.
目标是寻找图片中的边界框boundingboxes,边界框是具有不同尺寸sizes和长宽比aspectratios的矩形.
假设,已经知道图片中有两个objects,首先想到的是,训练一个网络,输出8个值:两对元组xmin,ymin,xmax,ymax,分别定义了每个object的边界框.这种方法存在一些基本问题.例如,当图片的尺寸和长宽比不一致时,良好训练模型来预测,会非常复杂.另一个问题是无效预测:预测xmin和xmax时,需要保证xmin<xmax.
事实上,有一种更加简单的方法来预测objects的边界框,即,学习相对于参考boxes的偏移量.假设参考box:xcenter,ycenter,width,height,待预测量Δxcenter、Δycenter、Δwidth、Δheight,一般都是很小的值,以调整参考box更好的拟合所需要的.
Anchors
是固定尺寸的边界框,是通过利用不同的尺寸和比例在图片上放置得到的boxes,并作为第一次预测object位置的参考boxes.
因为是对提取的Convwidth×Convheight×ConvDepth卷积特征图进行处理,因此,在Convwidth×Convheight的每个点创建anchors.需要理解的是,虽然anchors是基于卷积特征图定义的,但最终的anchos是相对于原始图片的.
由于只有卷积层和pooling层,特征图的维度是与原始图片的尺寸成比例关系的.即,数学地表述,如果图片尺寸w×h,特征图的尺寸则是w/r×h/r.其中,r是下采样率(subsamplingratio).如果在卷积特征图空间位置定义anchor,则最终的图片会是由r像素划分的anchors集.在VGG中,r=16.
原始图片上的AnchorCenters
为了选择anchors集,一般是先定义许多不同尺寸(如,64px,128px,256px等)和boxes长宽比(如,0.5,1,1.5等),并使用所有可能的尺寸和比例组合.
左:Anchors;中:单个点的Anchor;右:全部Anchors
RPN-RegionProposalNetwork
RPN结构-RPN输入是卷积特征图,输出图片生成的proposals
RPN利用所有的参考boxes(anchors),输出一系列objecs的良好的proposals.针对每个anchor,都有两个不同的输出:
anchor内是某个object的概率.RPN不关注于anchor是某个objectclass,只是确定其可能是一个object(而不是背景background).即:RPN不关心object类别,只确定是object还是background。利用objectscore,去滤出将要用于第二阶段的效果不佳的boxes.
anchor边界框回归输出边界框的输出用于调整anchors来更好的拟合预测的object.
RPN是全卷积(fullconv)网络,其采用基础网络输出的卷积特征图作为输入.首先,采用512channel,3×3kernel的卷积层,然后是两个并行的1×1kernel的卷积层,该卷积层的channels数量取决每个点的anchors的数量.
RPN结构的全卷积实现,k是anchors数量
对于分类层,每个anchor输出两个预测值:anchor是背景(background,非object)的score和anchor是前景(foreground,object)的score。
对于回归层,也可以叫边界框调整层,每个anchor输出4个预测值:Δxcenter、Δycenter、Δwidth、Δheight,即用于anchors来得到最终的proposals。
根据最终的proposal坐标和其对应的objectnessscore,即可得到良好的objectsproposals.
训练、目标和损失函数RPN有两种类型的预测值输出:二值分类和边界框回归调整。
训练时,对所有的anchors分类为两种类别.与ground-truthobject边界框的IoU(IntersectionoverUnion)大于0.5的anchors作为foreground;小于0.1的作为background.
然后,随机采样anchors来生成batchsize=256的mini-batch,尽可能的保持foreground和backgroundanchors的比例平衡.
RPN对mini-batch内的所有anchors采用来计算分类loss.然后,只对mini-batch内标记为foreground的anchros计算回归loss.为了计算回归的目标targets,根据foregroundanchor和其最接近的groundtruthobject,计算将anchor变换到objectgroundtruth的偏移值correctΔ.
没有采用简单的L1或L2loss用于回归误差,而是采用SmoothL1loss.SmoothL1和L1基本相同,但是,当L1误差值非常小时,表示为一个确定值σ,即认为是接近正确的,loss就会以更快的速度消失.
采用动态batches是很有挑战性的.即使已经尝试保持background和foreground的anchors的平衡比例,也不总是可行的.根据图片中groundtruthobjects和anchors的尺度与比例,很有可能得不到foregroundanchors.这种情况时,将采用与groundtruthboxes具有最大IoU的anchors.这与理想情况相差很远,但实际中一般总能有foreground样本和要学习目标.
4.2.后处理非极大值抑制(Non-maximumsuppression)由于Anchors一般是有重叠的overlap,因此,相同object的proposals也存在重叠.
为了解决重叠proposals问题,采用NMS算法处理,丢弃与一个score更高的proposal间IoU大于预设阈值的proposals.
虽然NMS看起来比较简单,但IoU阈值的预设需要谨慎处理.如果IoU值太小,可能丢失objetcs的一些proposals;如果IoU值过大,可能会导致objects出现很多proposals.IoU典型值为0.6.Proposal选择NMS处理后,根据sore对topN个proposals排序.在论文中N=2000,其值也可以小一点,如50,仍然能的高好的结果.
单独应用RPNRPN可以独立使用,不用2-stage模型.
当处理的问题是,单个object类时,objectness概率即可作为最终的类别概率.此时,"foreground"="singleclass","background"="notsingleclass"。
可以应用于人脸检测(facedetection),文字检测(textdetection),等。
仅单独采用RPN的优点在于,训练和测试速度较快.由于RPN是仅有卷积层的简单网络,其预测效率比采用分类base网络的效率高。
RoIPooling
RPN处理后,可以得到一堆没有classscore的objectproposals。
待处理问题为,如何利用这些边界框boundingboxes,并分类。
一种最简单的方法是,对每个porposal,裁剪,并送入pre-trainedbase网络,提取特征;然后,将提取特征来训练分类器.但,这就需要对所有的2000个proposals进行计算,效率低,速度慢。
则通过重用卷积特征图(convfeaturemap)来加快计算效率.即,采用RoI(regionofinterest)Pooling对每个proposal提取固定尺寸的特征图.R-CNN是对固定尺寸的特征图分类。
RoIPooling
目标检测中,包括FasterR-CNN,常用一种更简单的方法,即:采用每个proposal来对卷积特征图裁剪crop,然后利用插值算法(一般为双线性插值bilinear)将每个cropresize到固定尺寸14×14×ConvDepth.裁剪后,利用2×2kernel的MaxPooling得到每个proposal的最终7×7×ConvDepth特征图。
之所以选择该精确形状,与其在下面的模块(R-CNN)中的应用有关.。
R-CNN–Region-basedCNN
R-CNN是FasterR-CNN框架中的最后一个步骤.
计算图片的卷积特征图convfeaturemap;
然后采用RPN对卷积特征图处理,得到objectproposals;
再利用RoIPooling对每个proposal提取特征;
最后,利用提取特征进行分类R-CNN是模仿分类CNNs的最后一个阶段,采用全连接层来输出每个可能的object类别class的score。
R-CNN有两个不同的输出:
对每个proposal分类,其中类别包括一个background类(用于去除不良proposals)
根据预测的类别class,更好的调整proposal边界框在论文中,R-CNN对每个proposal的特征图,拉平flatten,并采用ReLU和两个大小为4096维的全连接层进行处理.
然后,对每个不同objects采用两个不同的全连接层处理:
一个全连接层有N+1个神经单元,其中N是类别class的总数,包括backgroundclass
一个全连接层有4N个神经单元.回归预测输出,得到N个可能的类别classes分别预测Δcenterx,Δcentery,Δwidth,ΔheightR-CNN结构
训练和目标
R-CNN的目标基本上是与RPN目标的计算是一致的,但需要考虑不同的可能的object类别classes。
根据proposals和ground-truthboxes,计算其IoU。
与任何一个ground-truthbox的IoU大于0.5的proposals被设为正确的boxes.IoU在0.1到0.5之间时设为background。
与RPN中目标组装相关,这里忽略没有任何交叉的proposals.这是因为,在此阶段,假设已经获得良好的proposals,主要关注于解决难例.当然,所有的这些超参数都是可以用于调整以更好的拟合objects。
边界框回归的目标计算的是proposal与其对应的ground-truth间的偏移量,只对基于IoU阈值设定类别class后的proposals进行计算。
随机采用一个平衡化的mini-batch=64,其中,25%的foregroundproposals(具有类别class)和75%的backgroundproposals。
类似于RPNs的losses,对于选定的proposals,分类loss采用multiclassentropyloss;对于25%的foregroundproposals采用SmoothL1loss计算其与groundtruthbox的匹配.
由于R-CNN全连接网络对每个类别class仅输出一个预测值,当计算边框回归loss时需谨慎.当计算loss时,只需考虑正确的类别。
后处理
类似于RPN,R-CNN最终输出一堆带有类别class的objects,在返回结果前,再进一步进行处理。
为了调整边界框,需要考虑概率最大的类别的proposals.忽略概率最大值为backgroundclass的proposals。
当得到最终的objects时,并忽略被预测为background的结果,采用class-basedNMS.主要是通过对objects根据类别class分组,然后根据概率排序,并对每个独立的分组采用NMS处理,最后再放在一起。
最终得到的objects列表,仍可继续通过设定概率阈值的方式,来限制每个类的objects数量。
FasterR-CNN训练
在论文中是采用分步multi-step方法,对每个模块分别训练再合并训练的权重.自此,End-to-end的联合训练被发现能够得到更好的结果.
当将完整的模型合并后,得到4个不同的losses,2个用于RPN,2个用于R-CNN.RPN和R-CNN的base基础网络可以是可训练(fine-tune)的,也可以是不能训练的。
base基础网络的训练与否,取决于待学习的objects与可用的计算力.如果新数据与base基础网络训练的原始数据集相似,则不必进行训练,除非是想尝试其不同的表现.base基础网络的训练是比较时间与硬件消耗较高,需要适应梯度计算。
4种不同的losses以加权和的形式组织.可以根据需要对分类loss和回归loss设置权重,或者对R-CNN和RPNs设置不同权重。
采用SGD训练,momentum=0.9.学习率初始值为0.001,50K次迭代后衰减为0.0001.这是一组常用参数设置。
评价Evaluation
评价准则:指定IoU阈值对应的MeanAveragePrecision(mAP),如mAP@0.5.
mAP来自信息检索,常用与计算ranking问题的误差计算,以及评估目标检测结果.
总结
至此,对FasterR-CNN的处理方式有了清晰的理解,可以根据实际应用场合来做一些应用。
如果想进一步深入理解,可以参考LuminothFasterR-CNN实现。
FasterR-CNN可以用于解决复杂的计算机视觉问题,并取得很好的效果.虽然这里模型是目标检测,但对于语义分割,3D目标检测等,都可以基于以上模型.或借鉴于RPN,或借鉴于R-CNN,或两者都有.因此,能够深度理解其工作原理,对于更好的解决其它问题很有帮助。
原文:https://tryolabs.com/blog/2018/01/18/faster-r-cnn-down-the-rabbit-hole-of-modern-object-detection/

该话题由百家号作者AI火箭营「简介:以最有效的方式帮助学员成为AI高端人才!」整理发布
更多有关详解目标检测Faster R-CNN的话题讨论请关注百家号Lite小程序

「详解目标检测Faster R-CNN」百家号_使用指南:

步骤1:微信扫描「详解目标检测Faster R-CNN」百家号小程序码即可使用;

步骤2:微信搜索「详解目标检测Faster R-CNN」百家号小程序名称即可使用;

步骤3:微信网页访问即速商店-长按识别「详解目标检测Faster R-CNN」百家号小程序码即可使用。

「详解目标检测Faster R-CNN」百家号_服务声明:

本服务由「详解目标检测Faster R-CNN」百家号小程序开发者向微信用户提供,并对本服务信息内容、数据资料及其运营行为等的真实性、合法性及有效性承担全部责任。

"「详解目标检测Faster R-CNN」百家号"由开发者"「详解目标检测Faster R-CNN」百家号"原创首发于微信小程序商店shop.jisuapp.cn,转载请注明出处。

「详解目标检测Faster R-CNN」百家号小程序截图

「详解目标检测Faster R-CNN」百家号小程序评分

4.6

共收到5条评价

5星3条

4星2条

3星0条

2星0条

1星0条

「详解目标检测Faster R-CNN」百家号小程序评论

请给小程序评分

  • 【拉登就怕我】2019-05-20 02:09:43

    「详解目标检测Faster R-CNN」百家号真的是一个特别好用的小程序,为小程序疯狂打call!

  • い湎對現實ぜ2019-05-20 02:07:19

    挺不错的「详解目标检测Faster R-CNN」百家号微信小程序,很用心。

  • ﹏天不冷你冷゛2019-05-20 02:03:51

    体验了「详解目标检测Faster R-CNN」百家号微信小程序一把,很棒,推荐!

  • 缘梦阁2019-05-20 02:03:33

    自打用了这个「详解目标检测Faster R-CNN」百家号小程序吧,手机里的同类APP就被我卸载了~

  • 莪疯迩*2019-05-20 02:01:10

    感谢这个「详解目标检测Faster R-CNN」百家号微信小程序,在满足我需求的同时解放了我的手机内存!

提交小程序关注微信

海量浏览,人人体验

提交申请

入驻催审,首页推荐