faster Rcnn详解

关于Faster-RCNN 参考B站视频Pytorch 搭建自己的Faster-RCNN目标检测平台(Bubbliiiing 深度学习 教程)_哔哩哔哩_bilibili 什么是Faster-RCNN 显然,我们可以人眼可以一眼就看到猫在图片的位置,但是 Faster-RCNN整体结构介绍 Resnet50主干提取网络介绍 ... 阅读详情

转:https://blog.youkuaiyun.com/a8039974/article/details/77592389

↑↑↑↑目录在这里↑↑↑↑↑

Faster RCNN github : https://github.com/rbgirshick/py-faster-rcnn

Faster RCNN paper : https://arxiv.org/abs/1506.01497

Bound box regression详解 : http://download.youkuaiyun.com/download/zy1034092330/9940097(来源:王斌_ICT)

 

缩进经过RCNN和Fast RCNN的积淀,Ross B. Girshick在2016年提出了新的Faster RCNN,在结构上,Faster RCN已经将特征抽取(feature extraction),proposal提取,bounding box regression(rect refine),classification都整合在了一个网络中,使得综合性能有较大提高,在检测速度方面尤为明显。

图1 Faster CNN基本结构(来自原论文)

缩进依作者看来,如图1,Faster RCNN其实可以分为4个主要内容:

  1. Conv layers。作为一种CNN网络目标检测方法,Faster RCNN首先使用一组基础的conv+relu+pooling层提取image的feature maps。该feature maps被共享用于后续RPN层和全连接层。
  2. Region Proposal Networks。RPN网络用于生成region proposals。该层通过softmax判断anchors属于foreground或者background,再利用bounding box regression修正anchors获得精确的proposals。
  3. Roi Pooling。该层收集输入的feature maps和proposals,综合这些信息后提取proposal feature maps,送入后续全连接层判定目标类别。
  4. Classification。利用proposal feature maps计算proposal的类别,同时再次bounding box regression获得检测框最终的精确位置。

所以本文以上述4个内容作为切入点介绍Faster RCNN网络。

缩进图2展示了python版本中的VGG16模型中的faster_rcnn_test.pt的网络结构,可以清晰的看到该网络对于一副任意大小PxQ的图像,首先缩放至固定大小MxN,然后将MxN图像送入网络;而Conv layers中包含了13个conv层+13个relu层+4个pooling层;RPN网络首先经过3x3卷积,再分别生成foreground anchors与bounding box regression偏移量,然后计算出proposals;而Roi Pooling层则利用proposals从feature maps中提取proposal feature送入后续全连接和softmax网络作classification(即分类proposal到底是什么object)。

path:${py-faster-rcnn-root}/models/pascal_voc/VGG16/faster_rcnn_alt_opt/faster_rcnn_test.pt

图2 faster_rcnn_test.pt网络结构

1 Conv layers

缩进Conv layers包含了conv,pooling,relu三种层。以python版本中的VGG16模型中的faster_rcnn_test.pt的网络结构为例,如图2,Conv layers部分共有13个conv层,13个relu层,4个pooling层。这里有一个非常容易被忽略但是又无比重要的信息,在Conv layers中:

  1. 所有的conv层都是:kernel_size=3,pad=1
  2. 所有的pooling层都是:kernel_size=2,stride=2

为何重要?在Faster RCNN Conv layers中对所有的卷积都做了扩边处理(pad=1,即填充一圈0),导致原图变为(M+2)x(N+2)大小,再做3x3卷积后输出MxN。正是这种设置,导致Conv layers中的conv层不改变输入和输出矩阵大小。如图3:

图3

类似的是,Conv layers中的pooling层kernel_size=2,stride=2。这样每个经过pooling层的MxN矩阵,都会变为(M/2)*(N/2)大小。综上所述,在整个Conv layers中,conv和relu层不改变输入输出大小,只有pooling层使输出长宽都变为输入的1/2。

缩进那么,一个MxN大小的矩阵经过Conv layers固定变为(M/16)x(N/16)!这样Conv layers生成的featuure map中都可以和原图对应起来。

 

2 Region Proposal Networks(RPN)

缩进经典的检测方法生成检测框都非常耗时,如OpenCV adaboost使用滑动窗口+图像金字塔生成检测框;或如RCNN使用SS(Selective Search)方法生成检测框。而Faster RCNN则抛弃了传统的滑动窗口和SS方法,直接使用RPN生成检测框,这也是Faster RCNN的巨大优势,能极大提升检测框的生成速度。

图4 RPN网络结构

