python - 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 无法从这样转换的图像中学习。
解决方案
推荐阅读
- c# - 使用参数调用静态方法的操作,而不在 C# 中捕获它
- python - python列表的单独元素可以同时被单独的子进程访问吗?
- php - 更新新图像仍然显示旧图像
- typescript - NestJS,在生产中放置控制器或路由
- python - 金字塔中外部服务(redis)的连接池
- c# - 使用英文和希腊字符重命名 SQL 表会产生错误(未知字符)
- ms-word - 当包含导出到 word 的表格数据的报告所有表格边框/线条消失时,在访问中
- java - 使用 Mockito,但正在调用真正的方法
- python - Pandas:合并数据框而不在 for 操作中创建新列
- dpdk - 在编译 DPDK hello world 时需要帮助