RandomResizedCrop

source code

RandomResizedCrop,默认scale=(0.08, 1.0)
0.08意味着在100×100的图像中,最小的crop_img约为28×28

get_params函数中,输入参数imgPIL Imageimg.size对应(w, h)

计算img的面积

area = img.size[0] * img.size[1]

[0.08 * area, 1.0 * area]采样crop_img的面积

target_area = random.uniform(*scale) * area

[3/4, 4/3]采样crop_img的宽高比

aspect_ratio = random.uniform(*ratio)

由此可以建立关于wh的方程组

w * h = target_area
w / h = aspect_ratio

解得

w = int(round(math.sqrt(target_area * aspect_ratio)))
h = int(round(math.sqrt(target_area / aspect_ratio)))

以50%的概率交换wh,因为宽高比的定义为
w / h = aspect_ratioh / w = aspect_ratio均可

if random.random() < 0.5:
	w, h = h, w

检查crop_imgwh是否超出img的范围,如果未超出范围,则获得一组(i, j, h, w)

if w <= img.size[0] and h <= img.size[1]:
	i = random.randint(0, img.size[1] - h)
	j = random.randint(0, img.size[0] - w)
	return i, j, h, w

如果超出范围,则重新做一遍,这一系列步骤总共尝试10次,对应for attempt in range(10):

如果10次尝试都失败了,则计算img的短边,然后center crop一个正方形

w = min(img.size[0], img.size[1])
i = (img.size[1] - w) // 2
j = (img.size[0] - w) // 2
return i, j, w, w

最后根据(i, h, h, w)裁剪出crop_img,然后resize为指定大小

  • 5
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值