ImageDataGenerator — это мощный инструмент в библиотеке Python Keras, который помогает увеличивать изображения и предварительно обрабатывать данные для моделей глубокого обучения. Одним из ключевых методов ImageDataGenerator является flow_from_directory, который позволяет удобно загружать изображения из структуры каталогов и применять различные преобразования. В этой статье мы рассмотрим метод flow_from_directoryи приведем примеры кода для нескольких полезных методов, которые он предлагает.
Понимание flow_from_directory:
Метод flow_from_directoryгенерирует пакеты дополненных/обработанных данных изображения из каталога. Предполагается, что каталог содержит подкаталоги, представляющие разные классы, причем каждый подкаталог содержит соответствующие изображения. Этот метод можно использовать как для обучения, так и для оценки моделей глубокого обучения.
- Базовое использование:
Вот пример использованияflow_from_directoryс минимально необходимыми параметрами:
from keras.preprocessing.image import ImageDataGenerator
datagen = ImageDataGenerator()
train_generator = datagen.flow_from_directory(
directory='path/to/train_directory',
target_size=(224, 224),
batch_size=32,
class_mode='categorical'
)
<старый старт="2">
Параметр
rescaleпозволяет нормализовать значения пикселей изображений. Вот как можно применить масштабирование:datagen = ImageDataGenerator(rescale=1.0/255.0)
- Увеличение изображения.
ImageDataGenerator предоставляет множество возможностей для увеличения изображения, таких как вращение, масштабирование, сдвиг, переворот и многое другое. Вот пример, в котором применяется случайное вращение и масштабирование:
datagen = ImageDataGenerator(rotation_range=30, zoom_range=0.2)
- Перемешивание данных.
Вы можете перемешать порядок изображений с помощью параметраshuffle. Это полезно для введения случайности во время обучения:
datagen = ImageDataGenerator(shuffle=True)
- Создание меток.
По умолчаниюflow_from_directoryгенерирует метки для изображений на основе структуры каталогов. Однако вы также можете предоставить свои собственные метки, используя параметрыclass_modeиclasses:
datagen = ImageDataGenerator(class_mode='binary', classes=['cat', 'dog'])
- Пользовательская предварительная обработка.
Вы можете применить к изображениям пользовательские функции предварительной обработки с помощью параметраpreprocessing_function. Вот пример применения пользовательской функции под названиемpreprocess_image:
def preprocess_image(image):
# Custom preprocessing logic
return image
datagen = ImageDataGenerator(preprocessing_function=preprocess_image)
- Обработка дисбаланса данных.
В сценариях, когда количество изображений в каждом классе несбалансировано, вы можете использовать параметрclass_weight, чтобы назначить разные веса каждому классу во время обучения:
datagen = ImageDataGenerator(class_weight={0: 1.0, 1: 2.0, 2: 0.5})