簡體   English   中英

從目錄中為 CNN 在 Keras 中加載圖像,但在 CSV 文件中添加標簽

[英]Loading images in Keras for CNN from directory but label in CSV file

我在目錄train_images = './data/images'train_labels = './data/labels.csv'有一組圖像文件

例如 - train_images有 1000 張圖片為377.jpg,17814.jpg ....等等。 並且它們對應的類保存在不同的 CSV 文件中。

編輯- 這是 CSV 文件中的幾行 -

>>
    ID          Class

0   377.jpg     MIDDLE
1   17814.jpg   YOUNG
2   21283.jpg   MIDDLE
3   16496.jpg   YOUNG
4   4487.jpg    MIDDLE

這里 ID 是圖像文件名,類是它關聯的類。

我可以使用非常平常的

ImageDataGenerator().flow_from_directory(train_images, class_mode='binary', batch_size=64)

但問題是標簽在 CSV 文件中。 我能做的是使用os重命名所有文件並將不同的文件放在不同的目錄中,然后加載它,但它看起來如此不成熟和愚蠢。

如何在 Keras 中為 CNN 加載數據,其中每個圖像的尺寸為(h,w,c)

這是我使用 ImageDataGenerator 的示例,使用 ImageDataGenerator 中的 flow_from_dataframe 函數和 Pandas 來讀取 CSV。 我使用的 CSV 有兩列:

x_col="Image"
y_col="Id"

所以第一列是文件名,例如 xxxx.jpg,第二列是類。 在這種情況下,既然是來自kaggle座頭鯨挑戰賽,那它是一種什么樣的鯨魚。 圖像文件位於“../input/humpback-whale-identification/train/”目錄中

from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Dense, Activation, 
Conv2D, Flatten, Dropout, MaxPooling2D, BatchNormalization
from tensorflow.keras.preprocessing.image import 
ImageDataGenerator
from keras import regularizers, optimizers
import os
import numpy as np
import matplotlib.pyplot as plt
import pandas as pd

所以使用pandas閱讀CSV:

traindf=pd.read_csv('../input/humpback-whale- 
identification/train.csv',dtype=str)

現在使用 ImageDataGenerator

datagen=ImageDataGenerator(rescale=1./255.,validation_split=0.25)
train_generator=datagen.flow_from_dataframe(
dataframe=traindf,
directory="../input/humpback-whale-identification/train/",
x_col="Image",
y_col="Id",
subset="training",
batch_size=32,
seed=42,
shuffle=True,
class_mode="categorical",
target_size=(100,100))

現在有時 CSV 中的文件名/ID 沒有擴展名。 因此,我使用以下內容向它們添加擴展:

def append_ext(fn):
    return fn+".jpg"

traindf["Image"]=traindf["Image"].apply(append_ext)

嗯,希望有幫助! 這是我第一次嘗試在這里回答問題 :-)

Kaggle 數據集/挑戰在這里https://www.kaggle.com/c/humpback-whale-identification

注意:我在 kaggle 上看到人們以各種方式這樣做! 但這似乎是最簡單的!

然后,您可以使用pandas使用函數read_csvcsv文件作為DataFrame read_csv

import pandas as pd

df = pd.read_csv('csvfilename', delimiter=',')

然后使用ImageDataGenerator類的flow_from_dataframe函數。

這個鏈接有教程

flow_from_dataframe(dataframe, directory=None, x_col='filename', y_col='class', weight_col=None, target_size=(256, 256), color_mode='rgb', classes=None, class_mode='categorical', batch_size= 32、shuffle=True、seed=None、save_to_dir=None、save_prefix=''、save_format='png'、subset=None、interpolation='nearest'、validate_filenames=True)

暫無
暫無

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

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