簡體   English   中英

Keras:將所有圖像保存在一個目錄中

[英]Keras: keep all images in a single directory

我使用存儲在單個目錄中的許多圖像(10M +)(每個類沒有子文件夾),並使用pandas DataFrame跟蹤類標簽。 圖像數量不足以容納在內存中,因此我必須從磁盤讀取小型批處理。 到目前為止,我已經使用Keras .flow_from_directory() ,但是它要求我將圖像移動到每個類的一個子文件夾(以及每個火車/驗證組)。 它很好用,但是當我想使用圖像的不同子集並以各種方式定義類時,它變得非常不切實際。 有沒有人有使用數據庫(例如pandas.DataFrame)來跟蹤小批處理而不是將圖像移動到子文件夾的替代策略?

您需要一個自定義數據生成器。

import numpy as np
import cv2
def batch_generator(ids):
    while True:
        for start in range(0, len(ids), batch_size):
            x_batch = []
            y_batch = []
            end = min(start + batch_size, len(ids))
            ids_batch = ids[start:end]
            for id in ids_batch:
                img = cv2.imread(dpath+'train/{}.jpg'.format(id))
                #img = cv2.resize(img, (224, 224), interpolation = cv2.INTER_AREA)
                labelname=df_train.loc[df_train.id==id,'column_name'].values
                labelnum=classes.index(labelname)
                x_batch.append(img)
                y_batch.append(labelnum)
            x_batch = np.array(x_batch, np.float32) 
            y_batch = to_categorical(y_batch,120) 
            yield x_batch, y_batch

然后,您只能使用id(或圖像名稱)numpy數組調用生成器,如下所示:

model.fit_generator(generator=batch_generator(ids_train_split), \
               steps_per_epoch= \ 
               np.ceil(float(len(ids_train_split)) / float(batch_size)),\
                epochs=epochs, verbose=1, callbacks=callbacks, \
                validation_data=batch_generator(ids_valid_split), \
                validation_steps=np.ceil(float(len(ids_valid_split)) / float(batch_size)))

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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