easy-Fpn源码解读(二):bbox
bbox代码解析
import torch
from torch import Tensor
class BBox(object):
def __init__(self, left: float, top: float, right: float, bottom: float):
super().__init__()
self.left = left
self.top = top
self.right = right
self.bottom = bottom
def __repr__(self) -> str:
return 'BBox[l={:.1f}, t={:.1f}, r={:.1f}, b={:.1f}]'.format(
self.left, self.top, self.right, self.bottom)
def tolist(self):
return [self.left, self.top, self.right, self.bottom]
@staticmethod
def to_center_base(bboxes: Tensor):
return torch.stack([
(bboxes[:, 0] + bboxes[:, 2]) / 2,
(bboxes[:, 1] + bboxes[:, 3]) / 2,
bboxes[:, 2] - bboxes[:, 0],
bboxes[:, 3] - bboxes[:, 1]
], dim=1)
@staticmethod
def from_center_base(center_based_bboxes: Tensor) -> Tensor:
return torch.stack([
center_based_bboxes[:, 0] - center_based_bboxes[:, 2] / 2,
center_based_bboxes[:, 1] - center_based_bboxes[:, 3] / 2,
center_based_bboxes[:, 0] + center_based_bboxes[:,