Spaces:
Build error
Build error
import numpy as np | |
from src.detection.vision.coco_utils import ConvertCocoPolysToMask, CocoDetection, _coco_remove_images_without_annotations | |
from src.detection.vision.transforms import Compose | |
class UpdateIsCrowd(object): | |
def __init__(self, min_size, min_vis=0.2): | |
self.min_size = min_size | |
self.min_vis = min_vis | |
def __call__(self, image, target): | |
for i, ann in enumerate(target['annotations']): | |
bbox = ann['bbox'] | |
bbox_too_small = max(bbox[-1], bbox[-2]) < self.min_size | |
if 'vis' in ann: | |
vis = ann['vis'] | |
elif 'keypoints' in ann: | |
vis = (np.array(ann['keypoints'])[2::3] == 2).mean().round(2) | |
else: | |
raise RuntimeError( | |
"The given annotations have no visibility measure. Are you sure you want to proceed?") | |
not_vis = vis < self.min_vis | |
target['annotations'][i]['iscrowd'] = max( | |
ann['iscrowd'], int(bbox_too_small), int(not_vis)) | |
return image, target | |
def get_mot_dataset(img_folder, ann_file, transforms, min_size=25, min_vis=0.2): | |
t = [UpdateIsCrowd(min_size=min_size, min_vis=min_vis), | |
ConvertCocoPolysToMask()] | |
if transforms is not None: | |
t.append(transforms) | |
transforms = Compose(t) | |
dataset = CocoDetection(img_folder=img_folder, | |
ann_file=ann_file, | |
transforms=transforms) | |
dataset = _coco_remove_images_without_annotations(dataset) | |
return dataset | |