Neural network PyTorch RoI池实现偏差

Neural network PyTorch RoI池实现偏差,neural-network,deep-learning,object-detection,pytorch,Neural Network,Deep Learning,Object Detection,Pytorch,我正试图通过PyTorch实现ROI池。这是最简单的演示 import torch import torch.nn as nn import torch.nn.functional as F def roi_pooling(feature_map, rois, size=(7, 7)): """ :param feature_map: (1, C, H, W) :param rois: (1, N, 4) N refers to bbox num, 4 represe

我正试图通过PyTorch实现ROI池。这是最简单的演示

import torch
import torch.nn as nn
import torch.nn.functional as F


def roi_pooling(feature_map, rois, size=(7, 7)):
    """
    :param feature_map: (1, C, H, W)
    :param rois: (1, N, 4) N refers to bbox num, 4 represent (ltx, lty, w, h) 
    :param size: output size
    :return: (1, C, size[0], size[1])
    """
    output = []
    rois_num = rois.size(1)

    for i in range(rois_num):
        roi = rois[0][i]
        x, y, w, h = roi
        output.append(F.adaptive_max_pool2d(feature_map[:, :, y:y+h, x:x+w], size))

    return torch.cat(output)


if __name__ == '__main__':
    test_tensor = torch.tensor([
        [0.88, 0.44, 0.14, 0.16, 0.37, 0.77, 0.96, 0.27],
        [0.19, 0.45, 0.57, 0.16, 0.63, 0.29, 0.71, 0.70],
        [0.66, 0.26, 0.82, 0.64, 0.54, 0.73, 0.59, 0.26],
        [0.85, 0.34, 0.76, 0.84, 0.29, 0.75, 0.62, 0.25],
        [0.32, 0.74, 0.21, 0.39, 0.34, 0.03, 0.33, 0.48],
        [0.20, 0.14, 0.16, 0.13, 0.73, 0.65, 0.96, 0.32],
        [0.19, 0.69, 0.09, 0.86, 0.88, 0.07, 0.01, 0.48],
        [0.83, 0.24, 0.97, 0.04, 0.24, 0.35, 0.50, 0.91]
    ])
    test_tensor = test_tensor.view(1, 1, 8, 8)
    rois = torch.tensor([[0, 3, 7, 5]])
    rois = rois.view(1, -1, 4)
    output = roi_pooling(test_tensor, rois, (2, 2))
    print(output)
我通过引用此网站来实现此功能:。测试张量和投资回报率也来自网站的例子。但是,正如网站显示的那样,输出应该是

[ [0.85, 0.84], [0.97, 0.96] ]
而不是我的演示的输出:

[ [0.85, 0.96], [0.97, 0.96] ]

那么,我的代码到底有什么问题?坐标分相错了吗?

你明白了吗?@Albert我在PyTorch论坛上也问过这个问题,下面是答案的链接。