学习Faster R-CNN代码roi_pooling

转自:https://www.cnblogs.com/wind-chaser/p/11355002.html

了解一下roi_pooling/src/roi_pooling.c中C代码:

1.关于头文件TH/TH.h
#include<TH/TH.h>包括了 pytorch C 代码数据结构和函数的声明,这是pytorch底层接口。

2.roi_pooling_forward的参数

1 int roi_pooling_forward(int pooled_height, int pooled_width, float spatial_scale,
2                         THFloatTensor * features, THFloatTensor * rois, THFloatTensor * output)

pooled_height pooling后的高;
pooled_width pooling后的宽;
spatial_scale 空间尺度,输入图片与feature map之前的比值,这个feature map指roi pooling层的输入;
features 第一个网络卷积后的特征图;
rois 所有感兴趣区域;
output 指的是pooling后的结果?

3.函数里面的变量

1 // Grab the input tensor
2     float * data_flat = THFloatTensor_data(features);
3     float * rois_flat = THFloatTensor_data(rois);
4 
5     float * output_flat = THFloatTensor_data(output);

把这几个参数值提取出来。在C里面就是开辟一块连续的内存来存储这些数据。
THFloatTensor_data作用就是提取值吧。

1 // Number of ROIs
2     int num_rois = THFloatTensor_size(rois, 0);
3     int size_rois = THFloatTensor_size(rois, 1);

根据上面代码rois信息包括num_rois和size_rois,即感兴趣区域的数量和大小(这里的大小指的是roi的大小,准确的说是占据的内存区域)。

 1 // batch size
 2     int batch_size = THFloatTensor_size(features, 0);
 3     if(batch_size != 1)
 4     {
 5         return 0;
 6     }
 7     // data height
 8     int data_height = THFloatTensor_size(features, 1);
 9     // data width
10     int data_width = THFloatTensor_size(features, 2);
11     // Number of channels
12     int num_channels = THFloatTensor_size(features, 3);

features信息包括batch_size,data_height,data_width,num_channels即批尺寸,特征数据高度,特征数据宽度,特征的通道数。

1 // Set all element of the output tensor to -inf.
2     THFloatStorage_fill(THFloatTensor_storage(output), -1);

开始是把所有输出张量的元素设置为负无穷。

接下来就要对每个ROI进行max pool了。

// For each ROI R = [batch_index x1 y1 x2 y2]: max pool over R
    int index_roi = 0;
    int index_output = 0;
    int n;
    for (n = 0; n < num_rois; ++n)

初始化roi索引是0;初始化输出索引是0。然后开始遍历所有的感兴趣区域。

1         int roi_batch_ind = rois_flat[index_roi + 0];
2         int roi_start_w = round(rois_flat[index_roi + 1] * spatial_scale);
3         int roi_start_h = round(
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值