上图4展示了RPN网络的具体结构。可以看到RPN网络实际分为2条线,上面一条通过softmax分类anchors获得foreground和background(检测目标是foreground),下面一条用于计算对于anchors的bounding box regression偏移量,以获得精确的proposal。而最后的Proposal层则负责综合foreground anchors和bounding box regression偏移量获取proposals,同时剔除太小和超出边界的proposals。其实整个网络到了Proposal Layer这里,就完成了相当于目标定位的功能。

2.1 多通道图像卷积基础知识介绍

缩进在介绍RPN前,还要多解释几句基础知识,已经懂的看官老爷跳过就好。

  1. 对于单通道图像+单卷积核做卷积,第一章中的图3已经展示了;
  2. 对于多通道图像+多卷积核做卷积,计算方式如下:

图5 多通道+多卷积核做卷积示意图(摘自Theano教程)

缩进如图5,输入图像layer m-1有4个通道,同时有2个卷积核w1和w2。对于卷积核w1,先在输入图像4个通道分别作卷积,再将4个通道结果加起来得到w1的卷积输出;卷积核w2类似。所以对于某个卷积层,无论输入图像有多少个通道,输出图像通道数总是等于卷积核数量!

缩进对多通道图像做1x1卷积,其实就是将输入图像于每个通道乘以卷积系数后加在一起,即相当于把原图像中本来各个独立的通道“联通”在了一起。

2.2 anchors

缩进提到RPN网络,就不能不说anchors。所谓anchors,实际上就是一组由rpn/generate_anchors.py生成的矩形。直接运行作者demo中的generate_anchors.py可以得到以下输出:

 
  1. [[ -84.  -40.   99.   55.]

  2.  [-176.  -88.  191.  103.]

  3.  [-360. -184.  375.  199.]

  4.  [ -56.  -56.   71.   71.]

  5.  [-120. -120.  135.  135.]

  6.  [-248. -248.  263.  263.]

  7.  [ -36.  -80.   51.   95.]

  8.  [ -80. -168.   95.  183.]

  9.  [-168. -344.  183.  359.]]

其中每行的4个值[x1,y1,x2,y2]代表矩形左上和右下角点坐标。9个矩形共有3种形状,长宽比为大约为:width:height = [1:1, 1:2, 2:1]三种,如图6。实际上通过anchors就引入了检测中常用到的多尺度方法。

图6 anchors示意图

注:关于上面的anchors size,其实是根据检测图像设置的。在python demo中,会把任意大小的输入图像reshape成800x600(即图2中的M=800,N=600)。再回头来看anchors的大小,anchors中长宽1:2中最大为352x704,长宽2:1中最大736x384,基本是cover了800x600的各个尺度和形状。

那么这9个anchors是做什么的呢?借用Faster RCNN论文中的原图,如图7,遍历Conv layers计算获得的feature maps,为每一个点都配备这9种anchors作为初始的检测框。这样做获得检测框很不准确,不用担心,后面还有2次bounding box regression可以修正检测框位置。

图7

解释一下上面这张图的数字。

  1. 在原文中使用的是ZF model中,其Conv Layers中最后的conv5层num_output=256,对应生成256张特征图,所以相当于feature map每个点都是256-d
  2. 在conv5之后,做了rpn_conv/3x3卷积且num_output=256,相当于每个点又融合了周围3x3的空间信息(猜测这样做也许更鲁棒?反正我没测试),同时256-d不变(如图4和图7中的红框)
  3. 假设在conv5 feature map中每个点上有k个anchor(默认k=9),而每个anhcor要分foreground和background,所以每个点由256d feature转化为cls=2k scores;而每个anchor都有[x, y, w, h]对应4个偏移量,所以reg=4k coordinates
  4. 补充一点,全部anchors拿去训练太多了,训练程序会在合适的anchors中随机选取128个postive anchors+128个negative anchors进行训练(什么是合适的anchors下文5.1有解释)

注意,在本文讲解中使用的VGG conv5 num_output=512,所以是512d,其他类似.....

2.3 softmax判定foreground与background

 

缩进一副MxN大小的矩阵送入Faster RCNN网络后,到RPN网络变为(M/16)x(N/16),不妨设W=M/16,H=N/16。在进入reshape与softmax之前,先做了1x1卷积,如图8:

图8 RPN中判定fg/bg网络结构

该1x1卷积的caffe prototxt定义如下:

 
  1. layer {

  2. name: "rpn_cls_score"

  3. type: "Convolution"

  4. bottom: "rpn/output"

  5. top: "rpn_cls_score"

  6. convolution_param {

  7. num_output: 18 # 2(bg/fg) * 9(anchors)

  8. kernel_size: 1 pad: 0 stride: 1

  9. }

  10. }

