在Pythorch中显示增强图像的示例

2024-09-28 18:59:21 发布

您现在位置:Python中文网/ 问答频道 /正文

我想展示一些增强训练图像的样本。在

我的转换包括标准ImageNet transforms.Normalize,如下所示:

train_transforms = transforms.Compose([transforms.RandomRotation(30),
                                       transforms.RandomResizedCrop(224),
                                       transforms.RandomHorizontalFlip(),
                                       transforms.ToTensor(),
                                       transforms.Normalize([0.485, 0.456, 0.406],
                                                            [0.229, 0.224, 0.225])])

然而,由于Normalise,图像显示出奇怪的颜色。在

This answer表示我需要访问原始图像,这在加载时应用转换时很困难:

^{pr2}$

在使用标准化的图像进行计算的同时,我该如何以它们通常的颜色显示一些样本增强图像?在


Tags: compose图像标准颜色trainthis样本imagenet
3条回答

只需撤消标准化操作,即乘以标准差并加上 中庸之道。在

请参见Pythorch教程中的imshow方法: https://pytorch.org/tutorials/beginner/transfer_learning_tutorial.html#visualize-a-few-images

我建议两种选择:

  1. 创建一个单独的“转换”阶段,该阶段显示图像并在不进行更改的情况下进一步传递图像。一个免费的好处是你可以在转换列表的任何阶段插入。在
    import cv2
    import numpy as np
    def TransformShow(name="img", wait=100):
        def transform_show(img):
            cv2.imshow(name, np.array(img))
            cv2.waitKey(wait)
            return img
        return transform_show

ToTensor()之前插入此“transformer”:

^{pr2}$

使用zerodelay_in_ms等待按键。在

我在这里使用OpenCV显示图像。也可以只用枕头/枕头,但我不喜欢它的处理方式。在

  1. 撤消规格化并显示图像。在
def show_image(img, name="img", wait=100):
    mean = np.array([0.485, 0.456, 0.406])
    std =  np.array([0.229, 0.224, 0.225])
    cv2.imshow(name, img.cpu().numpy().transpose((1,2,0)) * std + mean)
    cv2.waitKey(wait)

然后叫它

        show_image(data[0], "unaug", 1)
  1. 最后一种方法可以用一个快速的双行程序来近似,但颜色有些扭曲:
    cv2.imshow("approx", data[0].cpu().numpy().transpose((1,2,0)) * 0.225 + 0.45)
    cv2.waitKey(10)

我已经面临同样的问题了。我的解决方案是创建一个不同的torch.Dataset,但不进行标准化。在

Here我创建DatasetHere我有一个实现扩充的类。我有两个成员:self.tf_augment和{}。前者只进行数据扩充,后者采用数据扩充加规范化。在

相关问题 更多 >