MultiScaleRoIAlign

这几天在看一个代码,看到这个方法,官方给的代码样例:

        >>> m = torchvision.ops.MultiScaleRoIAlign(['feat1', 'feat3'], 3, 2)
        >>> i = OrderedDict()
        >>> i['feat1'] = torch.rand(1, 5, 64, 64)
        >>> i['feat2'] = torch.rand(1, 5, 32, 32)  # this feature won't be used in the pooling
        >>> i['feat3'] = torch.rand(1, 5, 16, 16)
        >>> # create some random bounding boxes
        >>> boxes = torch.rand(6, 4) * 256; boxes[:, 2:] += boxes[:, :2]
        >>> # original image size, before computing the feature maps
        >>> image_sizes = [(512, 512)]
        >>> output = m(i, [boxes], image_sizes)
        >>> print(output.shape)
        >>> torch.Size([6, 5, 3, 3])

当时很奇怪,输入除了 feat2 不要用,feat1,feat3都要用,但是我当时很奇怪的是:明明两个featuremap,按理输出的shape应该是 shape= [12,5,3,4],为啥是[6, 5, 3, 3]?

我当时的想法是,有两个feature map,那6个box应该分别在每个feature map上进行找box对应区域这个想法是错的,下图见解:

MultiScaleRoIAlign_第1张图片  

而且在RPN给出的rois时,给几个box,就会在上面初始化 MultiScaleRoIAlign 方法时确定(rois给几个,这个是确定好的),接着result中就会有几个key,不会出现覆盖。

虽然简单记录了,也不知道别人能不能看懂,但是困扰我有好久了,昨天晚上到今天终于搞懂了。

为数不多找到的参考:
​​​​​​​从源码学习 Faster-RCNN - 刘知安的博客 | LiuZhian's Blog

保姆级 faster rcnn 源码逐行解读 (五)roi_head part1 - 知乎

捋一捋pytorch官方FasterRCNN代码 - 知乎

你可能感兴趣的:(python,图像识别与目标检测,深度学习,pytorch,transformer)