可以看到其num_output=18,也就是经过该卷积的输出图像为WxHx18大小(注意第二章开头提到的卷积计算方式)。这也就刚好对应了feature maps每一个点都有9个anchors,同时每个anchors又有可能是foreground和background,所有这些信息都保存WxHx(9x2)大小的矩阵。为何这样做?后面接softmax分类获得foreground anchors,也就相当于初步提取了检测目标候选区域box(一般认为目标在foreground anchors中)。

缩进那么为何要在softmax前后都接一个reshape layer?其实只是为了便于softmax分类,至于具体原因这就要从caffe的实现形式说起了。在caffe基本数据结构blob中以如下形式保存数据:

blob=[batch_size, channel,height,width]

对应至上面的保存bg/fg anchors的矩阵,其在caffe blob中的存储形式为[1, 2*9, H, W]。而在softmax分类时需要进行fg/bg二分类,所以reshape layer会将其变为[1, 2, 9*H, W]大小,即单独“腾空”出来一个维度以便softmax分类,之后再reshape回复原状。贴一段caffe softmax_loss_layer.cpp的reshape函数的解释,非常精辟:

 
  1. "Number of labels must match number of predictions; "

  2. "e.g., if softmax axis == 1 and prediction shape is (N, C, H, W), "

  3. "label count (number of labels) must be N*H*W, "

  4. "with integer values in {0, 1, ..., C-1}.";

综上所述,RPN网络中利用anchors和softmax初步提取出foreground anchors作为候选区域。

2.4 bounding box regression原理

缩进介绍bounding box regression数学模型及原理。如图9所示绿色框为飞机的Ground Truth(GT),红色为提取的foreground anchors,那么即便红色的框被分类器识别为飞机,但是由于红色的框定位不准,这张图相当于没有正确的检测出飞机。所以我们希望采用一种方法对红色的框进行微调,使得foreground anchors和GT更加接近。

图9

缩进对于窗口一般使用四维向量(x, y, w, h)表示,分别表示窗口的中心点坐标和宽高。对于图 10,红色的框A代表原始的Foreground Anchors,绿色的框G代表目标的GT,我们的目标是寻找一种关系,使得输入原始的anchor A经过映射得到一个跟真实窗口G更接近的回归窗口G',即:给定anchor A=(Ax, Ay, Aw, Ah),GT=[Gx, Gy, Gw, Gh],寻找一种变换F:使得F(Ax, Ay, Aw, Ah)=(G'x, G'y, G'w, G'h),其中(G'x, G'y, G'w, G'h)≈(Gx, Gy, Gw, Gh)。

图10

那么经过何种变换F才能从图6中的anchor A变为G'呢? 比较简单的思路就是:

缩进 1. 先做平移

缩进 2. 再做缩放

缩进观察上面4个公式发现,需要学习的是dx(A),dy(A),dw(A),dh(A)这四个变换。当输入的anchor A与GT相差较小时,可以认为这种变换是一种线性变换, 那么就可以用线性回归来建模对窗口进行微调(注意,只有当anchors A和GT比较接近时,才能使用线性回归模型,否则就是复杂的非线性问题了)。对应于Faster RCNN原文,平移量(tx, ty)与尺度因子(tw, th)如下:

缩进接下来的问题就是如何通过线性回归获得dx(A),dy(A),dw(A),dh(A)了。线性回归就是给定输入的特征向量X, 学习一组参数W, 使得经过线性回归后的值跟真实值Y非常接近,即Y=WX。对于该问题,输入X是一张经过卷积获得的feature map,定义为Φ;同时还有训练传入的GT,即(tx, ty, tw, th)。输出是dx(A),dy(A),dw(A),dh(A)四个变换。那么目标函数可以表示为:

其中Φ(A)是对应anchor的feature map组成的特征向量,w是需要学习的参数,d(A)是得到的预测值(*表示 x,y,w,h,也就是每一个变换对应一个上述目标函数)。为了让预测值(tx, ty, tw, th)与真实值差距最小,设计损失函数:

函数优化目标为:

2.5 对proposals进行bounding box regression

缩进在了解bounding box regression后,再回头来看RPN网络第二条线路,如图11。

 

图11 RPN中的bbox reg

先来看一看上图11中1x1卷积的caffe prototxt定义:

 
  1. layer {

  2. name: "rpn_bbox_pred"

  3. type: "Convolution"

  4. bottom: "rpn/output"

  5. top: "rpn_bbox_pred"

  6. convolution_param {

  7. num_output: 36 # 4 * 9(anchors)

  8. kernel_size: 1 pad: 0 stride: 1

  9. }

  10. }

