Spaces:
Build error
Build error
import sys | |
from mmdet.core import merge_aug_proposals | |
if sys.version_info >= (3, 7): | |
from mmdet.utils.contextmanagers import completed | |
class RPNTestMixin(object): | |
"""Test methods of RPN.""" | |
if sys.version_info >= (3, 7): | |
async def async_simple_test_rpn(self, x, img_metas): | |
sleep_interval = self.test_cfg.pop('async_sleep_interval', 0.025) | |
async with completed( | |
__name__, 'rpn_head_forward', | |
sleep_interval=sleep_interval): | |
rpn_outs = self(x) | |
proposal_list = self.get_bboxes(*rpn_outs, img_metas) | |
return proposal_list | |
def simple_test_rpn(self, x, img_metas): | |
"""Test without augmentation. | |
Args: | |
x (tuple[Tensor]): Features from the upstream network, each is | |
a 4D-tensor. | |
img_metas (list[dict]): Meta info of each image. | |
Returns: | |
list[Tensor]: Proposals of each image. | |
""" | |
rpn_outs = self(x) | |
proposal_list = self.get_bboxes(*rpn_outs, img_metas) | |
return proposal_list | |
def aug_test_rpn(self, feats, img_metas): | |
samples_per_gpu = len(img_metas[0]) | |
aug_proposals = [[] for _ in range(samples_per_gpu)] | |
for x, img_meta in zip(feats, img_metas): | |
proposal_list = self.simple_test_rpn(x, img_meta) | |
for i, proposals in enumerate(proposal_list): | |
aug_proposals[i].append(proposals) | |
# reorganize the order of 'img_metas' to match the dimensions | |
# of 'aug_proposals' | |
aug_img_metas = [] | |
for i in range(samples_per_gpu): | |
aug_img_meta = [] | |
for j in range(len(img_metas)): | |
aug_img_meta.append(img_metas[j][i]) | |
aug_img_metas.append(aug_img_meta) | |
# after merging, proposals will be rescaled to the original image size | |
merged_proposals = [ | |
merge_aug_proposals(proposals, aug_img_meta, self.test_cfg) | |
for proposals, aug_img_meta in zip(aug_proposals, aug_img_metas) | |
] | |
return merged_proposals | |