Spaces:
Build error
Build error
# Copyright (c) Meta Platforms, Inc. and affiliates. | |
# All rights reserved. | |
# | |
# This source code is licensed under the license found in the | |
# LICENSE file in the root directory of this source tree. | |
import torch | |
from torch import Tensor | |
from ..utils import ext_loader | |
ext_module = ext_loader.load_ext('_ext', ['points_in_polygons_forward']) | |
def points_in_polygons(points: Tensor, polygons: Tensor) -> Tensor: | |
"""Judging whether points are inside polygons, which is used in the ATSS | |
assignment for the rotated boxes. | |
It should be noted that when the point is just at the polygon boundary, the | |
judgment will be inaccurate, but the effect on assignment is limited. | |
Args: | |
points (torch.Tensor): It has shape (B, 2), indicating (x, y). | |
M means the number of predicted points. | |
polygons (torch.Tensor): It has shape (M, 8), indicating | |
(x1, y1, x2, y2, x3, y3, x4, y4). M means the number of | |
ground truth polygons. | |
Returns: | |
torch.Tensor: Return the result with the shape of (B, M), | |
1 indicates that the point is inside the polygon, | |
0 indicates that the point is outside the polygon. | |
""" | |
assert points.shape[1] == 2, \ | |
'points dimension should be 2, ' \ | |
f'but got unexpected shape {points.shape[1]}' | |
assert polygons.shape[1] == 8, \ | |
'polygons dimension should be 8, ' \ | |
f'but got unexpected shape {polygons.shape[1]}' | |
output = torch.zeros( | |
points.shape[0], | |
polygons.shape[0], | |
dtype=torch.float32, | |
device=points.device) | |
ext_module.points_in_polygons_forward(points.contiguous(), | |
polygons.contiguous(), output) | |
return output | |