Обзор
Этот блог посвящен классификатору изображений, который я создал с помощью 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
[5] https://aunsharekar.wixsite.com/my-site/post/flower-image-classifier