1234567891011121314151617181920212223242526272829303132333435363738394041424344454647 |
- import numpy as np
- def convert_boxes_list_to_batched_boxes(boxes_list):
- """
- Args:
- boxes_list: list or tuple of ndarray with shape (N_i, 4+K)
-
- Returns:
- ndarray with shape (M, 5+K) where M is sum of N_i.
-
- References:
- `convert_boxes_to_roi_format` in TorchVision
- `mmdet.core.bbox.bbox2roi` in mmdetection
- `modeling.poolers.convert_boxes_to_pooler_format` in detectron2
- """
- assert isinstance(boxes_list, (list, tuple))
- # avoids a copy if there is only a single element in a list
- if len(boxes_list) == 1:
- concat_boxes = boxes_list[0]
- else:
- concat_boxes = np.concatenate(boxes_list, axis=0)
- indices_list = [np.full((len(b), 1), i, concat_boxes.dtype)
- for i, b in enumerate(boxes_list)]
- indices = np.concatenate(indices_list, axis=0)
- batched_boxes = np.hstack([indices, concat_boxes])
- return batched_boxes
-
-
- def convert_batched_boxes_to_boxes_list(batched_boxes):
- """
- References:
- `convert_boxes_to_roi_format` in TorchVision
- `mmdet.core.bbox.roi2bbox` in mmdetection
- """
- assert isinstance(batched_boxes, np.ndarray)
- assert batched_boxes.ndim == 2 and batched_boxes.shape[-1] >= 5
-
- boxes_list = []
- indices = np.unique(batched_boxes[:, 0])
- for index in indices:
- inds = (batched_boxes[:, 0] == index)
- boxes = batched_boxes[inds, 1:]
- boxes_list.append(boxes)
- return boxes_list
-
-
|