Prezentare generală

Acest blog este despre clasificatorul de imagini pe care l-am construit folosind keras și tenser-flow. Scopul acestui proiect a fost de a construi un clasificator de imagini care să poată diferenția între trei tipuri diferite de vehicule - avioane, motociclete și golă (barci cu pânze). Setul de date pe care l-am folosit pentru acest proiect este disponibil pe kaggle și constă în aproximativ 800 de imagini ale primelor avioane și motociclete și aproximativ 60 de imagini cu goelete. Am efectuat diverse teste pe acest model pentru a obține o precizie ridicată.

Am folosit Tensorflow Versiunea 2.9.2 Keras Versiunea 2.9.0

Model

Am folosit modelul CNN (Convolutional Neural Network) în acest proiect. Acest model se bazează pe rețele neuronale și este unul dintre modelele populare utilizate pentru procesarea imaginilor. Mai multe informații despre CNN pot fi găsite „aici”.

Fluxul Proiectului

Mai întâi am importat bibliotecile necesare vitale pentru acest proiect. Apoi mi-am montat unitatea Google pe acest notebook pentru a accesa setul de date. Apoi, am preprocesat datele și am stocat datele de instruire și testare în variabile. După preprocesarea cu succes a datelor, următorul meu pas a fost să construiesc modelul. Acesta este cel mai important pas al acestui proiect deoarece am redefinit hiperparametrii prin încercare și eroare și am reușit după multe încercări eșuate de a îmbunătăți acuratețea modelului. După aceea, am făcut analiza acurateței obținând acuratețea medie a modelului din test, precum și a setului de date ale trenului, care s-a dovedit a fi bun. În cele din urmă, preprocesez imaginea nevăzută din directorul de predicții al datelor pentru încercare și verific dacă modelul este capabil să genereze rezultate precise și, în mod surprinzător, modelul a fost capabil să recunoască imaginea.

Import de biblioteci

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

Montarea unității

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

Preprocesarea datelor

Antrenament Preprocesarea imaginii

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')

Testați preprocesarea imaginii

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')

Construirea modelului

cnn = tf.keras.models.Sequential()

Construirea stratului de convoluție

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)

Obținerea preciziei medii a modelului pe setul de date de testare.

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

Preprocesează imaginea nevăzută pentru încercare.

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

Verificarea ieșirii modelului

#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')

imprimarea matricei rezultate

print(result)

Contribuția mea

Am menționat contribuția mea în cod oriunde am făcut modificări în codul existent pentru a optimiza rezultatul.

Analiza de precizie

Am făcut analiza acurateței acestui model prin trasarea acestei diagrame Epoch vs Accuracy. După cum se poate observa în acest grafic, precizia este ușor crescută prin modificarea numărului de epoci pentru antrenamentul modelului.

Precizia în proiectul original[1] este de numai aproximativ 70%, cu toate acestea, acuratețea în acest proiect este de aproximativ 90%. Pentru a realiza acest lucru, am crescut filtrele din model de la 64 la 128.

În proiectul inițial[1] erau 5 clase, totuși în acest proiect, conform cerințelor, clasele au fost schimbate în 3.

Provocări

Deoarece nu am cunoștințe în învățarea automată și extragerea datelor, m-am luptat în mai multe locuri, de la montarea unității Google și încărcarea setului de date în sintaxa python. Înțelegând cât de diferite funcționează cele două biblioteci pe care le-am folosit, totul a fost o provocare pentru mine. Dar cea mai mare provocare a fost de a îmbunătăți acuratețea modelului deja reglat. După mai multe trasee și erori de reglare fină a hiper parametrilor modelului, am reușit să măresc acuratețea acestui model.

Referințe

Am folosit proiectul de recunoaștere a imaginii | Construirea unui sistem de recunoaștere a florilor folosind Python Tensorflow și videoclipul Keras [1] și codul din depozitul GitHub[2] pentru a învăța acest proiect și a realiza acest proiect. Orice linie de cod care nu are un comentariu cu privire la contribuția mea este copiată din depozitul GitHub referit [2]. Aș dori să menționez și postarea de pe blog [5], care m-a inspirat să scriu acest blog.

[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] Set de date — https://www.kaggle.com/datasets/maricinnamon/caltech101-airplanes-motorbikes-schooners

[4] Articol pe CNN https://medium.com/r/ url=https%3A%2F%2Ftowardsdatascience.com%2Fconvolutional-neural-networks-explained-9cc5188c4939%23%3A~%3Atext%3DA%2520Convolutional% 2520Neural%2520Network%252C%2520also%2Cbinary%2520representation%2520of%2520visual%2520data.

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