我正在尝试使用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文件中提到的图像>
答案 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
。
image.pgm
=>仍然无法正常工作image.pgm
重命名为image.pgm.png
,该文件与df =>正常工作的格式完全匹配!