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
[5] https://aunsharekar.wixsite.com/my-site/post/flower-image-classifier