|
|
|
@ -4,34 +4,11 @@ import shutil |
|
|
|
|
import tempfile |
|
|
|
|
|
|
|
|
|
import mmcv |
|
|
|
|
import numpy as np |
|
|
|
|
import pycocotools.mask as mask_util |
|
|
|
|
import torch |
|
|
|
|
import torch.distributed as dist |
|
|
|
|
from mmcv.runner import get_dist_info |
|
|
|
|
|
|
|
|
|
from mmdet.core import tensor2imgs |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
# TODO: move this function to more proper place |
|
|
|
|
def encode_mask_results(mask_results): |
|
|
|
|
if isinstance(mask_results, tuple): # mask scoring |
|
|
|
|
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]) # encoded with RLE |
|
|
|
|
if isinstance(mask_results, tuple): |
|
|
|
|
return encoded_mask_results, cls_mask_scores |
|
|
|
|
else: |
|
|
|
|
return encoded_mask_results |
|
|
|
|
from mmdet.core import encode_mask_results, tensor2imgs |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def single_gpu_test(model, |
|
|
|
@ -46,12 +23,6 @@ def single_gpu_test(model, |
|
|
|
|
for i, data in enumerate(data_loader): |
|
|
|
|
with torch.no_grad(): |
|
|
|
|
result = model(return_loss=False, rescale=True, **data) |
|
|
|
|
# encode mask results |
|
|
|
|
if isinstance(result, tuple): |
|
|
|
|
bbox_results, mask_results = result |
|
|
|
|
encoded_mask_results = encode_mask_results(mask_results) |
|
|
|
|
result = bbox_results, encoded_mask_results |
|
|
|
|
results.append(result) |
|
|
|
|
|
|
|
|
|
if show or out_dir: |
|
|
|
|
img_tensor = data['img'][0] |
|
|
|
@ -78,6 +49,13 @@ def single_gpu_test(model, |
|
|
|
|
out_file=out_file, |
|
|
|
|
score_thr=show_score_thr) |
|
|
|
|
|
|
|
|
|
# encode mask results |
|
|
|
|
if isinstance(result, tuple): |
|
|
|
|
bbox_results, mask_results = result |
|
|
|
|
encoded_mask_results = encode_mask_results(mask_results) |
|
|
|
|
result = bbox_results, encoded_mask_results |
|
|
|
|
results.append(result) |
|
|
|
|
|
|
|
|
|
batch_size = data['img'][0].size(0) |
|
|
|
|
for _ in range(batch_size): |
|
|
|
|
prog_bar.update() |
|
|
|
|