123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566 |
- from __future__ import absolute_import
- import math
- import random
- from PIL import Image
- from torchvision import transforms
- class RectScale(object):
- def __init__(self, height, width, interpolation=Image.BILINEAR):
- self.height = height
- self.width = width
- self.interpolation = interpolation
- def __call__(self, img):
- w, h = img.size
- if h == self.height and w == self.width:
- return img
- return img.resize((self.width, self.height), self.interpolation)
- class RandomSizedRectCrop(object):
- def __init__(self, height, width, interpolation=Image.BILINEAR):
- self.height = height
- self.width = width
- self.interpolation = interpolation
- def __call__(self, img):
- for attempt in range(10):
- area = img.size[0] * img.size[1]
- target_area = random.uniform(0.64, 1.0) * area
- aspect_ratio = random.uniform(2, 3)
- h = int(round(math.sqrt(target_area * aspect_ratio)))
- w = int(round(math.sqrt(target_area / aspect_ratio)))
- if w <= img.size[0] and h <= img.size[1]:
- x1 = random.randint(0, img.size[0] - w)
- y1 = random.randint(0, img.size[1] - h)
- img = img.crop((x1, y1, x1 + w, y1 + h))
- assert (img.size == (w, h))
- return img.resize((self.width, self.height), self.interpolation)
- # Fallback
- scale = RectScale(self.height, self.width,
- interpolation=self.interpolation)
- return scale(img)
- normalizer = transforms.Normalize(mean=[0.485, 0.456, 0.406], std=[0.229, 0.224, 0.225])
- TRANSFORM_TRAIN_LIST = transforms.Compose([
- RandomSizedRectCrop(256, 128),
- transforms.RandomHorizontalFlip(),
- transforms.ToTensor(),
- normalizer,
- ])
- TRANSFORM_VAL_LIST = transformer = transforms.Compose([
- RectScale(256, 128),
- transforms.ToTensor(),
- normalizer,
- ])
|