Commit 6eac421c authored by Michał Zientkiewicz's avatar Michał Zientkiewicz Committed by Francisco Massa
Browse files

Aspect ratio is now sampled from a logarithmic distribution. (#799)


Signed-off-by: default avatarMichal Zientkiewicz <michalz@nvidia.com>
parent 69382912
...@@ -572,24 +572,31 @@ class RandomResizedCrop(object): ...@@ -572,24 +572,31 @@ class RandomResizedCrop(object):
for attempt in range(10): for attempt in range(10):
target_area = random.uniform(*scale) * area target_area = random.uniform(*scale) * area
aspect_ratio = random.uniform(*ratio) log_ratio = (math.log(ratio[0]), math.log(ratio[1]))
aspect_ratio = math.exp(random.uniform(*log_ratio))
w = int(round(math.sqrt(target_area * aspect_ratio))) w = int(round(math.sqrt(target_area * aspect_ratio)))
h = int(round(math.sqrt(target_area / aspect_ratio))) h = int(round(math.sqrt(target_area / aspect_ratio)))
if random.random() < 0.5 and min(ratio) <= (h / w) <= max(ratio):
w, h = h, w
if w <= img.size[0] and h <= img.size[1]: if w <= img.size[0] and h <= img.size[1]:
i = random.randint(0, img.size[1] - h) i = random.randint(0, img.size[1] - h)
j = random.randint(0, img.size[0] - w) j = random.randint(0, img.size[0] - w)
return i, j, h, w return i, j, h, w
# Fallback # Fallback to central crop
w = min(img.size[0], img.size[1]) in_ratio = img.size[0] / img.size[1]
i = (img.size[1] - w) // 2 if (in_ratio < min(ratio)):
w = img.size[0]
h = w / min(ratio)
elif (in_ratio > max(ratio)):
h = img.size[1]
w = h * max(ratio)
else: # whole image
w = img.size[0]
h = img.size[1]
i = (img.size[1] - h) // 2
j = (img.size[0] - w) // 2 j = (img.size[0] - w) // 2
return i, j, w, w return i, j, h, w
def __call__(self, img): def __call__(self, img):
""" """
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment