[英]Keras flow_from_dataframe gives 0 images
我正在嘗試使用 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 文件中提到的圖像
該問題是由於數據框中的 NaN 引起的。 忽略這些列是行不通的。 解決方案是用其他東西替換 NaN。 例如,
testdf = pd.read_csv("test.csv")
testdf.fillna(0, inplace=True)
這將 NaN 替換為 0。然后像往常一樣使用ImageDataGenerator
。
我也面臨同樣的錯誤並找到了解決方案。 我使用的是絕對路徑,使用了正確的 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)
讓我知道它是否解決了您的問題或者您是否需要任何進一步的解釋。
我也有同樣的問題。 首先,確保您獲得了正確的參數directory
的絕對路徑。
我的 df 中的文件名具有值image.pgm.png
,文件夾中的實際圖像文件具有格式image.pgm
。
image.pgm
=> 仍然無法正常工作image.pgm
重命名為image.pgm.png
,它與 df => 中的格式完全匹配!我有同樣的錯誤,我發現我錯過了目錄路徑,以及不在數據框中的圖像擴展名,
因此,請確保您的目錄路徑是正確的並且是圖像的擴展名,因為您可以執行以下操作:
def extention_train_data(x):
return x+".jpg"
如果您有另一個擴展名,請更改 jpg 擴展名。
然后將其應用於您的數據框:
train_data['image'] = train_data['image_id'].apply(extention_train_data)
一旦您擁有包含圖像及其擴展名的圖像列,然后
train_generator = datagen.flow_from_dataframe(
train_data,
directory="/kaggle/input/plant-pathology-2020-fgvc7/images/",
x_col = "image",
y_col = "label",
target_size = size,
class_mode = "binary",
batch_size = batch_size,
subset="training",
shuffle = True,
seed = 42,
)
好的,所以我一直有同樣的問題。 我的數據標簽位於 csv 文件中,圖像數據位於單獨的文件夾中。我認為,問題是由文件夾中的標簽和圖像未正確對齊引起的。做了一大堆東西來糾正和處理數據。 這不是問題所在。 所以,任何有問題的人。 我嘗試了@Oussama Ouardini 的回答,它奏效了。 謝謝!
我還要補充一點——如果您正在進行訓練和驗證拆分,以確保您創建的初始 ImageDataGenerator 對象具有指定的驗證拆分。
def extension_train_data(x):
return "xc"+str(x)+".png"
train_df['file_id'] = train_df['file_id'].apply(extension_train_data)
這是我的代碼 -
datagen=ImageDataGenerator(rescale=1./255,validation_split=0.2)
#rescale all pixel values from 0-255, so after this step all our
#pixel values are in range (0,1)
train_generator=datagen.flow_from_dataframe(dataframe=train_df,directory='./img_data/', x_col="file_id", y_col="english_cname",
class_mode="categorical",save_to_dir='./new folder/',
target_size=(64,64),subset="training",
seed=42,batch_size=32,shuffle=False)
val_generator=datagen.flow_from_dataframe(dataframe=train_df,directory='./img_d
ata/', x_col="file_id", y_col="english_cname",
class_mode="categorical",
target_size=(64,64),subset="validation",
seed=42,batch_size=32,shuffle=False)
print("\n Sanity check Line.--------")
我的輸出是一個成功驗證的圖像文件。 :)
Found 212 validated image filenames belonging to 88 classes.
Found 52 validated image filenames belonging to 88 classes.
Sanity check Line.----------
我希望有人會發現這很有用。 干杯!
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.