Обзор

Этот блог посвящен классификатору изображений, который я создал с помощью keras и tensor-flow. Целью этого проекта было создание классификатора изображений, который может различать три разных типа транспортных средств — самолеты, мотоциклы и шхуны (парусники). Набор данных, который я использовал для этого проекта, доступен на kaggle и состоит из около 800 изображений первых самолетов и мотоциклов и около 60 изображений шхуны. Я провел различные тесты на этой модели, чтобы добиться высокой точности.

Я использовал Tensorflow версии 2.9.2 Keras версии 2.9.0

Модель

В этом проекте я использовал модель CNN (Convolutional Neural Network). Эта модель основана на нейронных сетях и является одной из популярных моделей, используемых для обработки изображений. Более подробную информацию о CNN можно найти здесь.

Ход проекта

Сначала я импортировал необходимые библиотеки, жизненно важные для этого проекта. Затем я подключил свой диск Google к этому ноутбуку, чтобы получить доступ к набору данных. Затем я предварительно обработал данные и сохранил данные обучения и тестирования в переменных. После успешной предварительной обработки данных моим следующим шагом было построение модели. Это самый важный шаг этого проекта, потому что я переопределил гиперпараметры методом проб и ошибок и смог добиться успеха после многих неудачных попыток повысить точность модели. После этого я провел анализ точности, получив среднюю точность модели в тесте, а также набор данных для обучения, который оказался хорошим. Наконец, я предварительно обрабатываю невидимое изображение из каталога прогнозов данных для пробы и проверки, способна ли модель генерировать точные выходные данные, и неудивительно, что модель правильно смогла распознать изображение.

Импорт библиотек

import numpy as np
import keras
import tensorflow as tf
from keras.preprocessing.image import ImageDataGeneratorfrom keras.utils import load_img, img_to_array

Монтаж привода

from google.colab import drive
drive.mount('/content/drive', force_remount=True)

Предварительная обработка данных

Предварительная обработка обучающего изображения

train_datagen = ImageDataGenerator(rescale=1./255, shear_range=0.2, zoom_range=0.2, horizontal_flip=True) training_set = train_datagen.flow_from_directory( '/content/drive/MyDrive/data/training_set', target_size=(64, 64), batch_size=32, class_mode='categorical')

Предварительная обработка тестового изображения

test_datagen = ImageDataGenerator(rescale=1./255)
test_set = test_datagen.flow_from_directory(
'/content/drive/MyDrive/data/testing_set',
target_size=(64, 64),
batch_size=32,
class_mode='categorical')

Построение модели

cnn = tf.keras.models.Sequential()

Слой свертки построения

cnn.add(tf.keras.layers.Conv2D(filters=128 , kernel_size=3 , activation='relu' , input_shape=[64,64,3])) #increased the filters from 64 to 128
cnn.add(tf.keras.layers.MaxPool2D(pool_size=2,strides=2))
cnn.add(tf.keras.layers.Conv2D(filters=128 , kernel_size=3 , activation='relu' )) #increased the filters from 64 to 128
cnn.add(tf.keras.layers.MaxPool2D(pool_size=2 , strides=2))
cnn.add(tf.keras.layers.Dropout(0.5))
cnn.add(tf.keras.layers.Flatten())
cnn.add(tf.keras.layers.Dense(units=128, activation='relu'))
cnn.add(tf.keras.layers.Dense(units=3 , activation='softmax')) #changed the value of class from 5 to 3
cnn.compile(optimizer = 'rmsprop' , loss = 'categorical_crossentropy' , metrics = ['accuracy'])
model = cnn.fit(x = training_set , validation_data = test_set , epochs = 30)

Получение средней точности модели на тестовом наборе данных.

import statistics #doing the analysis on the mean accuracy of the test split
mean_accuracy = statistics.mean(model.history["val_accuracy"])
mean_accuracy #calculated the accuracy of train split

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

from keras.preprocessing import image
test_image = keras.utils.load_img('/content/drive/MyDrive/data/predictions/image_0021 6.09.42 PM.jpg',target_size=(64,64))
test_image = keras.utils.img_to_array(test_image)
test_image = np.expand_dims(test_image,axis=0)
result = cnn.predict(test_image)
training_set.class_indices

Проверка вывода модели

#made changes according to the projects requirements of 3 classes instead of 5 in original project. 
if result[0][0]==1:
    print('Motorbikes')
elif result[0][1]==1:
    print('airplanes')
elif result[0][2]==1:
    print('schooner')

печать матрицы результатов

print(result)

Мой вклад

Я упомянул свой вклад в код везде, где я вносил какие-либо изменения в существующий код для оптимизации вывода.

Анализ точности

Я провел анализ точности этой модели, построив график зависимости эпохи от точности. Как видно на этом графике, точность немного повышается за счет изменения количества эпох для обучения модели.

Точность в исходном проекте[1] составляет всего около 70%, однако точность в этом проекте составляет около 90%. Для этого я увеличил количество фильтров в модели с 64 до 128.

В исходном проекте[1] было 5 классов, однако в этом проекте по требованию классы были изменены на 3.

Проблемы

Поскольку у меня нет опыта в машинном обучении и интеллектуальном анализе данных, я боролся в нескольких местах, от подключения диска Google и загрузки набора данных до синтаксиса Python. Понимание того, насколько разные функции двух библиотек, которые я использовал, было для меня сложной задачей. Но самой большой проблемой было повышение точности уже отлаженной модели. После многократного следа и ошибок тонкой настройки гиперпараметров модели мне удалось повысить точность этой модели.

Ссылки

Я использовал проект распознавания изображений | Создание системы распознавания цветов с использованием Python Tensorflow и видеоролика Keras [1] и кода из репозитория GitHub[2] для изучения этого проекта и создания этого проекта. Любая строка кода, в которой нет комментариев относительно моего вклада, копируется из указанного репозитория GitHub [2]. Я также хотел бы упомянуть запись в блоге [5], которая вдохновила меня на написание этого блога.

[1] https://www.youtube.com/watch?app=desktop&v=2gMZC-4WAQ4&ab_channel=SPOTLESSTECH

[2] https://github.com/animesh1012/machineLearning/blob/main/flower_recognition.ipynb

[3] Набор данных — https://www.kaggle.com/datasets/maricinnamon/caltech101-airplanes-motorbikes-schooners

[4] Статья на CNN https://medium.com/r/ url=https%3A%2F%2Ftowardsdatascience.com%2Fconvolutional-neural-networks-explained-9cc5188c4939%23%3A~%3Atext%3DA%2520Convolutional% 2520Neural%2520Network%252C%2520также%2Cbinary%2520Representation%2520of%2520visual%2520data.

[5] https://aunsharekar.wixsite.com/my-site/post/flower-image-classifier