【问题标题】:Augmentation in torch vision transform is not working as expected火炬视觉变换中的增强未按预期工作
【发布时间】:2021-12-16 04:25:36
【问题描述】:

我正在使用 pytorch 开发一个 CNN。我的模型在没有增强的情况下在训练集和测试集上都提供了很好的准确性,但我想学习增强,所以我使用了 torchvision 变换进行增强,并且在应用增强模型后开始表现最差,损失并没有减少。所以我尝试调试并观察到增强图像看起来失真/出乎意料有人可以帮我解决这个问题。

自定义数据集

class traindataset(Dataset):
    def __init__(self,data,train_end_idx,augmentation = None):
        '''
        data: data is a pandas dataframe generated from csv file where it has columns-> [name,labels,col 1,col2,...,col784]. shape of data->(10000, 786)
        
        '''
        self.data=data
        self.augmentation=augmentation
        self.train_end=train_end_idx
        self.target=self.data.iloc[:self.train_end,1].values
        self.image=self.data.iloc[:self.train_end,2:].values#contains full data
        
    def __len__(self):
        return len(self.target);
    def __getitem__(self,idx):
        
        self.target=self.target
        self.ima=self.image[idx].reshape(1,784) #only takes the selected index
        if self.augmentation is not None:
            self.ima = self.augmentation(self.ima)
        
        return torch.tensor(self.target[idx]),self.ima
                                        

使用增强

torchvision_transform = transforms.Compose([
    np.uint8,
    transforms.ToPILImage(),
    transforms.Resize((28,28)),
    transforms.RandomRotation([45,135]),
    transforms.ToTensor()
    ])  

增强图像(图片的 PFA)

transformed=torchvision_transform(x)
plt.imshow(transformed.squeeze().numpy(), interpolation='nearest')
plt.show()
            

普通图片

x=data.iloc[:1,2:].values
plt.imshow(x.reshape(28,28), interpolation='nearest')
plt.show()

第一张图片有增强,第二张图片没有增强。 如果你愿意,你可以使用代码here 玩,而无需下载任何东西。

【问题讨论】:

  • 你确定是同一张原图吗?
  • 是的,我有和它相同的原始图像@Ivan

标签: machine-learning deep-learning pytorch computer-vision torchvision


【解决方案1】:

transforms.Resize() 函数似乎没有正确地重塑张量。首先进行整形似乎可以解决问题并生成正确的图像(您在专辑部分执行了此步骤)。

transformed = torchvision_transform(x.reshape(28,28))

【讨论】:

  • 是的,你是对的@DNy。我已经更正了代码。但我现在想知道的是,使用相同参数的almentation 增强会产生非常好的结果,但使用torchvision 变换时效果会更差。知道为什么吗?
  • @AshwathShetty 你确定它们是一样的吗?快速查看您的代码是否包含更多增强功能,例如 RandomBrightnessContrast 和 Horizo​​ntalFlip?
  • 您看到的不是我猜的更新代码(您现在可以检查更新的代码),即使在保持 Torch 视觉变换和almentation 完全相同之后,torchvision 变换损失也不是完全下降,我在没有增强的情况下获得的准确性甚至与使用 torchvision 增强时的准确度相差甚远。即使在 100 个 epoch 之后,使用 Torch 视觉增强损失也没有减少。我什至尝试过不应用任何转换,除了在 Torch 视觉转换中将其转换为 ToTensor() 但仍然无法正常工作。 @DNy
猜你喜欢
  • 1970-01-01
  • 2021-05-11
  • 2020-08-28
  • 2016-10-18
  • 1970-01-01
  • 2021-07-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多