微信扫码体验
「详解目标检测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;右:全部AnchorsRPN-RegionProposalNetworkRPN结构-RPN输入是卷积特征图,输出图片生成的proposalsRPN利用所有的参考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网络的效率高。RoIPoolingRPN处理后,可以得到一堆没有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-basedCNNR-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」百家号小程序评分
共收到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」百家号微信小程序,在满足我需求的同时解放了我的手机内存!