可以看到其num_output=36,即经过该卷积输出图像为WxHx36,在caffe blob存储为[1, 36, H, W],这里相当于feature maps每个点都有9个anchors,每个anchors又都有4个用于回归的[dx(A),dy(A),dw(A),dh(A)]变换量。

2.6 Proposal Layer

缩进Proposal Layer负责综合所有[dx(A),dy(A),dw(A),dh(A)]变换量和foreground anchors,计算出精准的proposal,送入后续RoI Pooling Layer。还是先来看看Proposal Layer的caffe prototxt定义:

 
  1. layer {

  2. name: 'proposal'

  3. type: 'Python'

  4. bottom: 'rpn_cls_prob_reshape'

  5. bottom: 'rpn_bbox_pred'

  6. bottom: 'im_info'

  7. top: 'rois'

  8. python_param {

  9. module: 'rpn.proposal_layer'

  10. layer: 'ProposalLayer'

  11. param_str: "'feat_stride': 16"

  12. }

  13. }

Proposal Layer有3个输入:fg/bg anchors分类器结果rpn_cls_prob_reshape,对应的bbox reg的[dx(A),dy(A),dw(A),dh(A)]变换量rpn_bbox_pred,以及im_info;另外还有参数feat_stride=16,这和图4是对应的。

缩进首先解释im_info。对于一副任意大小PxQ图像,传入Faster RCNN前首先reshape到固定MxN,im_info=[M, N, scale_factor]则保存了此次缩放的所有信息。然后经过Conv Layers,经过4次pooling变为WxH=(M/16)x(N/16)大小,其中feature_stride=16则保存了该信息,用于计算anchor偏移量。

图12

缩进Proposal Layer forward(caffe layer的前传函数)按照以下顺序依次处理:

  1. 生成anchors,利用[dx(A),dy(A),dw(A),dh(A)]对所有的anchors做bbox regression回归(这里的anchors生成和训练时完全一致)
  2. 按照输入的foreground softmax scores由大到小排序anchors,提取前pre_nms_topN(e.g. 6000)个anchors,即提取修正位置后的foreground anchors。
  3. 利用im_info将fg anchors从MxN尺度映射回PxQ原图,判断fg anchors是否大范围超过边界,剔除严重超出边界fg anchors。
  4. 进行nms(nonmaximum suppression,非极大值抑制)
  5. 再次按照nms后的foreground softmax scores由大到小排序fg anchors,提取前post_nms_topN(e.g. 300)结果作为proposal输出。

之后输出proposal=[x1, y1, x2, y2],注意,由于在第三步中将anchors映射回原图判断是否超出边界,所以这里输出的proposal是对应MxN输入图像尺度的,这点在后续网络中有用。另外我认为,严格意义上的检测应该到此就结束了,后续部分应该属于识别了~

 

RPN网络结构就介绍到这里,总结起来就是:

生成anchors -> softmax分类器提取fg anchors -> bbox reg回归fg anchors -> Proposal Layer生成proposals

 

3 RoI pooling

缩进而RoI Pooling层则负责收集proposal,并计算出proposal feature maps,送入后续网络。从图3中可以看到Rol pooling层有2个输入:

  1. 原始的feature maps
  2. RPN输出的proposal boxes(大小各不相同)

3.1 为何需要RoI Pooling

缩进先来看一个问题:对于传统的CNN(如AlexNet,VGG),当网络训练好后输入的图像尺寸必须是固定值,同时网络输出也是固定大小的vector or matrix。如果输入图像大小不定,这个问题就变得比较麻烦。有2种解决办法:

  1. 从图像中crop一部分传入网络
  2. 将图像warp成需要的大小后传入网络

图13 crop与warp破坏图像原有结构信息

两种办法的示意图如图13,可以看到无论采取那种办法都不好,要么crop后破坏了图像的完整结构,要么warp破坏了图像原始形状信息。回忆RPN网络生成的proposals的方法:对foreground anchors进行bound box regression,那么这样获得的proposals也是大小形状各不相同,即也存在上述问题。所以Faster RCNN中提出了RoI Pooling解决这个问题(需要说明,RoI Pooling确实是从SPP发展而来,但是限于篇幅这里略去不讲,有兴趣的读者可以自行查阅相关论文)。

3.2 RoI Pooling原理

缩进分析之前先来看看RoI Pooling Layer的caffe prototxt的定义:

 
  1. layer {

  2. name: "roi_pool5"

  3. type: "ROIPooling"

  4. bottom: "conv5_3"

  5. bottom: "rois"

  6. top: "pool5"

  7. roi_pooling_param {

  8. pooled_w: 7

  9. pooled_h: 7

  10. spatial_scale: 0.0625 # 1/16

  11. }

  12. }

其中有新参数pooled_w=pooled_h=7,另外一个参数spatial_scale=1/16应该能够猜出大概吧。

