Как преобразовать папку изображений в пакеты X и Y с помощью Keras? - PullRequest
2 голосов
/ 09 июля 2020

Допустим, у меня есть папка с изображениями, например:

PetData
|
Dog - images
|
Cat - images

Как мне преобразовать ее в формат (x_train, y_train), (x_test, y_test)? Я вижу, что этот формат широко используется с набором данных MNIST, который выглядит примерно так:

mnist = tf.keras.datasets.mnist

(x_train, y_train),(x_test, y_test) = mnist.load_data()

Однако я бы хотел сделать это со своей собственной папкой изображений.

Ответы [ 3 ]

0 голосов
/ 09 июля 2020

mnist.load_data() возвращает два кортежа с содержимым изображений и меток в массивах uint8. Вы должны получить эти массивы, загрузив изображения ваших папок (вы можете использовать такие модули, как PIL.Image, чтобы загрузить X, ваш y - это просто установленные метки, предоставленные именем папки).

PIL.Image используйте пример:

from PIL import Image
import glob

for infile in glob.glob("*.jpg"):
    im = Image.open(infile)

Чтобы разделить тренировку / тест, вы можете использовать sklearn.model_selection.train_test_split:

X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.33)
0 голосов
/ 09 июля 2020

Если вы хотите импортировать изображения из папки на вашем компьютере, вы можете импортировать изображения 1 к 1 из папки во вставке в список.

Формат вашей папки такой, как вы показали:

PetData
|
Dog - images
|
Cat - images

Предположим, что path - это переменная, хранящая адрес папки PetData. Мы будем использовать OpenCV для импорта изображений, но вы также можете использовать другие библиотеки.

data = []
label = []
Files = ['Dog', 'Cat']
label_val = 0

for files in Files:
    cpath = os.path.join(path, files)
    cpath = os.path.join(cpath, 'images')
    for img in os.listdir(cpath):
        image_array = cv2.imread(os.path.join(cpath, img), cv2.IMREAD_COLOR)
        data.append(image_array)
        label.append(label_val)
    label_val = 1

Преобразуйте список в массив numpy.

data = np.asarray(data)
label = np.asarray(label)

После импорта изображений вы можете используйте train_test_split, чтобы разделить данные для обучения и тестирования.

X_train, X_test, y_train, y_test = train_test_split(data, label, test_size=0.33, random_state=42)
0 голосов
/ 09 июля 2020

Предположим, ваш поезд или тестовые изображения находятся в папке PetData , каждый класс в отдельной папке как Dog и Cat . Вы можете использовать ImageDataGenerator для подготовки данных по поезду / тесту, как показано ниже:

from keras import layers
from keras import models

model = models.Sequential()
#define your model
#..........
#......


#Using ImageDataGenerator to read images from directories
from keras.preprocessing.image import ImageDataGenerator
train_dir = "PetData/"
#PetData/Dog/  : dog images
#PetData/Cat/  : cat images
train_datagen = ImageDataGenerator(rescale=1./255)
train_generator = train_datagen.flow_from_directory( train_dir, target_size=(150, 150), batch_size=20)

history = model.fit_generator( train_generator, steps_per_epoch=100, epochs=30) #fit the model using train_generator

Надеюсь, это поможет!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...