使用 pandas (+pyTorch,scikit) 读取图像时出错

Error reading images with pandas (+pyTorch,scikit)

我正在尝试读取图像以使用 CNN,但在尝试加载图像时出现 pandas 错误。 这是一些代码(为清晰起见,省略了导入和不相关的 nn class):

file_name = "annotation.csv"
image_files = pd.read_csv(file_name)

class SimpsonsDataset(Dataset):

    def __init__(self, csv_file, root_dir, transform=None):
        self.image_file = pd.read_csv(csv_file)
        self.root_dir = root_dir
        self.transform = transform

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

    def __getitem__(self, idx):
        img_name = os.path.join(self.root_dir, self.image_file.iloc[idx,0][1:])
        image = io.imread(img_name)
        sample = {'image': image}
        if self.transform:
            sample = self.transform(sample)
        return sample

simpsons = SimpsonsDataset(csv_file=image_files,root_dir="folder/")

我使用iloc[idx,0][1:]格式化文件路径,文件路径被加入,文件夹和文件名匹配。

但是,当我尝试 运行 文件时,出现以下错误:

  File "C:\ProgramData\Anaconda3\lib\site-packages\spyder\utils\site\sitecustomize.py", line 710, in runfile
    execfile(filename, namespace)

  File "C:\ProgramData\Anaconda3\lib\site-packages\spyder\utils\site\sitecustomize.py", line 101, in execfile
    exec(compile(f.read(), filename, 'exec'), namespace)

  File "C:/.../image_extractor.py", line 41, in <module>
    simpsons = SimpsonsDataset(csv_file=image_files,root_dir="folder/")

  File "C:/.../image_extractor.py", line 26, in __init__
    self.image_file = pd.read_csv(csv_file)

  File "C:\ProgramData\Anaconda3\lib\site-packages\pandas\io\parsers.py", line 655, in parser_f
    return _read(filepath_or_buffer, kwds)

  File "C:\ProgramData\Anaconda3\lib\site-packages\pandas\io\parsers.py", line 392, in _read
    filepath_or_buffer, encoding, compression)

  File "C:\ProgramData\Anaconda3\lib\site-packages\pandas\io\common.py", line 210, in get_filepath_or_buffer
    raise ValueError(msg.format(_type=type(filepath_or_buffer)))

ValueError: Invalid file path or buffer object type: <class 'pandas.core.frame.DataFrame'>

很想知道为什么会发生这种情况。谢谢!

您的变量 image_files 是一个 pandas DataFrame,因为它包含 pd.read_csv() 的 return 值,return 是一个 DataFrame。尝试删除行

image_files = pd.read_csv(file_name)

并将最后一行更改为:

simpsons = SimpsonsDataset(csv_file=file_name, root_dir="folder/")