缩进RoI Pooling layer forward过程:在之前有明确提到:proposal=[x1, y1, x2, y2]是对应MxN尺度的,所以首先使用spatial_scale参数将其映射回(M/16)x(N/16)大小的feature maps尺度(这里来回多次映射,是有点绕);之后将每个proposal水平和竖直都分为7份,对每一份都进行max pooling处理。这样处理后,即使大小不同的proposal,输出结果都是7x7大小,实现了fixed-length output(固定长度输出)。

 

图14 proposal示意图

 

4 Classification

缩进Classification部分利用已经获得的proposal feature maps,通过full connect层与softmax计算每个proposal具体属于那个类别(如人,车,电视等),输出cls_prob概率向量;同时再次利用bounding box regression获得每个proposal的位置偏移量bbox_pred,用于回归更加精确的目标检测框。Classification部分网络结构如图15。

图15 Classification部分网络结构图

 

从PoI Pooling获取到7x7=49大小的proposal feature maps后,送入后续网络,可以看到做了如下2件事:

  1. 通过全连接和softmax对proposals进行分类,这实际上已经是识别的范畴了
  2. 再次对proposals进行bounding box regression,获取更高精度的rect box

这里来看看全连接层InnerProduct layers,简单的示意图如图16,

图16 全连接层示意图

其计算公式如下:

其中W和bias B都是预先训练好的,即大小是固定的,当然输入X和输出Y也就是固定大小。所以,这也就印证了之前Roi Pooling的必要性。到这里,我想其他内容已经很容易理解,不在赘述了。

 

5 Faster RCNN训练

缩进Faster CNN的训练,是在已经训练好的model(如VGG_CNN_M_1024,VGG,ZF)的基础上继续进行训练。实际中训练过程分为6个步骤:

  1. 在已经训练好的model上,训练RPN网络,对应stage1_rpn_train.pt
  2. 利用步骤1中训练好的RPN网络,收集proposals,对应rpn_test.pt
  3. 第一次训练Fast RCNN网络,对应stage1_fast_rcnn_train.pt
  4. 第二训练RPN网络,对应stage2_rpn_train.pt
  5. 再次利用步骤4中训练好的RPN网络,收集proposals,对应rpn_test.pt
  6. 第二次训练Fast RCNN网络,对应stage2_fast_rcnn_train.pt

可以看到训练过程类似于一种“迭代”的过程,不过只循环了2次。至于只循环了2次的原因是应为作者提到:"A similar alternating training can be run for more iterations, but we have observed negligible improvements",即循环更多次没有提升了。接下来本章以上述6个步骤讲解训练过程。

5.1 训练RPN网络

缩进在该步骤中,首先读取RBG提供的预训练好的model(本文使用VGG),开始迭代训练。来看看stage1_rpn_train.pt网络结构,如图17。

图17 stage1_rpn_train.pt

(考虑图片大小,Conv Layers中所有的层都画在一起了,如红圈所示,后续图都如此处理)

与检测网络类似的是,依然使用Conv Layers提取feature maps。整个网络使用的Loss如下:

上述公式中,i表示anchors index,pi表示foreground softmax predict概率,pi*代表对应的GT predict概率(即当第i个anchor与GT间IoU>0.7,认为是该anchor是foreground,pi*=1;反之IoU<0.3时,认为是该anchor是background,pi*=0;至于那些0.3<IoU<0.7的anchor则不参与训练);t代表predict bounding box,t*代表对应foreground anchor对应的GT box。可以看到,整个Loss分为2部分:

  1. cls loss,即rpn_cls_loss层计算的softmax loss,用于分类anchors为forground与background的网络训练
  2. reg loss,即rpn_loss_bbox层计算的soomth L1 loss,用于bounding box regression网络训练。注意在该loss中乘了pi*,相当于只关心foreground anchors的回归(其实在回归中也完全没必要去关心background)。

缩进由于在实际过程中,Ncls和Nreg差距过大,用参数λ平衡二者(如Ncls=256,Nreg=2400时设置λ=10),使总的网络Loss计算过程中能够均匀考虑2种Loss。这里比较重要是Lreg使用的soomth L1 loss,计算公式如下:

缩进了解数学原理后,反过来看图17:

  1. 在RPN训练阶段,rpn-data(python AnchorTargetLayer)层会按照和test阶段Proposal层完全一样的方式生成Anchors用于训练
  2. 对于rpn_loss_cls,输入的rpn_cls_scors_reshape和rpn_labels分别对应p与p*,Ncls参数隐含在p与p*的caffe blob的大小中
  3. 对于rpn_loss_bbox,输入的rpn_bbox_pred和rpn_bbox_targets分别对应t于t*,rpn_bbox_inside_weigths对应p*,rpn_bbox_outside_weights对应λ,Nreg同样隐含在caffe blob大小中

