cuda 核函数 for循环_二、faster-rcnn源码阅读:ROIPool的CUDA编程

本文详细介绍了在faster-rcnn中ROIPool层的CUDA实现,通过并行计算减少循环层数提高效率。关键在于利用CUDA的grid和block指数(blockIdx.x, blockIdx.y, threadIdx.x等)替代循环,通过规划gird和block尺寸优化计算过程。CUDA编程的核心是循环替代,使得Python能够调用CUDA加速的C/C++/CU代码。" 117392090,7981480,jQuery实现全选、多选、反选,"['jQuery', '前端开发', '选择操作']
摘要由CSDN通过智能技术生成

ROIPool就是:

根据rois,在featrues上对每个roi(兴趣区域,目标框)maxpool出一个7*7的池化结果。

bf89ce8ce0c7672c2f479f2e50c56349.png

主控函数:

ROIPool_cuda.cu(来源: https://github.com/facebookresearch/maskrcnn-benchmark)

std::tuple<at::Tensor, at::Tensor> ROIPool_forward_cuda(const at::Tensor& input,
                                const at::Tensor& rois,
                                const float spatial_scale,
                                const int pooled_height,
                                const int pooled_width) {
    
  AT_ASSERTM(input.type().is_cuda(), "input must be a CUDA tensor");
  AT_ASSERTM(rois.type().is_cuda(), "rois must be a CUDA tensor");
//input:从骨干网出来的featrues,典型的shape为(1,512,37,50)这样子,batch=1,
//支持batch>1的源码不多,如果骨干网用的是vgg16的话,channel=512,长宽被输入图片决定,一般都在40~50这样子
//rois:rpn提议的目标框,一般是128(也有取256的),1/4为正样本(32个),3/4为负样本
//spatial_scale=1/16=0.0625(骨干网用vgg16的话)
//pooled_height,pooled_width=7池化后的长宽
  auto num_rois = rois.size(0);//num_rois=128(或256),1/4的正样本,3/4的负样本
  auto channels = input.size(1);//channels =512(vgg16)或1024
  auto height = input.size(2);
  auto width = input.size(3);
//height 、width 大概在40~50那个样子
  auto output = at::empty({
    num_rois, channels, pooled_height, pooled_width}, input.options());
//存放池化结果
//num_rois目标框的个数不变,channels不变,需要的是7*7结果
  auto output_size = num_rois * pooled_height * pooled_width * cha
  • 3
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值