py-faster-rcnn详解(5)——stage1_rpn_train.pt说明
2017-06-08 20:41
543 查看
主要介绍了通过Alternating Optimization是如何训练RPN网络的。
首先是由RoIDataLayer生成的各个blob——data、imfo、gt_boxes,该层由Python定义。
data就是原始图像,在这里被缩放成了一个某一边长为600的图像。(我这里原始图像是320 x 240,被放大成600 x 800,这里将小边放大成600.如果有一边超过1000,那么就采取其他措施……细节不多说了)
im_info包括图像原始大小与缩放的比例
gt_boxes包括标注数据集的各个box的(xmin,ymin,xmax,ymax)
data被送入卷积网络,这个网络可以是ZF、VGG_16、VGG_CNN_M_1024等。
conv5输出的blob将被送入一个核为3x3的卷积层rpn_conv3x3,经过Relu层以后,分别被送入两个核为1x1的卷积层(这里之所以用两个卷积层而不用全连接层就是为了减小计算量)。rpn_cls_score有18个output,分别代表9个anchor点的前景与背景的可能值,在320x240图像输入时,这里的H是36,w是61.也就是说它这里要对于每一个(H,W)位置点,都产生九个不同形状的anchor,在config中定义了一个feat_stride大小为16,你会发现这里的H x feat_stride以及W
x feat_stride正好约等于rescale以后的每张图的大小。
rpn_cls_score就是不断地被训练成一个能够产生在H x W这样一个feature map上每一个位置点的9个anchor的每一个的(前景/背景)概率值,也就是一共9 x H x W个评分。后面被Reshape了一下,是为了blob维度格式的对齐。然后通过rpn_data产生的label进行训练,你可以简单的这么理解:计算每个anchor与ground-truth box的重合度,如果够大,就认为是前景(label=1),如果足够小,就认为是背景(label=0),不大不小就忽略。
接下来rpn_bbox_pred。不断地被训练成能生成9 x H x W个anchor上分别离最近的ground-truth box的四个偏移值——中心点x偏移了多少、中心点y偏移了多少、宽度(比例)差了多少、高度(比例)差了多少。这个rpn_bbox_target就是每个anchor与最近的ground-truth box的四个真实偏移值,inside_weight和outside_weight都是1.
rpn主要工作机理是生成anchor,然后通过rpn_cls_score对其评估它到底是前景还是背景,再对anchor的具体位置再通过rpn_bbox_pred来细化精度估计。那么这里就能看出,rpn网络其实已经能够有效地对于物体的位置做一个大致的判断,只不过说不出这是哪个类,只能知道是背景还是前景,然后将其提交给fast rcnn网络进行细化判断。
首先是由RoIDataLayer生成的各个blob——data、imfo、gt_boxes,该层由Python定义。
data就是原始图像,在这里被缩放成了一个某一边长为600的图像。(我这里原始图像是320 x 240,被放大成600 x 800,这里将小边放大成600.如果有一边超过1000,那么就采取其他措施……细节不多说了)
im_info包括图像原始大小与缩放的比例
gt_boxes包括标注数据集的各个box的(xmin,ymin,xmax,ymax)
data被送入卷积网络,这个网络可以是ZF、VGG_16、VGG_CNN_M_1024等。
conv5输出的blob将被送入一个核为3x3的卷积层rpn_conv3x3,经过Relu层以后,分别被送入两个核为1x1的卷积层(这里之所以用两个卷积层而不用全连接层就是为了减小计算量)。rpn_cls_score有18个output,分别代表9个anchor点的前景与背景的可能值,在320x240图像输入时,这里的H是36,w是61.也就是说它这里要对于每一个(H,W)位置点,都产生九个不同形状的anchor,在config中定义了一个feat_stride大小为16,你会发现这里的H x feat_stride以及W
x feat_stride正好约等于rescale以后的每张图的大小。
rpn_cls_score就是不断地被训练成一个能够产生在H x W这样一个feature map上每一个位置点的9个anchor的每一个的(前景/背景)概率值,也就是一共9 x H x W个评分。后面被Reshape了一下,是为了blob维度格式的对齐。然后通过rpn_data产生的label进行训练,你可以简单的这么理解:计算每个anchor与ground-truth box的重合度,如果够大,就认为是前景(label=1),如果足够小,就认为是背景(label=0),不大不小就忽略。
接下来rpn_bbox_pred。不断地被训练成能生成9 x H x W个anchor上分别离最近的ground-truth box的四个偏移值——中心点x偏移了多少、中心点y偏移了多少、宽度(比例)差了多少、高度(比例)差了多少。这个rpn_bbox_target就是每个anchor与最近的ground-truth box的四个真实偏移值,inside_weight和outside_weight都是1.
rpn主要工作机理是生成anchor,然后通过rpn_cls_score对其评估它到底是前景还是背景,再对anchor的具体位置再通过rpn_bbox_pred来细化精度估计。那么这里就能看出,rpn网络其实已经能够有效地对于物体的位置做一个大致的判断,只不过说不出这是哪个类,只能知道是背景还是前景,然后将其提交给fast rcnn网络进行细化判断。
相关文章推荐
- py-faster-rcnn源码解读系列(五)——stage1_rpn_train.pt
- py-faster-rcnn详解(3)——train.py接口说明
- py-faster-rcnn详解(1)——train_faster_rcnn_alt_opt.py接口说明
- py-faster-rcnn/models/pascal_voc/ZF/faster_rcnn_alt_opt/stage1_fast_rcnn_train.pt
- py-faster-rcnn详解(4)——anchor_target_layer.py接口说明
- faster rcnn 当中stage1_rpn_train.pt的解读
- py-faster-rcnn详解(2)——pascal _voc.py接口说明
- faster rcnn学习之rpn、fast rcnn数据准备说明
- py-faster-rcnn源码解读系列(一)——train_faster_rcnn_alt_opt.py
- py-faster-rcnn流程(5)——训练RPN网络二阶段
- faster rcnn源码解读(三)train_faster_rcnn_alt_opt.py
- Faster-RCNN_TF代码解读1:train-net.py
- Py-faster-rcnn实现自己的数据train和demo
- py-faster-rcnn 算法详解
- Ubuntu下跑通py-faster-rcnn、详解demo运作流程
- 【caffe】基本数据结构blob说明,用faster-rcnn 之 RPN网络的结构解析进行说明
- 【py-faster-rcnn】【RPN】通过代码理解faster-RCNN中的RPN
- Py-faster-rcnn实现自己的数据train和demo
- r-cnn学习(四):train_faster_rcnn_alt_opt.py源码学习
- faster-rcnn 之训练脚本解析:./tools/train_faster_rcnn_alt_opt.py