这样,公式与代码就完全对应了。特别需要注意的是,在训练和检测阶段生成和存储anchors的顺序完全一样,这样训练结果才能被用于检测!

5.2 通过训练好的RPN网络收集proposals

缩进在该步骤中,利用之前的RPN网络,获取proposal rois,同时获取foreground softmax probability,如图18,然后将获取的信息保存在python pickle文件中。该网络本质上和检测中的RPN网络一样,没有什么区别。

图18 rpn_test.pt

5.3 训练Fast RCNN网络

缩进读取之前保存的pickle文件,获取proposals与foreground probability。从data层输入网络。然后:

  1. 将提取的proposals作为rois传入网络,如图19蓝框
  2. 将foreground probability作为bbox_inside_weights传入网络,如图19绿框
  3. 通过caffe blob大小对比,计算出bbox_outside_weights(即λ),如图19绿框

这样就可以训练最后的识别softmax与最终的bounding regression了,如图19。

图19 stage1_fast_rcnn_train.pt

Faster rcnn test浮点运算次数(卷积实现过程,Faster rcnn总体结构和参数) 我在调试faster rcnn demo.py的代码后,用监控卡口图片做了测试,并统计了其浮点运算次数(这只是一个粗略的统计,即仅统计了卷积部分乘法运算次数),另外,该代码可以通过pycharm调试,为了能深入理解其内部原理,建议大家动手调试。      上表中,结合protobuf文件,我们知道,layer_name表示层名,bottom表示层输入数据,top表示层输出数据,kernel_si 阅读详情

相关推荐

Faster R-CNN

上文提到的k就是anchors的数量,所以2k个分数就是9个anchors的共18个分数,36(4×9)个坐标。这个2k score只区分是不是目标,输出候选区域属于前景(物体)和背景的分数,这里注意,这里的分类只区分是否包含目标,至于所包含目标的类别,是Faster-RCNN最后的分类网络干的事情。由于是2分类(有无物体两种分类),所以它的维度是2k score(2个分数)。2k score,因为RPN是提候选框,还不用判断类别,所以只要求区分是不是物体就行,2个分数:前景(物体)的分数,和背景的分数;

HY的博客 8087

深度学习之检测模型-Faster RCNN

State-of-the-art object detection networks depend on region proposal algorithms to hypothesize object locations. Advances like SPPnet and Fast R-CNN have reduced the running time of these detection net

whz1861的博客 1万+

【代码阅读】Faster RCNN 网络结构详解

这里写自定义目录标题Faster RCNNImage Pro-Processing主干网络 Faster RCNN作为two stage目标检测方法的代表作,其中有很多模块非常经典,在后续的two stage的模型中有广泛的应用。而且在3D Object Detection的问题中,也是如此。这就回顾一下Faster RCNN的网络结构。 这里推荐一个博客,http://www.telesens....

麒麒哈尔的博客 1万+

Faster - R - CNN 详解

摘要言归正传,目标检测领域由RCNN开始,通将引入卷积神经网络取得了长足的进展,但是始终未能摆脱传统区域建议算法的限制。Fast RCNN提到如果去除区域建议算法的话,网络能够接近实时,而selective search方法进行区域建议的时间一般在秒级。产生差异的原因在于卷积神经网络部分运行在GPU上,而selective search运行在CPU上,所以效率自然是不可同日而语。一种可以想到的解决策

zww275250的博客 1290

Waymo数据集里的隐藏彩蛋:5个激光雷达数据融合实战(附Python代码)

本文深入解析Waymo数据集中5个激光雷达的数据融合技术,提供Python实战代码,帮助开发者掌握多传感器协同工作的关键方法。通过时间同步、坐标转换和运动补偿等技术,实现高精度3D场景重建,提升自动驾驶系统的环境感知能力。

weixin_30399821的博客 82

【Linux内核】Linux内核裁剪完全指南:从理论到实战的系统优化

在嵌入式设备、专用服务器和物联网系统日益普及的今天,如何让Linux系统在资源受限的环境中高效运行成为开发者必须面对的问题。Linux内核裁剪正是解决这一问题的关键技术,它通过移除不必要的内核组件,打造出更精简、更安全、更高效的自定义操作系统。本文将系统全面地介绍Linux内核裁剪的完整流程和实用技巧,帮助您掌握这一核心技能。Linux内核裁剪是一项结合技术知识与实践经验的系统工程。明确需求:裁剪前必须清晰了解目标系统的硬件配置和功能需求。循序渐进:采取小步修改、反复测试的策略,避免一次性大幅修改。

