| | import mmcv |
| | import numpy as np |
| | import pycocotools.mask as mask_util |
| |
|
| |
|
| | def split_combined_polys(polys, poly_lens, polys_per_mask): |
| | """Split the combined 1-D polys into masks. |
| | |
| | A mask is represented as a list of polys, and a poly is represented as |
| | a 1-D array. In dataset, all masks are concatenated into a single 1-D |
| | tensor. Here we need to split the tensor into original representations. |
| | |
| | Args: |
| | polys (list): a list (length = image num) of 1-D tensors |
| | poly_lens (list): a list (length = image num) of poly length |
| | polys_per_mask (list): a list (length = image num) of poly number |
| | of each mask |
| | |
| | Returns: |
| | list: a list (length = image num) of list (length = mask num) of \ |
| | list (length = poly num) of numpy array. |
| | """ |
| | mask_polys_list = [] |
| | for img_id in range(len(polys)): |
| | polys_single = polys[img_id] |
| | polys_lens_single = poly_lens[img_id].tolist() |
| | polys_per_mask_single = polys_per_mask[img_id].tolist() |
| |
|
| | split_polys = mmcv.slice_list(polys_single, polys_lens_single) |
| | mask_polys = mmcv.slice_list(split_polys, polys_per_mask_single) |
| | mask_polys_list.append(mask_polys) |
| | return mask_polys_list |
| |
|
| |
|
| | |
| | def encode_mask_results(mask_results): |
| | """Encode bitmap mask to RLE code. |
| | |
| | Args: |
| | mask_results (list | tuple[list]): bitmap mask results. |
| | In mask scoring rcnn, mask_results is a tuple of (segm_results, |
| | segm_cls_score). |
| | |
| | Returns: |
| | list | tuple: RLE encoded mask. |
| | """ |
| | if isinstance(mask_results, tuple): |
| | cls_segms, cls_mask_scores = mask_results |
| | else: |
| | cls_segms = mask_results |
| | num_classes = len(cls_segms) |
| | encoded_mask_results = [[] for _ in range(num_classes)] |
| | for i in range(len(cls_segms)): |
| | for cls_segm in cls_segms[i]: |
| | encoded_mask_results[i].append( |
| | mask_util.encode( |
| | np.array( |
| | cls_segm[:, :, np.newaxis], order='F', |
| | dtype='uint8'))[0]) |
| | if isinstance(mask_results, tuple): |
| | return encoded_mask_results, cls_mask_scores |
| | else: |
| | return encoded_mask_results |
| |
|