当我们使用 torchvision 或 albumentations 的变换时,我们可以使用随机裁剪和随机亮度对比度等功能来生成增强图像。有没有可能的方法来存储应用于图像的精确变换以获得相应的图像?
是的,有,但这需要您做一些额外的工作。大多数随机变换类都有一个
get_params
方法(如果使用较新的 _get_params
命名空间,则为 v2
),该方法生成用于增强的随机参数,然后将这些参数与图像一起传递到功能变换。
如果您想在训练期间存储每个转换的参数,最简单的方法可能是子类化转换,并添加感兴趣的值的日志。使用旧 API 的最小示例:
import logging
import torchvision
import torchvision.transforms.functional as F
logging.basicConfig(level=logging.INFO)
logger = logging.getLogger(__name__)
class MyRandomCrop(torchvision.transforms.RandomCrop):
def forward(self, img):
i, j, h, w = self.get_params(img, self.size)
logger.info("Cropping image with parameters %d %d %d %d", i, j, h, w)
return F.crop(img, i, j, h, w)
image = torchvision.io.read_image("/path/to/image.jpg")
transform = MyRandomCrop(size=(100, 100))
image = transform(image)
>>> INFO:__main__:Cropping image with parameters 789 769 100 100