首页 > 解决方案 > Pytorch:图像转换器未转换为灰度

问题描述

我的输入文件包含显示情绪的图像或面孔,有 8 个标签,1 个用于中性,其他用于不同的情绪。我想训练我的 CNN 对图像的情绪进行分类。我需要将我的图像转换为灰度。这是转换前的图像; 在此处输入图像描述

但是我之后得到的图像是 在此处输入图像描述

我的变压器代码如下;

   _transforms = transforms.Compose([
        transforms.ToPILImage(),
        transforms.Grayscale(num_output_channels=1),
        transforms.Resize((ImageSize.width, ImageSize.height)),
        transforms.ToTensor()
    ])
    train_dataset = EmotionDatasetTrain(X_tr, y_tr, transform=_transforms)
    test_dataset = EmotionDatasetTest(X_t, y_t, transform=_transforms)
    val_dataset = EmotionDatasetVal(X_v, y_v, transform=_transforms)

我的 EmotionDatasetTrain 类(和超类)是;

从torchvision 导入torchvision 作为tv 从torchvision 导入变换从torch.utils.data 导入数据集从设置导入ImageSize

class EmotionDataSet(): def init (self, transform): self.transform = transform self.classes = ["neutral", "anger", "contempt", "disgust", "fear", "happy", "sadness" , “惊喜”]

def get_x_y(self, idx, _X, _Y):
    if torch.is_tensor(idx):
        idx = idx.tolist()

    y = _Y[idx].item()
    
    if self.transform:
        x = self.transform(_X[idx].reshape(ImageSize.width, ImageSize.height))
        #x = self.transform(_X[idx])
    return x, y

类 EmotionDatasetTrain(EmotionDataSet,数据集):

def __init__(self, X_Train, Y_Train, transform=None):
    super().__init__(transform)
    self.X_Train = X_Train
    self.Y_Train = Y_Train

def __len__(self):
    return len(self.X_Train)

def __getitem__(self, idx):
    x, y = super().get_x_y(idx, self.X_Train, self.Y_Train)
    return x, y

那么为什么我的图像被转换为​​分辨率非常低的紫色和黄色图像?我期待一个高分辨率的黑白图像。我的 CNN 无法从这样转换的图像中学习。

标签: pythonpytorchconv-neural-networktorchvision

解决方案


推荐阅读