Pytork:图像转换器未转换为灰度

2024-06-16 15:43:16 发布

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

我的输入文件包含显示情绪的图像或脸,有8个标签,1个用于中性,其他用于不同情绪。 我想训练我的CNN对图像的情感进行分类。 我需要将图像转换为灰度。这是变换前的图像; enter image description here

然而,我后来得到的图像是 enter image description here

我的转换代码如下

   _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类(和super类)是

import torch import torchvision as tv from torchvision import transforms from torch.utils.data import Dataset from settings import ImageSize

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

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

class EmotionDatasetTrain(EmotionDataSet, Dataset):

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无法从这样变换的图像中学习


Tags: from图像importselfinitdeftransformtrain