TensorFlow je svestran alat za stvaranje modela strojnog učenja.
U ovom ćemo postu pogledati kako stvoriti sustav za prepoznavanje lica s TensorFlowom, okvirom za strojno učenje otvorenog koda. Proći ćemo kroz bitne procese u stvaranju uspješnog sustava za prepoznavanje lica, od prikupljanja i pripreme podataka do obuke i procjene modela.
Dobit ćete iskustvo iz prve ruke s TensorFlowom za stvaranje prepoznavanja lica uz pomoć isječaka koda i primjera iz stvarnog svijeta. Slobodno nas pratite dok nastavljamo.
Uvod u TensorFlow
TensorFlow je besplatna biblioteka otvorenog koda. To je simbolički matematički alatni okvir koji koristi tijek podataka i diferencijabilno programiranje. S njim se možete nositi s nizom zadataka, uključujući duboke neuronska mreža trening.
TensorFlow je moćan i prilagodljiv. Isto tako, izvrstan je alat za razvoj i implementacija modela strojnog učenja. Možete izgraditi komplicirane modele s nekoliko slojeva i tenzorskih operacija. Također, unaprijed izgrađeni modeli u biblioteci mogu se fino podesiti za specifične potrebe.
Nadalje, TensorFlow ima ogromnu korisničku zajednicu koja se širi. Dakle, postoji mnoštvo informacija i pomoći za pojedince koji su novi na platformi.
TensorFlow je popularan za stroj za učenje dijelom zato što pruža tijek rada od kraja do kraja. Dakle, možete jednostavno konstruirati, trenirati i implementirati modele. Pruža alate i strategije za poboljšanje i skaliranje modela kako bi odgovarali specifičnim zahtjevima. Razlikuje se od prethodne obrade podataka do postavljanja modela.
Što je prepoznavanje lica?
Prepoznavanje lica je a računalni vid zadatak koji identificira identifikaciju osobe na temelju njezina lica. Ova tehnika prepoznaje crte lica, kao što su oblik i tekstura očiju, nosa i usta.
I uspoređuje ih s bazom podataka poznatih lica kako bi identificirao podudaranje. Prepoznavanje lica ima nekoliko namjena, uključujući sigurnosne sustave, organizaciju fotografija i biometrijsku autentifikaciju.
Točnost algoritama za prepoznavanje lica značajno se povećala posljednjih godina kao rezultat otkrića u strojnom učenju.
Uvoz potrebnih biblioteka
Prije pokretanja bilo čega, moramo uvesti biblioteke potrebne za naš model. Tensorflow (tf) se uvozi i koristi za izradu i obuku modela. <(p>
“numpy” izvodi matematičke izračune i obradu podataka.
"matplotlib.pyplot" se uvozi kao plt i koristi za grafikone podataka i vizualizacije.
Konačno, "fetch lfw people" je uvezen iz sklearn. skupova podataka i koristi se za učitavanje skupa podataka o prepoznavanju lica. Ova je funkcija dio alata scikit-learn. Zahvaljujući ovoj funkciji nismo morali učitati još jedan skup podataka. Ovo je već ugrađeno u sckit-learn.
I daje vam pristup širokom rasponu skupovi podataka za strojno učenje aplikacije. U ovom scenariju koristimo metodu dohvaćanja lfw ljudi za dohvaćanje skupa podataka "Označena lica u divljini" (LFW). Sadrži fotografije lica ljudi kao i oznake koje idu uz njih.
Ove biblioteke su kritične u implementaciji i evaluaciji našeg modela prepoznavanja lica.
import tensorflow as tf
import numpy as np
import matplotlib.pyplot as plt from sklearn.datasets
import fetch_lfw_people
Predobrada i učitavanje skupa podataka za prepoznavanje lica
U ovom dijelu koristimo funkciju "fetch lfw people" za prethodnu obradu podataka o prepoznavanju lica. Prvo koristimo dohvaćanje lfw ljudi s opcijom “min lica po osobi=60”. To znači da u skup podataka želimo uključiti samo osobe koje imaju najmanje 60 fotografija. Stoga osiguravamo da naš model ima odgovarajuće podatke za učenje. Također, ovo smanjuje opasnost od prekomjernog opremanja.
Podaci i oznake iz objekta lica zatim se izdvajaju i dodjeljuju varijablama X i y. X hol.
Sada smo spremni trenirati naš model prepoznavanja lica pomoću prethodno obrađenih podataka i oznaka.
faces = fetch_lfw_people(min_faces_per_person=60)
X = faces.data
y = faces.target
target_names = faces.target_names
Razdvajanje kompleta za obuku i testiranje
U ovom koraku dijelimo naš skup podataka o prepoznavanju lica na dvije polovice koristeći metodu dijeljenja testa vlaka iz sklearn.model selection. Cilj ove podjele je procijeniti performanse našeg modela nakon treninga
Funkcija podjele testa vlaka prihvaća kao ulazne podatke X i oznake y. I dijeli ih na setove za obuku i testove. Odabrali smo veličinu testa=0.2 u ovom primjeru. To znači da će se 20% podataka koristiti kao skup za testiranje, a 80% kao skup za obuku. Nadalje, koristimo slučajno stanje=42 kako bismo osigurali da se podaci dosljedno dijele svaki put kada se kod izvodi.
from sklearn.model_selection import train_test_split
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
Priprema podataka
Svrha predprocesiranja podataka je njihova priprema za unos u model. Podaci se prethodno obrađuju u ovom kodu dijeljenjem svake podatkovne točke s 255.
Što nas je motiviralo da to postignemo? Normalizacija je postupak predprocesiranja koji se koristi u strojnom učenju kako bi se zajamčilo da su sve značajke na istoj ljestvici. U ovom scenariju, dijeljenje s 255 skalira podatke na raspon od 0 do 1, što je uobičajeni korak normalizacije slikovnih podataka.
To ubrzava konvergenciju modela i može povećati njegovu izvedbu.
X_train = X_train / 255.0
X_test = X_test / 255.0
Stvaranje moda
Želimo identificirati osobu čije se lice pojavljuje na slici. U ovom slučaju koristit ćemo potpuno povezanu mrežu, često poznatu kao gusta mreža. Radi se o umjetnoj neuronskoj mreži koja je korištena za izradu modela.
Umjetne neuronske mreže modelirane su prema tome kako ljudski mozak funkcionira i kako je organiziran. Sastoje se od povezanih čvorova za obradu informacija ili neurona. Svaki neuron u sloju u gustoj mreži povezan je sa svakim neuronom u sloju iznad njega.
Model ima četiri sloja u ovom kodu. Da bi se unijeli u sljedeći sloj, ulazni podaci se spljošte u prvom sloju u jednodimenzionalni niz. Prema tome, 128 i 64 neurona u sljedeća dva sloja potpuno su povezani.
Funkcija aktivacije ReLU jedinstvena je funkcija aktivacije koju koriste ovi slojevi. Na taj način možemo postići da model nauči nelinearne korelacije između ulaza i izlaza. Posljednji sloj koristi funkciju aktivacije softmax za izradu predviđanja. I to je potpuno povezan sloj s onoliko neurona koliko ima potencijalnih klasa.
model = tf.keras.models.Sequential([
tf.keras.layers.Flatten(input_shape=(62 * 47,)),
tf.keras.layers.Dense(128, activation='relu'),
tf.keras.layers.Dense(64, activation='relu'),
tf.keras.layers.Dense(len(target_names), activation='softmax')
])
Sastavljanje modela
Model se kompilira pomoću funkcije “compile”. Moramo pripremiti model za obuku. Dakle, definirat ćemo optimizator, funkciju gubitka i metriku koja će se koristiti za procjenu modela.
Tijekom obuke optimizator je zadužen za promjenu parametara modela. Optimizator "adam" popularna je tehnika optimizacije dubokog učenja.
Koristimo funkciju gubitka za procjenu izvedbe modela na podacima o obuci. Budući da su ciljne oznake cijeli brojevi koji odražavaju klasu slike, a ne jednokratno kodirani vektori, funkcija gubitka "rijetke kategoričke krosentropije" je povoljna.
Konačno, definiramo metriku za procjenu modela, u ovom slučaju, "točnost".
model.compile(optimizer='adam', loss='sparse_categorical_crossentropy', metrics=['accuracy'])
Obuka modela
Koristit ćemo funkciju "fit" za treniranje modela.
Pružit ćemo podatke o obuci (X niz) i povezane oznake (y niz), kao i postaviti broj epoha (iteracija) koje će se izvoditi na 10. Postupak obuke modificira težine modela kako bi se smanjio gubitak (razlika između predviđene i stvarne oznake) i poboljšati točnost podataka o obuci.
model.fit(X_train, y_train, epochs=10)
Evaluacija modela
Sada moramo procijeniti uvježbani model na testnim podacima. Za procjenu performansi modela koristimo gubitak testa i točnost testa. Na testnim podacima X test i testnim oznakama y test, moramo pozvati "funkciju model.evaluate"
Funkcija ispisuje točnost testa i gubitak testa. Varijable gubitak testa i točnost testa sadrže ove vrijednosti. Konačno, koristimo funkciju "print" za ispis točnosti testa.
test_loss, test_accuracy = model.evaluate(X_test, y_test)
print("Test accuracy:", test_accuracy)
Predviđanje klasa i dobivanje predviđenih klasa
Koristeći model obuke i testne podatke, algoritam daje predviđanja. Kada se testni podaci proslijede metodi "model.predict", ona daje niz predviđanja za svaku sliku u testnom skupu.
Naziv ciljne klase za svaku sliku zatim se dohvaća s popisa "ciljnih imena" pomoću funkcije "np.argmax" za identifikaciju indeksa s najvećom predviđenom vjerojatnošću. Ovaj se indeks zatim koristi za određivanje predviđene klase za svaku sliku.
Koristeći razumijevanje popisa, sva predviđanja u nizu "predviđanja" podliježu ovoj metodi, što rezultira popisom "predviđenih klasa".
predictions = model.predict(X_test)
predicted_classes = [target_names[np.argmax(prediction)] for prediction in predictions]
Vizualizacija predviđanja
Sada možemo vidjeti kako naš model izgleda.
Kako bi se procijenilo koliko dobro model radi, bit će prikazano prvih 10 fotografija i njihova predviđanja. Iscrtat će fotografije u sivim tonovima i prikazati i stvarnu klasu slike i klasu koju predviđa model pomoću modula matplotlib.pyplot.
Funkciju "imshow" koristi petlja for za iscrtavanje svake od prvih 10 fotografija testnog skupa. Ciljna imena[y test[i]] i predviđene klase[i] koriste se za određivanje stvarne i predviđene klase slike. Naslovi svake parcele zatim su označeni ovim klasifikacijama.
Konačno, dijagram se prikazuje pomoću metode plt.show().
for i in range(10):
plt.imshow(X_test[i].reshape(62, 47), cmap='gray')
plt.title(f"True: {target_names[y_test[i]]}, Predicted:{predicted_classes[i]}")
plt.show()
Zamotati
TensorFlow nudi potpuno i fleksibilno okruženje za stvaranje modela strojnog učenja.
Finim podešavanjem modela kako bi zadovoljio određene zahtjeve ili dodavanjem novih dostignuća u strojnom učenju, točnost modela može se još više povećati.
TensorFlow i prepoznavanje lica vjerojatno će se sve više koristiti u industrijama kao što su sigurnosni sustavi, biometrijska autentifikacija i zdravstvo u budućnosti. Uskoro ćemo vidjeti fascinantne inovacije.
Ostavi odgovor