Как построить простой классификатор изображений на основе CNN с помощью Keras

  • 1 Введение
    • 1.1 Что такое конволюционные нейронные сети (CNN)?
    • 1.2 Задача классификации
    • 1.3 Постановка задачи
    • 1.4 Подход
  • 2 Код
    • 2.1 Импорт пакетов для работы с данными
    • 2.2 Загрузка данных
    • 2.3 Построение CNN
    • 2.4 Обучение CNN
    • 2.4 Оценка производительности CNN
    • 2.5 Сохранение модели
    • 2.6 Загрузка модели
    • 2.7 Создание образца представления
  • Похожие статьи
  • Ссылки

1 Введение

1.1 Что такое конволюционные нейронные сети (CNN)?

Конволюционные нейронные сети (CNN) — это класс искусственных нейронных сетей, который стал доминирующим в различных задачах компьютерного зрения и вызывает интерес в различных областях.

Сверточная нейронная сеть состоит из нескольких строительных блоков, таких как слои свертки, слои объединения и полностью связанные слои, и предназначена для автоматического и адаптивного обучения пространственной иерархии признаков с помощью алгоритма обратного распространения.

CNN хорошо работает в задачах компьютерного зрения, таких как классификация изображений, обнаружение объектов, распознавание образов и т.д. Другие нейронные сети, используемые для решения подобных задач, включают рекуррентные нейронные сети (RNN), долговременную память (LSTM), искусственные нейронные сети (ANN) и т.д.,

1.2 Задача классификации

В этой статье я попытаюсь решить задачу HP Unlocked. Это задача номер четыре.

Вы можете получить данные с указанного выше сайта, или вы также можете форкнуть файлы из моего репозитория GitHub — Unlocked_Challenge_4 и начать работать над ней напрямую.

1.3 Постановка задачи

Это задача бинарной классификации. Задача состоит в том, чтобы построить модель машинного обучения для классификации изображений «La Eterna», вида цветка.

1.4 Подход

Я буду использовать модель CNN для получения базовой оценки. По первоначальному анализу, набор данных довольно мал для задачи глубокого обучения. Я проведу некоторые дополнения изображений, чтобы увеличить набор данных.

В следующих статьях я также рассмотрю настройку гиперпараметров и трансферное обучение с использованием VGG19.

2 Код

Для выполнения кода я использовал локальный экземпляр Jupyter lab. Окончательный вариант кода можно найти здесь.

2.1 Импорт пакетов для работы с данными

import pandas as pd
import numpy as np
import os
import cv2
import matplotlib.pyplot as plt
import warnings
Войти в полноэкранный режим Выход из полноэкранного режима
import tensorflow as tf
from tensorflow import keras
from tensorflow.keras import layers
from tensorflow.keras.preprocessing.image import ImageDataGenerator
import keras_tuner as kt
Войти в полноэкранный режим Выход из полноэкранного режима
print("Num GPUs Available: ", len(tf.config.list_physical_devices('GPU')))
Войти в полноэкранный режим Выход из полноэкранного режима
# Set the seed value for experiment reproducibility.
seed = 1842
tf.random.set_seed(seed)
np.random.seed(seed)
# Turn off warnings for cleaner looking notebook
warnings.simplefilter('ignore')
Войти в полноэкранный режим Выход из полноэкранного режима

2.2 Загрузка данных

#define image dataset
# Data Augmentation
image_generator = ImageDataGenerator(
        rescale=1/255,
        rotation_range=10, # rotation
        width_shift_range=0.2, # horizontal shift
        height_shift_range=0.2, # vertical shift
        zoom_range=0.2, # zoom
        horizontal_flip=True, # horizontal flip
        brightness_range=[0.2,1.2],# brightness
        validation_split=0.2,)

#Train & Validation Split
train_dataset = image_generator.flow_from_directory(batch_size=32,
                                                 directory='data_cleaned/Train',
                                                 shuffle=True,
                                                 target_size=(224, 224),
                                                 subset="training",
                                                 class_mode='categorical')

validation_dataset = image_generator.flow_from_directory(batch_size=32,
                                                 directory='data_cleaned/Train',
                                                 shuffle=True,
                                                 target_size=(224, 224),
                                                 subset="validation",
                                                 class_mode='categorical')