撬动未来的支点的专栏 1390

Faster RCNN详解

paper:Faster R-CNN: Towards Real-Time Object Detection with Region Proposal Networks 前言 faster rcnn是何凯明等大神在2015年提出目标检测算法,该算法在2015年的ILSVRV和COCO竞赛中获得多项第一。该算法在fast rcnn基础上提出了RPN候选框生成算法,使得目标检测速度大大提高。 R CN...

小白的深度学习的博客 19万+

2024最新超详细无痛安装PyTorch,包括下载地址、环境配置与各种避坑指南

PyTorch更新很快,2024最新下载安装经验贴,包括anaconda+CUDA+cuDNN+PyTorch四部分的下载和安装。文章详细介绍了下载地址、环境配置、虚拟环境建立的问题,还温馨提示了各种闭坑指南。有需要的友友快过来康康!

qq_43596278的博客 11万+

Faster-RCNN详解

Faster-RCNN详解 Faster-RCNN源码分析可以点击这里 1. 向前传播过程 1.1 CNN提取特征 就是将图片输入到预训练好的CNN网络中获取特征图feature map。 以含有四层maxpool的vgg网络为例,输入图片大小为(w,h,3),则输出特征图的大小为(w/16, h/16, 512) 1.2 RPN网络 Faster-RCNN一个重要的变化就是抛弃了前代RCNN使用SS(Selective Search)方法生成检测框,而是使用RPN网络。 1.2.1 生成anchor ba

panfengblog 1293

MeshLab新手必看:5分钟搞定泊松表面重建(附完整点云处理流程)

本文详细介绍了如何使用MeshLab进行泊松表面重建,从点云数据导入、预处理到核心参数设置,再到后处理与模型优化,提供了完整的3D重建流程指南。特别适合计算机视觉和3D重建领域的新手快速掌握泊松重建技术,提升工作效率。

kafka6courier的博客 230

【git】git: ‘interpret-trailers’ is not a git command. See ‘git --help’

cents 7.6系统. yum源安装git最新版本是1.8.3 报错: git: 'interpret-trailers' is not a git command. See 'git --help'. cannot insert change-id line in .git/COMMIT_EDITMSG 解决: git add xxx git commit -m "xxx" 然后修改 vim .git/hooks/commit-msg #if test -n "${reviewurl}" ; th

machh的专栏 4759

Faster RCNN 模型详解

在(M/16)x(N/16)x256的特征通过1x1卷积,得到(M/16)x(N/16)x4k的输出,,因为这里是生成每个anchor的坐标偏移量(用于修正anchor)[tx,ty,tw,th],共4个,所以是4k,可以看到上图中,其 num_output=36,即经过该卷积输出图像为WxHx36,表示成[1,4xk,H,W],这里相当于feature maps每个点都有k个anchors,每个anchors又都有4个变换量,后期就是利用这4个变换量来调整anchor的位置。先解释im_info。

2402_83979924的博客 1600

Python爬虫实战:爬取国家企业信用信息公示系统(最新反反爬技术解析)

在当今大数据时代,企业信用数据对于市场分析、风险评估和商业决策具有重要价值。国家企业信用信息公示系统作为官方权威的企业信息平台,包含了全国各类企业的注册信息、行政处罚、经营异常等关键数据。复杂的反爬机制(动态Token、验证码、请求频率限制)数据渲染方式多样(部分内容由JavaScript动态加载)法律与合规风险(需遵守《网络安全法》和网站Robots协议)本文将详细介绍如何使用Python最新技术栈构建一个高效、稳定的企业信用信息爬虫,并重点解析应对各种反爬策略的解决方案。

2201_76125261的博客 2697

faster-rcnn源码详解

当一张图片传入到faster-rcnn时,他会被resize到600*800大小,然后将这张图片传入到主干特征提取网络,得到38*50网格的特征图 ,每个网格包含若干个先验框,利用RPN建议网络可以获得先验框的调整参数以及这些先验框是否包含物体,此时我们就得到了建议框,利用这些建议框在特征层上进行截取,截取的特征图进入到ROI pooling层调整到相同大小,然后利用分类与回归预测建议框中是否包含目标,同时对建议框进行调整。整体来说,网络运行包含两步,一步是粗略的筛选,一步是精细的调整。 首

qq_52053775的博客 2334

【人工智能】AI 智能体驾驭工程(Harness Engineering)全解析

