RPN(RegionProposal Network)区域生成网络 

Faster-RCNN的核心。在这里整理。

1.anchors

特征可以看做一个尺度51*39的256通道图像,对于该图像的每一个位置,考虑9个可能的候选窗口:三种面积{128,256,512}×{128,256,512}×三种比例{1:1,1:2,2:1}{1:1,1:2,2:1}。这些候选窗口称为anchors。下图示出51*39个anchor中心,以及9种anchor示例。 

{1282,2562,5122}×{1282,2562,5122}×三种比例{1:1,1:2,2:1}{1:1,1:2,2:1}。这些候选窗口称为anchors。下图示出51*39个anchor中心,以及9种anchor示例。 

2.SOFTMAX的两支

 计算每个像素256-d的9个尺度下的值,得到9个anchor,我们给每个anchor分配一个二进制的标签(前景背景)。我们分配正标签前景给两类anchor:1)与某个ground truth(GT)包围盒有最高的IoU重叠的anchor(也许不到0.7),2)与任意GT包围盒有大于0.7的IoU交叠的anchor。注意到一个GT包围盒可能分配正标签给多个anchor。我们分配负标签(背景)给与所有GT包围盒的IoU比率都低于0.3的anchor。非正非负的anchor对训练目标没有任何作用,由此输出维度为(2*9)18,一共18维。

假设在conv5 feature map中每个点上有k个anchor(默认k=9),而每个anhcor要分foreground和background,所以每个点由256d feature转化为cls=2k scores;而每个anchor都有[x, y, w, h]对应4个偏移量,所以reg=4k coordinates

补充一点,全部anchors拿去训练太多了,训练程序会在合适的anchors中随机选取128个postive anchors+128个negative anchors进行训练。

-------------------------------------------------------分割线-------------------------------------------------------------------

以上是传统的RPN,下面是Faster R-CNN 的RPN部分。

3.bounding box regression

前2.)中已经计算出foreground anchors,使用bounding box regression回归得到预设anchor-box到ground-truth-box之间的变换参数,即平移(dx和dy)和伸缩参数(dw和dh),由此得到初步确定proposal。

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

图9

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

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

缩进 1. 先做平移

缩进 2. 再做缩放

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

(后两个公式写错了,是tw,th)

缩进接下来的问题就是如何通过线性回归获得dx(A),dy(A),dw(A),dh(A)了。线性回归就是给定输入的特征向量X, 学习一组参数W, 使得经过线性回归后的值跟真实值Y(即GT)非常接近,即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)与真实值最小,得到损失函数:

函数优化目标为:

Boundingbox regression原理http://blog.csdn.net/elaine_bao/article/details/60469036

4.将预proposal利用feat_stride和im_info将anchors映射回原图,判断预proposal是否大范围超过边界,剔除严重超出边界的。

按照softmax score进行从大到小排序,提取前2000个预proposal,对这个2000个进行NMS(非极大值抑制),将得到的再次进行排序,输出300个proposal。

NMS(非极大值抑制)

由于锚点经常重叠,因此建议最终也会在同一个目标上重叠。为了解决重复建议的问题,我们使用一个简单的算法,称为非极大抑制(NMS)。NMS 获取按照分数排序的建议列表并对已排序的列表进行迭代,丢弃那些 IoU 值大于某个预定义阈值的建议,并提出一个具有更高分数的建议。总之,抑制的过程是一个迭代-遍历-消除的过程。如下图所示:

  • 将所有候选框的得分进行排序,选中最高分及其所对应的BB;

图10

  • 遍历其余的框,如果它和当前最高得分框的重叠面积大于一定的阈值,我们将其删除。

图11

  • 从没有处理的框中继续选择一个得分最高的,重复上述过程。

框架流程:from:https://blog.csdn.net/zjucor/article/details/78232024

我的这个可以看到具体数据流动情况。

