FasterRcnn RoiPooling(Pytorch版本)部分几个问题的解析

FasterRcnn RoiPooling(Pytorch版本)部分几个问题的解析:

(1)lib/model/roipooling文件夹中几个子文件夹的内容:

          faster rcnn pytorch中的roi pooling简介

          简述:

              1)src文件夹下是C和CUDA版本的源码,其中roi_pooling的操作的前向传播有C和CUDA版本,反向传播只有CUDA版本;

              2)ext文件夹下存储src文件夹中C/CUDA代码编译后的文件的,编译后的文件可以被Funcitons中的roi_pool.py调用;

              3)Functions文件夹下的roi_pool.py继承了torch.autograd.Function类,实现了Roi Pooling层的foward()和backward()函数。

              4)Modules文件夹下的roi_pool.py继承了torch.nn.Modules类,引用了Functions.roi_pool.py,实现了对Roi Pooling层的封装,使Roi Pooling层可以和ReLU层等一样被使用。

 

(2)RoiPooling和RoiAlign的区别:

          RoiPooling和RoiAlign的区别

          你真的学会Roi Pooling了吗?

          简述:

              在Roi Pooling中,当Proposals从原图映射到特征图,又从特征图上映射到固定大小时,需要进行两次下采样,当除得的结果不为整数时,Poi Pooling在两次计算过程中,分别对计算结果中的浮点数进行了量化取整操作,最终对各个小区域进行最大池化。这样计算造成的像素偏差势必会对后层的回归定位产生影响。

              而Roi Align对这个过程进行了一些改进,在两次计算过程中保留浮点数的计算结果,在最大池化前通过双线性插值法计算计算各个小区域内每块(如2*2块)中心位置的像素值,再对各个小区域进行最大池化。

              当检测大目标时两种方法相差不大,但检测小目标时,Roi Align更加精准一些。

 

(3)在roi_pooling.py中为何用ctx代替常见的self,如下所示。

def __init__(ctx, pooled_height, pooled_width, spatial_scale):

          pytorch中self与ctx的区别

          简述:

             ctx是context的缩写, 翻译成"上下文/ 环境",ctx专门用在静态方法中;而self指的是实例对象;

             ctx用在静态方法中, 调用时不需要实例化对象, 直接通过类名就可以调用, 所以self在静态方法中没有意义;

             自定义的forward()方法和backward()方法的第一个参数必须是ctx;,ctx可以保存forward()中的变量,以便在backward()中继续使用;

你可能感兴趣的:(机器学习)