PyTorch自定义图像Dataset脚本在Google Colab中可创建对象但无法读取数据的问题求助
问题分析与解决方案
从你的描述来看,核心问题大概率是导入模块后的工作目录与直接运行单元格时的工作目录不一致,导致self.image_paths里的图片路径无法被正确解析,进而触发imread找不到文件的错误。
为什么直接复制代码到单元格能正常运行?因为此时代码的执行上下文是Colab当前的工作目录,相对路径是基于这个目录的;但当你把代码封装成模块导入后,模块的执行上下文可能发生了变化(比如模块所在路径与当前工作目录不同),原本的相对路径就失效了。
下面是具体的排查和解决步骤:
1. 先确认工作目录差异
在Colab单元格里运行这段代码,检查导入模块前后的工作目录是否一致:
import os print("导入模块前的工作目录:", os.getcwd()) from imageDataset import customDataset print("导入模块后的工作目录:", os.getcwd())
如果两个路径不一样,那就是问题的根源——工作目录变化导致图片路径无法定位。
2. 将图片路径转为绝对路径(最稳妥的解决方法)
修改你的customDataset类,在生成self.image_paths时,把所有路径转换成绝对路径,这样不管模块在什么上下文运行,都能精准找到图片文件:
import os from torch.utils.data import Dataset import io # 根据你实际使用的imread库调整,比如skimage.io或cv2 import numpy as np import torch class customDataset(Dataset): def __init__(self, data, augmentations=None): self.data = data self.augmentations = augmentations # 把相对路径转为绝对路径 self.image_paths = [os.path.abspath(path) for path in data['image_path']] self.targets = data['target'] def __len__(self): return len(self.data) def __getitem__(self, index): target = self.targets[index] # 可以先打印路径,确认是否正确 # print("当前读取的图片路径:", self.image_paths[index]) image = io.imread(self.image_paths[index]) if self.augmentations is not None: augmented = self.augmentations(image=image) image = augmented['image'] image = np.transpose(image, (2, 0, 1)).astype(np.float32) return torch.tensor(image, dtype=torch.float32), torch.tensor(target, dtype=torch.long)
3. 验证模块导入的路径正确性
如果你是通过files.upload()上传的imageDataset.py,先运行!ls确认文件在当前工作目录下。如果模块在其他路径,记得用sys.path.append()添加正确的路径,同时要注意该路径下的相对路径是否和你的图片路径匹配。
内容的提问来源于stack exchange,提问作者default-303
相关产品推荐
相关产品推荐