layer{name:"data"top:"data"type:"Input"input_param{shape{ dim: 1 dim: 3 dim: 224 dim: 224}}
}
#========= conv1-conv5 ============layer {name: "conv1"type: "Convolution"bottom: "data"top: "conv1" param { lr_mult: 1.0 }param { lr_mult: 2.0 }convolution_param {num_output: 96kernel_size: 7pad: 3  stride: 2}
}
layer {name: "relu1"type: "ReLU"bottom: "conv1"top: "conv1"
}
layer {name: "norm1"type: "LRN"bottom: "conv1"top: "norm1" lrn_param {local_size: 3alpha: 0.00005beta: 0.75norm_region: WITHIN_CHANNELengine: CAFFE}
}
layer {name: "pool1"type: "Pooling"bottom: "norm1"top: "pool1"pooling_param {kernel_size: 3stride: 2pad: 1pool: MAX}
}
layer {name: "conv2"type: "Convolution"bottom: "pool1"top: "conv2"param { lr_mult: 1.0 }param { lr_mult: 2.0 }convolution_param {num_output: 256kernel_size: 5pad: 2stride: 2}
}
layer {name: "relu2"type: "ReLU"bottom: "conv2"top: "conv2"
}
layer {name: "norm2"type: "LRN"bottom: "conv2"top: "norm2"lrn_param {local_size: 3alpha: 0.00005beta: 0.75norm_region: WITHIN_CHANNELengine: CAFFE}
}
layer {name: "pool2"type: "Pooling"bottom: "norm2"top: "pool2"pooling_param {kernel_size: 3stride: 2pad: 1pool: MAX}
}
layer {name: "conv3"type: "Convolution"bottom: "pool2"top: "conv3"param { lr_mult: 1.0 }param { lr_mult: 2.0 }convolution_param {num_output: 384kernel_size: 3pad: 1stride: 1}
}
layer {name: "relu3"type: "ReLU"bottom: "conv3"top: "conv3"
}
layer {name: "conv4"type: "Convolution"bottom: "conv3"top: "conv4"param { lr_mult: 1.0 }param { lr_mult: 2.0 }convolution_param {num_output: 384kernel_size: 3pad: 1stride: 1}
}
layer {name: "relu4"type: "ReLU"bottom: "conv4"top: "conv4"
}
layer {name: "conv5"type: "Convolution"bottom: "conv4"top: "conv5"param { lr_mult: 1.0 }param { lr_mult: 2.0 }convolution_param {num_output: 256kernel_size: 3pad: 1stride: 1}
}
layer {name: "relu5"type: "ReLU"bottom: "conv5"top: "conv5"
}layer {name: "rpn_conv1"type: "Convolution"bottom: "conv5"top: "rpn_conv1"param { lr_mult: 1.0 }param { lr_mult: 2.0 }convolution_param {num_output: 256kernel_size: 3 pad: 1 stride: 1weight_filler { type: "gaussian" std: 0.01 }bias_filler { type: "constant" value: 0 }}
}
layer {name: "rpn_relu1"type: "ReLU"bottom: "rpn_conv1"top: "rpn_conv1"
}
layer {name: "rpn_cls_score"type: "Convolution"bottom: "rpn_conv1"top: "rpn_cls_score"param { lr_mult: 1.0 }param { lr_mult: 2.0 }convolution_param {num_output: 18   kernel_size: 1 pad: 0 stride: 1 weight_filler { type: "gaussian" std: 0.01 }bias_filler { type: "constant" value: 0 }}
}
layer {name: "rpn_bbox_pred"type: "Convolution"bottom: "rpn_conv1"top: "rpn_bbox_pred"param { lr_mult: 1.0 }param { lr_mult: 2.0 }convolution_param {num_output: 36  kernel_size: 1 pad: 0 stride: 1weight_filler { type: "gaussian" std: 0.01 }bias_filler { type: "constant" value: 0 }}
}
layer {bottom: "rpn_cls_score"top: "rpn_cls_score_reshape" name: "rpn_cls_score_reshape"type: "Reshape"reshape_param { shape { dim: 0 dim: 2 dim: -1 dim: 0 } }
}
layer {name: 'rpn-data'type: 'Python'bottom: 'rpn_cls_score'bottom: 'gt_boxes'bottom: 'im_info'bottom: 'data'top: 'rpn_labels'top: 'rpn_bbox_targets'top: 'rpn_bbox_inside_weights'top: 'rpn_bbox_outside_weights'python_param {module: 'rpn.anchor_target_layer'layer: 'AnchorTargetLayer'param_str: "'feat_stride': 16"}
}
layer {name: "rpn_loss_cls"type: "SoftmaxWithLoss" bottom: "rpn_cls_score_reshape"bottom: "rpn_labels"propagate_down: 1propagate_down: 0top: "rpn_cls_loss"loss_weight: 1loss_param {ignore_label: -1normalize: true}
}
layer {name: "rpn_loss_bbox"type: "SmoothL1Loss" bottom: "rpn_bbox_pred"bottom: "rpn_bbox_targets"bottom: "rpn_bbox_inside_weights"bottom: "rpn_bbox_outside_weights"top: "rpn_loss_bbox"loss_weight: 1smooth_l1_loss_param { sigma: 3.0 }
}layer {name: "dummy_roi_pool_conv5"type: "DummyData"top: "dummy_roi_pool_conv5"dummy_data_param {shape { dim: 1 dim: 9216 }data_filler { type: "gaussian" std: 0.01 }}
}
layer {name: "fc6"type: "InnerProduct"bottom: "dummy_roi_pool_conv5"top: "fc6"param { lr_mult: 0 decay_mult: 0 }param { lr_mult: 0 decay_mult: 0 }inner_product_param {num_output: 4096}
}
layer {name: "relu6"type: "ReLU"bottom: "fc6"top: "fc6"
}
layer {name: "fc7"type: "InnerProduct"bottom: "fc6"top: "fc7"param { lr_mult: 0 decay_mult: 0 }param { lr_mult: 0 decay_mult: 0 }inner_product_param {num_output: 4096}
}
layer {name: "silence_fc7"type: "Silence"bottom: "fc7"
}

