快捷方式

MultiScaleRoIAlign

class torchvision.ops.MultiScaleRoIAlign(featmap_names: List[str], output_size: Union[int, Tuple[int], List[int]], sampling_ratio: int, *, canonical_scale: int = 224, canonical_level: int = 4)[source]

多尺度 RoIAlign 池化,这对于使用或不使用 FPN 的检测很有用。

它通过在 特征金字塔网络论文 的等式 1 中指定的启发式方法推断池化的尺度。关键字参数 canonical_scalecanonical_level 分别对应于等式 1 中的 224k0=4,并具有以下含义:canonical_level 是要从中池化感兴趣区域的金字塔的目标层,其中 w x h = canonical_scale x canonical_scale

参数:
  • featmap_names (List[str]) – 将用于池化的特征图的名称。

  • output_size (List[Tuple[int, int]] or List[int]) – 池化区域的输出大小

  • sampling_ratio (int) – ROIAlign 的采样率

  • canonical_scale (int, 可选) – LevelMapper 的规范比例

  • canonical_level (int, 可选) – LevelMapper 的规范层级

示例

>>> 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])
forward(x: Dict[str, Tensor], boxes: List[Tensor], image_shapes: List[Tuple[int, int]]) Tensor[source]
参数:
  • x (OrderedDict[Tensor]) – 每个层级的特征图。假设它们都具有相同数量的通道,但它们可以具有不同的尺寸。

  • boxes (List[Tensor[N, 4]]) – 用于执行池化操作的框,采用 (x1, y1, x2, y2) 格式,并以图像参考大小表示,而不是特征图参考大小。坐标必须满足 0 <= x1 < x20 <= y1 < y2

  • image_shapes (List[Tuple[高度, 宽度]]) – 每个图像在馈送到 CNN 以获取特征图之前的尺寸。这使我们能够推断要池化的每个层级的比例因子。

返回值:

结果 (张量)

文档

访问 PyTorch 的全面开发者文档

查看文档

教程

获取针对初学者和高级开发人员的深入教程

查看教程

资源

查找开发资源并获得问题的解答

查看资源