OpenAI将Harness定义为让Agent能完成有用工作的系统工程,Harness Engineering则是持续设计、实现、迭代这套系统的方法论;Anthropic将其概括为「让模型真正成为可靠Agent的基础设施」;Martin Fowler/Thoughtworks则将其定义为「控制Agent各层循环的规格、质量检查与工作流指导体系」。强大的AI模型是一匹爆发力极强的烈马;Prompt Engineering是「对马喊话的技巧」,Context Engineering是「给马看的地图」;

奶爸的编程之路,也就一周冷个三天 5245

开源数字人、虚拟直播部署教程

对,你无看错,是欧美的。在直播带货案例里,我们把模型导入到ue4,我们给模型在ue4里预设了四个动作(站着、站着说话、坐着、坐着说话),三个表情(平静、开发、愤怒),三个镜头(全局、近矩说话、看显示器播放商品展示)。我们只需要把目标主播的直播给录制下来,提取样本数据,然后训练一个从粉丝的不同刺激的组合,到主播的不同响应方式的多元逻辑回归的数学模型参数即可。

南七小僧的学海无涯 4563

Faster-RCNN网络详解

前面铺垫都是为了学习最终的Faster-RCNN网络,为此学习了PASCAL VOC数据集、COCO数据集、评价指标、SS算法、R-CNN网络、Fast-RCNN网络,这些可以到本文参考博客查看。本文有两个目的,其一是作为本人自己的笔记,方便自己巩固复习;其二,希望拙劣的见解能够帮助到正在自学的朋友。

ThreeStones1029的博客 3035

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

Faster RCNN Pytorch 实现 代码级 详解

Faster RCNN Pytorch 代码级 详解

Vertira的博客 1156

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

Faster-RCNN的faster_rcnn文件详解

pytorch编写Faster-RCNN的下载地址 目录下的Faster-Rcnn网络文件地址 网络注意事项: 整个网络的调用方式是Faster-RCNN其中有两个网络是外包给其他*.py文件实现: 1)self.RCNN_base,这里是特征提取的网络。 2)self.RCNN_top, self.RCNN_cls_score,self.RCNN_bbox_pred,最后用于分类的...

a1103688841的博客 2122

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

目标检测之Faster RCNN详解

导读:Faster-RCNN发表于NIPS 2015上的一篇论文《Faster R-CNN: Towards Real-Time Object Detection with Region Proposal Networks》。该算法最大的创新点是提出了RPN(Region Proposal Network)网络,利用Anchor机制将区域生成与卷积网络联系到一起,将检测速度一举提升到17 FPS,而且在VOC 2012测试集上实现了70.4%的检测效果,在当时可谓是以一己之力将目标检测推向了实时的高潮。后面

Just_do_myself的博客 8578

Faster-RCNN的demo文件详解

目录 pytorch编写Faster-RCNN的下载地址 我们分部讲解demo程序 导入库: 创建生成器用于for: 设置程序输入参数: 使用EasyDict为一些网络属性赋值: _get_image_blob函数: 主函数初始化: 创建网络: 关于.create_architecture()方法 加载模型数据: 模型,数据放入GPU: 数据送入模型: 画图和显...

a1103688841的博客 3875

RCNN、Fast-RCNN、Faster-RCNN网络详解

RCNN RCNN算法流程: 1.一张图片生成1k~2k个候选区域(使用Selective Search方法); 2.对每个候选区域,使用深度网络(即图片分类网络)提取特征; 3.特征送入每一类的SVM分类器,判别是否属于该类; 4.使用回归器精细修正候选框位置。 1.候选区域的生成 利用Selective Search算法通过图像分割的方法得到一些原始区域,然后使用一些合并策略将这些区域合并,得到一个层次化的区域结构,这些结构就包含着肯能需要的物体。 2.对每个候选区域,使用深度网络提取特征 将200

STATEABC的博客 6798

Faster RCNN Pytorch实现 详解

Faster RCNN Pytorch实现 详解

Vertira的博客 1074

Faster RCNN代码详解(五):关于检测网络(Fast RCNN)的proposal

在系列(二)中介绍了Faster RCNN算法的网络结构,其中有一个用于生成ROI proposal target的自定义层,该自定义层的输出作为检测网络(Fast RCNN)的输入,这篇博客就来介绍这个自定义层的内容。该自定义层的实现所在脚本~/mx-rcnn/rcnn/symbol/proposal_target.py,该层返回的group列表包含4个值,分别是rois,label,bbox_...

AI之路 7710

【目标检测】Faster RCNN算法详解

继RCNN,fast RCNN之后,目标检测界的领军人物Ross Girshick在2015年提出faster RCNN。目标检测速度达到15fps。

shenxiaolu1984的专栏 25万+
上一篇: python 格式规范
下一篇: YOLO V1算法详解
言希0127
博客等级 码龄9年 51粉丝 51原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值