本文主要是介绍torchvison.transforms.functional.affine()/resized_crop(),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
要使用这个函数,往往需要配套使用函数 transforms.RandomAffine.get_params,这个函数的作用是返回torchvison.transforms.functional.affine()所需要的变换参数。
transforms.RandomAffine.get_params的参数包括 degrees=(-10, 10), translate=(0.1, 0.1), scale_ranges=(0.9, 1.1), shears=(-5, 5), img_size=imgs[0][0].size,等等。可以看到这些参数都是比例,也就是对应的变换程度,比如translate=(0.1, 0.1),也就是说变换成都是0.1,scale_ranges=(0.9, 1.1)则表示图像的变换范围再0.9到1.1。
好了,问题来啦,上面的变换参数对于我们人来说很好理解,但是torchvison.transforms.functional.affine()计算的时候还是要对像素来计算的,所以,比如这里的scale_ranges=(0.9, 1.1)意思是在原来图像的基础上转变0.9到1.1的程度,但具体到底应该变换多少像素呢。所以transforms.RandomAffine.get_params这个函数的作用就是把我们人类好理解的参数转化为torchvison.transforms.functional.affine()可以实际操作的像素值。这也是参数img_size=imgs[0][0].size的作用,让transforms.RandomAffine.get_params在图像的实际尺寸上得到实际转化需要的像素值。
实例:
同样的道理也可以应用于torchvison.transforms.functional.resized_crop(),它也可以先利用transforms.RandomResizedCrop.get_params(img, scale=(1, 1), ratio=(0.9, 1.1))来得到一组参数,然后再使用torchvison.transforms.functional.resized_crop()来对目标进行变换。
但其实上面来个函数transforms.RandomResizedCrop和transforms.RandomAffine()本身自己内部就是先调用的对应的get_params()函数,再调用对应的functional函数来做变换,这里单独使用是为了对不同图片做相同变换。因为本身transforms.RandomResizedCrop和transforms.RandomAffine()是随机变换,不能保证对不同图片进行相同变换。
这篇关于torchvison.transforms.functional.affine()/resized_crop()的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!