demo-ml-pennfudanped
/
custom_segmentation_transforms.py
48 строк · 1.5 Кб
1import random2from torchvision.transforms import functional as F3
4
5def _flip_coco_person_keypoints(kps, width):6flip_inds = [0, 2, 1, 4, 3, 6, 5, 8, 7, 10, 9, 12, 11, 14, 13, 16, 15]7flipped_data = kps[:, flip_inds]8flipped_data[..., 0] = width - flipped_data[..., 0]9# Maintain COCO convention that if visibility == 0, then x, y = 010inds = flipped_data[..., 2] == 011flipped_data[inds] = 012return flipped_data13
14
15class Compose(object):16def __init__(self, transforms):17self.transforms = transforms18
19def __call__(self, image, target):20for t in self.transforms:21image, target = t(image, target)22return image, target23
24
25class RandomHorizontalFlip(object):26def __init__(self, prob):27self.prob = prob28
29def __call__(self, image, target):30if random.random() < self.prob:31height, width = image.shape[-2:]32image = image.flip(-1)33bbox = target["boxes"]34bbox[:, [0, 2]] = width - bbox[:, [2, 0]]35target["boxes"] = bbox36if "masks" in target:37target["masks"] = target["masks"].flip(-1)38if "keypoints" in target:39keypoints = target["keypoints"]40keypoints = _flip_coco_person_keypoints(keypoints, width)41target["keypoints"] = keypoints42return image, target43
44
45class ToTensor(object):46def __call__(self, image, target):47image = F.to_tensor(image)48return image, target49