From a set of original reference_boxes and encoded relative box offsets, Args: rel_codes: encoded boxes, Nx4 or Nx6 torch tensor. reference_boxes: a list of reference boxes, each element is Mx4 or Mx6 torch tensor. The box mode is assumed to
(self, rel_codes: Tensor, reference_boxes: Sequence[Tensor])
| 169 | return targets |
| 170 | |
| 171 | def decode(self, rel_codes: Tensor, reference_boxes: Sequence[Tensor]) -> Tensor: |
| 172 | """ |
| 173 | From a set of original reference_boxes and encoded relative box offsets, |
| 174 | |
| 175 | Args: |
| 176 | rel_codes: encoded boxes, Nx4 or Nx6 torch tensor. |
| 177 | reference_boxes: a list of reference boxes, each element is Mx4 or Mx6 torch tensor. |
| 178 | The box mode is assumed to be ``StandardMode`` |
| 179 | |
| 180 | Return: |
| 181 | decoded boxes, Nx1x4 or Nx1x6 torch tensor. The box mode will be ``StandardMode`` |
| 182 | """ |
| 183 | if not isinstance(reference_boxes, Sequence) or (not isinstance(rel_codes, torch.Tensor)): |
| 184 | raise ValueError("Input arguments wrong type.") |
| 185 | boxes_per_image = [b.size(0) for b in reference_boxes] |
| 186 | # concat the lists to do computation |
| 187 | concat_boxes = torch.cat(tuple(reference_boxes), dim=0) |
| 188 | box_sum = 0 |
| 189 | for val in boxes_per_image: |
| 190 | box_sum += val |
| 191 | if box_sum > 0: |
| 192 | rel_codes = rel_codes.reshape(box_sum, -1) |
| 193 | pred_boxes = self.decode_single(rel_codes, concat_boxes) |
| 194 | if box_sum > 0: |
| 195 | pred_boxes = pred_boxes.reshape(box_sum, -1, 2 * self.spatial_dims) |
| 196 | return pred_boxes |
| 197 | |
| 198 | def decode_single(self, rel_codes: Tensor, reference_boxes: Tensor) -> Tensor: |
| 199 | """ |