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_scale
和canonical_level
分别对应于等式 1 中的224
和k0=4
,并具有以下含义:canonical_level
是要从中池化感兴趣区域的金字塔的目标层,其中w x h = canonical_scale x canonical_scale
。- 参数:
示例
>>> 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 < x2
和0 <= y1 < y2
。image_shapes (List[Tuple[高度, 宽度]]) – 每个图像在馈送到 CNN 以获取特征图之前的尺寸。这使我们能够推断要池化的每个层级的比例因子。
- 返回值:
结果 (张量)