繁体   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