参考文献:

https://blog.csdn.net/ying86615791/article/details/72788414

https://blog.csdn.net/zjucor/article/details/78232024

https://blog.csdn.net/WZZ18191171661/article/details/79439212

(RegionProposal Network)RPN网络结构及详解相关推荐

  1. resnet50网络结构_Resnet50详解与实践(基于mindspore)

    1. 简述 Resnet是残差网络(Residual Network)的缩写,该系列网络广泛用于目标分类等领域以及作为计算机视觉任务主干经典神经网络的一部分,典型的网络有resnet50, resne ...

  2. LSA类型讲解——LSA-2(第二类LSA——Network LSA)、LSA-3(第三类LSA——Network Summary LSA)详解

    目录 一.LSA-2 (1)--简介: (2)--头部信息: (3)--数据部分: (4)--作用: (5)如何查看: 二.LSA-3 (1)--简介: (2)--头部信息: (3)--数据部分: ( ...

  3. 物联网工程 | CAN(Controller Area Network)控制器局域网络详解

    文章目录 概述 一.定义介绍 二.功能作用 三.原理解读 (一).CAN收发器(硬件) (二).CAN控制器(硬件) (三).CAN总线(硬件) (四).CAN中央处理单元(软硬) (五).CAN驱动 ...

  4. NTP(Network Time Protocol)协议详解

    一.NTP的基本概念: NTP(Network Time Protocol)------网络时间协议-----应用层协议,用来在分布式时间服务器和客户端之间进行时间同步. 二.采用NTP的目的: 是对 ...

  5. 应用交付网络(Application Delivery Network,ADN)详解

    一.应用交付网络概述 应用交付网络(Application Delivery Network,ADN)是一种网络架构,它主要用于优化和加速应用程序的交付和响应.ADN通常由多个网络设备和技术组成,包括 ...

  6. DL之NIN:Network in Network算法的简介(论文介绍)、架构详解、案例应用等配图集合之详细攻略

    DL之NIN:Network in Network算法的简介(论文介绍).架构详解.案例应用等配图集合之详细攻略 目录 Network in Network算法的简介(论文介绍) 1.Visualiz ...

  7. 《CDN 之我见》系列三:详解篇(网络优化)

    摘要: 本文作者:白金,<CDN 之我见>是一个系列文章,共由三个篇章组成,分为"原理篇"."详解篇"和"陨坑篇".本篇章属于& ...

  8. Network in Network(NIN)网络结构详解,网络搭建

    一.简介 Network in Network,描述了一种新型卷积神经网络结构. LeNet,AlexNet,VGG都秉承一种设计思路:先用卷积层构成的模块提取空间特征,再用全连接层模块来输出分类结果 ...

  9. 7.Deep Interest Network for Click-Through Rate Prediction论文详解

    一.总述 这是2018年阿里Guorui Zhou等人发表在KDD上的一篇论文.论文提出在CTR任务中,丰富的用户历史行为数据包含了用户多种兴趣,对于不同的候选广告,起作用的用户历史行为数据表示应该不 ...

最新文章

  1. Hello Jsilk
  2. JDBC连接SQLserver2008,使用jdk为1.7 [个人新浪微博]
  3. linux下 zip解压 tar解压 gz解压 bz2等各种解压文件命令
  4. Android RecyclerView实现横向滚动
  5. Jquery使用手册3--css操作 作者:choy
  6. 伦斯勒理工学院计算机科学本科,【择校解读】伦斯勒理工学院(RPI)院校指南...
  7. error inflating class binaryXML LayoutParams addRule()
  8. 微信淘宝等平台要互通!?腾讯阿里字节回应
  9. svn 修改文件的二进制或文本标记
  10. 与 python 交互
  11. python报考软考哪个比较好_软考高级考哪个好?哪个比较热门?
  12. [转] js对象监听实现
  13. 谈谈物联网产业4G转型中的隐忧与应对
  14. cmder中文乱码问题
  15. c语言中文网qq,c语言写的qq连看辅助
  16. 树莓派 智能小车 语音控制系统
  17. WebRTC音频处理流程简介
  18. 000webhost – 1500M支持PHP可绑米免费虚拟主机
  19. UPC 2020年夏混合个人训练第八十一场
  20. .pdm文件怎么打开

热门文章

  1. Leetcode算法Java全解答--16. 最接近的三数之和
  2. 东莞血汗工厂倒闭,机器人工厂上位
  3. mysql 中 case语句吗_Mysql中的Case语句
  4. Tomcat常见面试题
  5. 27岁Python程序员做独立开发年收入超900万,家中有屋又有田,生活乐无边
  6. C++传递数组作为函数参数
  7. 跨链桥是否有安全的未来?
  8. mybatis 用map循环插入数据
  9. 8、半导体二极管的伏安特性和电流方程
  10. php函数substr、mb_substr、mb_strcut截取中文比较