Keras flow_from_dataframe提供了0张图片

时间:2019-02-05 08:40:15

标签: python keras

我正在尝试使用Keras的flow_from_dataframe方法来读取训练和测试图像。

我的训练图像和测试图像都在同一目录中,我从两个不同的csv文件读取路径。

我读取测试图像的代码如下,

# Read test file
testdf = pd.read_csv("test.csv")

# load images
test_datagen = ImageDataGenerator(rescale=1./255)

test_generator = test_datagen.flow_from_dataframe(
    dataframe=testdf, directory=IMAGE_PATH,
    x_col='image_name', y_col=None,
    has_ext=True, target_size=(10,10)
    ,batch_size=32,color_mode='rgb',shuffle=False, class_mode=None)

我得到这样的输出

Found 0 images.

虽然用于读取训练数据的类似代码正常工作。我检查了图像是否存在于给定的路径中,并且确实如此。此错误的可能原因有哪些?如何尝试调试问题?

编辑:这是一项回归任务,因此所有图像都位于一个目录中,而不是分类任务中预期的子目录中。

编辑2:我将usecols=[0]添加到read_csv中,现在test_datagen可以找到目录中的所有图像,而不仅仅是test.csv文件中提到的图像

3 个答案:

答案 0 :(得分:1)

该问题是由于数据框中的NaN而发生的。忽略这些列不起作用。解决方案是用其他东西代替NaN。例如,

testdf = pd.read_csv("test.csv")
testdf.fillna(0, inplace=True)

这将NaN替换为0。然后照常使用ImageDataGenerator

答案 1 :(得分:0)

我也面临着同样的错误,并找到了解决方案。 我使用的是绝对路径,使用的是正确的DataFrame,并且一切仍然很好,但代码仍然抛出错误-“未找到图片”。

我检查了一下,发现我的数据框包含不带扩展名的图像名称,并且文件夹中的图像也具有扩展名。 例如。 DataFrame中的图像名称为“ abc”,但文件夹中的图像名为“ abc.png”。 只需在DataFrame中的图像名称中添加.png即可解决您的问题。 我只是尝试下面的代码,它就解决了.. !!!!

def append_ext(fn):
    return fn+".png"
train_valid_data["id_code"]=train_valid_data["id_code"].apply(append_ext)
test_data["id_code"]=test_data["id_code"].apply(append_ext)

让我知道它是否可以解决您的问题,或者是否需要任何进一步的说明。

答案 2 :(得分:0)

我有同样的问题。首先,请确保正确获取参数directory的绝对路径。

我df中的文件名的值为image.pgm.png,文件夹中的实际图像文件的格式为image.pgm

  1. 我试图将df中的文件名更改为image.pgm =>仍然无法正常工作
  2. 我将图像文件从image.pgm重命名为image.pgm.png,该文件与df =>正常工作的格式完全匹配!