#Organize data for our predictions
image_generator_submission = ImageDataGenerator(rescale=1/255)
submission = image_generator_submission.flow_from_directory(
                                                 directory='data_cleaned/scraped_images',
                                                 shuffle=False,
                                                 target_size=(224, 224),
                                                 class_mode=None)
Войти в полноэкранный режим Выйти из полноэкранного режима

2.3 Построение CNN

Не беспокойтесь о том, как создается сеть. Мы можем использовать настройку гиперпараметров, чтобы лучше настроить слои и получить стабильную сеть. Я расскажу об этом в следующей статье. Если вы хотите узнать об этом больше, ознакомьтесь с документацией Keras.

Убедитесь, что вы не перепутали формы входа и выхода. Здесь входная форма имеет вид (224, 224, 3). Это означает, что высота, ширина и каналы изображения равны соответственно 224, 224 и 3 (3 — это красный, зеленый и синий каналы цветного изображения).

model = keras.models.Sequential([
    keras.layers.Conv2D(32, (3, 3), activation='relu', input_shape = [224, 224,3]),
    keras.layers.MaxPooling2D(),
    keras.layers.Conv2D(64, (2, 2), activation='relu'),
    keras.layers.MaxPooling2D(),
    keras.layers.Conv2D(64, (2, 2), activation='relu'),
    keras.layers.Flatten(),
    keras.layers.Dense(100, activation='relu'),
    keras.layers.Dense(2, activation ='softmax')
])
Вход в полноэкранный режим Выход из полноэкранного режима

Теперь мы можем скомпилировать подготовленную модель. Обратите внимание, что мы также используем обратный вызов, чтобы остановить обучение раньше времени. В данном случае обратный вызов будет срабатывать, если потери при валидации остаются неизменными или увеличиваются в течение более 3 эпох.

model.compile(optimizer='adam',
             loss = 'binary_crossentropy',
             metrics=['accuracy'])

callback = keras.callbacks.EarlyStopping(monitor='val_loss',
                                            patience=3,
                                            restore_best_weights=True)
Войти в полноэкранный режим Выход из полноэкранного режима

2.4 Обучение CNN

model.fit(train_dataset, epochs=20, validation_data=validation_dataset, callbacks=callback)
Вход в полноэкранный режим Выход из полноэкранного режима

2.4 Оценка производительности CNN

loss, accuracy = model.evaluate(validation_dataset)
print("Loss: ", loss)
print("Accuracy: ", accuracy)
Вход в полноэкранный режим Выйти из полноэкранного режима

2.5 Сохранение модели

model.save('cnn-model')
Войти в полноэкранный режим Выйти из полноэкранного режима

2.6 Загрузка модели

model = keras.models.load_model('cnn-model')
Войти в полноэкранный режим Выйти из полноэкранного режима

2.7 Создание образца представления

onlyfiles = [f.split('.')[0] for f in os.listdir(os.path.join('data_cleaned/scraped_images/image_files')) if os.path.isfile(os.path.join(os.path.join('data_cleaned/scraped_images/image_files'), f))]
submission_df = pd.DataFrame(onlyfiles, columns =['images'])
submission_df[['la_eterna', 'other_flower']] = model.predict(submission)
submission_df.head()
Войти в полноэкранный режим Выход из полноэкранного режима
submission_df.to_csv('submission_file.csv', index = False)
Войти в полноэкранный режим Выход из полноэкранного режима

Похожие статьи

  • Установка TensorFlow на M1 MacBook Air с GPU (Metal)
  • Запуск Ubuntu на M1 Macbook Air с помощью UTM
  • Анализ и классификация набора данных Mushroom в python
  • Как открыть sublime text из командной строки windows

Ссылки

  • https://www.tensorflow.org/tutorials/images/data_augmentation
  • https://www.analyticsvidhya.com/blog/2020/02/learn-image-classification-cnn-convolutional-neural-networks-3-datasets/
  • https://www.youtube.com/watch?v=l-NAT4H4384

Оцените статью
Procodings.ru
Добавить комментарий