giantmonkeyTC
2344
34d1f8b
from typing import List
import torch
from torch import Tensor
def normalize_bbox(bboxes: Tensor, pc_range: List) -> Tensor:
""" normalize bboxes
Args:
bboxes (Tensor): boxes with unnormalized
coordinates (cx,cy,cz,L,W,H,φ,v_x,v_y). Shape [num_gt, 9].
pc_range (List): Perception range of the detector
Returns:
normalized_bboxes (Tensor): boxes with normalized coordinate
(cx,cy,L,W,cz,H,sin(φ),cos(φ),v_x,v_y).
All in range [0, 1] and shape [num_query, 10].
"""
cx = bboxes[..., 0:1]
cy = bboxes[..., 1:2]
cz = bboxes[..., 2:3]
L = bboxes[..., 3:4].log()
W = bboxes[..., 4:5].log()
H = bboxes[..., 5:6].log()
rot = bboxes[..., 6:7]
if bboxes.size(-1) > 7:
vx = bboxes[..., 7:8]
vy = bboxes[..., 8:9]
normalized_bboxes = torch.cat(
(cx, cy, L, W, cz, H, rot.sin(), rot.cos(), vx, vy), dim=-1)
else:
normalized_bboxes = torch.cat(
(cx, cy, L, W, cz, H, rot.sin(), rot.cos()), dim=-1)
return normalized_bboxes
def denormalize_bbox(normalized_bboxes, pc_range):
""" denormalize bboxes
Args:
normalized_bboxes (Tensor): boxes with normalized coordinate
(cx,cy,L,W,cz,H,sin(φ),cos(φ),v_x,v_y).
All in range [0, 1] and shape [num_query, 10].
pc_range (List): Perception range of the detector
Returns:
denormalized_bboxes (Tensor): boxes with unnormalized
coordinates (cx,cy,cz,L,W,H,φ,v_x,v_y). Shape [num_gt, 9].
"""
# rotation
rot_sine = normalized_bboxes[..., 6:7]
rot_cosine = normalized_bboxes[..., 7:8]
rot = torch.atan2(rot_sine, rot_cosine)
# center in the bev
cx = normalized_bboxes[..., 0:1]
cy = normalized_bboxes[..., 1:2]
cz = normalized_bboxes[..., 4:5]
# size, the meaning of L,W may alter in different version of mmdet3d
L = normalized_bboxes[..., 2:3]
W = normalized_bboxes[..., 3:4]
H = normalized_bboxes[..., 5:6]
L = L.exp()
W = W.exp()
H = H.exp()
if normalized_bboxes.size(-1) > 8:
# velocity
vx = normalized_bboxes[:, 8:9]
vy = normalized_bboxes[:, 9:10]
denormalized_bboxes = torch.cat([cx, cy, cz, L, W, H, rot, vx, vy],
dim=-1)
else:
denormalized_bboxes = torch.cat([cx, cy, cz, L, W, H, rot], dim=-1)
return denormalized_bboxes