MCPcopy Create free account
hub / github.com/YXB-NKU/Strip-R-CNN / encode

Method encode

mmrotate/core/bbox/coder/angle_coder.py:40–97  ·  view source on GitHub ↗

Circular Smooth Label Encoder. Args: angle_targets (Tensor): Angle offset for each scale level Has shape (num_anchors * H * W, 1) Returns: list[Tensor]: The csl encoding of angle offset for each scale level. Has shape (num_anc

(self, angle_targets)

Source from the content-addressed store, hash-verified

38 self.coding_len = int(self.angle_range // omega)
39
40 def encode(self, angle_targets):
41 """Circular Smooth Label Encoder.
42
43 Args:
44 angle_targets (Tensor): Angle offset for each scale level
45 Has shape (num_anchors * H * W, 1)
46
47 Returns:
48 list[Tensor]: The csl encoding of angle offset for each
49 scale level. Has shape (num_anchors * H * W, coding_len)
50 """
51
52 # radius to degree
53 angle_targets_deg = angle_targets * (180 / math.pi)
54 # empty label
55 smooth_label = torch.zeros_like(angle_targets).repeat(
56 1, self.coding_len)
57 angle_targets_deg = (angle_targets_deg +
58 self.angle_offset) / self.omega
59 # Float to Int
60 angle_targets_long = angle_targets_deg.long()
61
62 if self.window == 'pulse':
63 radius_range = angle_targets_long % self.coding_len
64 smooth_value = 1.0
65 elif self.window == 'rect':
66 base_radius_range = torch.arange(
67 -self.radius, self.radius, device=angle_targets_long.device)
68 radius_range = (base_radius_range +
69 angle_targets_long) % self.coding_len
70 smooth_value = 1.0
71 elif self.window == 'triangle':
72 base_radius_range = torch.arange(
73 -self.radius, self.radius, device=angle_targets_long.device)
74 radius_range = (base_radius_range +
75 angle_targets_long) % self.coding_len
76 smooth_value = 1.0 - torch.abs(
77 (1 / self.radius) * base_radius_range)
78
79 elif self.window == 'gaussian':
80 base_radius_range = torch.arange(
81 -self.angle_range // 2,
82 self.angle_range // 2,
83 device=angle_targets_long.device)
84
85 radius_range = (base_radius_range +
86 angle_targets_long) % self.coding_len
87 smooth_value = torch.exp(-torch.pow(base_radius_range, 2) /
88 (2 * self.radius**2))
89
90 else:
91 raise NotImplementedError
92
93 if isinstance(smooth_value, torch.Tensor):
94 smooth_value = smooth_value.unsqueeze(0).repeat(
95 smooth_label.size(0), 1)
96
97 return smooth_label.scatter(1, radius_range, smooth_value)

Callers 8

_get_targets_singleMethod · 0.45
_get_target_singleMethod · 0.45
_get_targets_singleMethod · 0.45
_get_targets_singleMethod · 0.45
_get_targets_singleMethod · 0.45
_get_targets_singleMethod · 0.45
_get_target_singleMethod · 0.45
_get_target_singleMethod · 0.45

Calls

no outgoing calls

Tested by

no test coverage detected