簡體   English   中英

Keras flow_from_dataframe 提供 0 張圖片

[英]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

  1. 我試圖將 df 中的文件名更改為image.pgm => 仍然無法正常工作
  2. 我將圖像文件從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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM