TensorFlow je svestran alat za kreiranje modela mašinskog učenja.
U ovom postu ćemo pogledati kako kreirati sistem za prepoznavanje lica sa TensorFlow, okvirom za mašinsko učenje otvorenog koda. Proći ćemo preko osnovnih procesa u stvaranju uspješnog sistema za prepoznavanje lica, od prikupljanja i pripreme podataka do obuke i procjene modela.
Dobit ćete iskustvo iz prve ruke s TensorFlow-om za kreiranje prepoznavanja lica uz pomoć isječaka koda i primjera iz stvarnog svijeta. Slobodno nas pratite kako nastavljamo.
Uvod u TensorFlow
TensorFlow je besplatna biblioteka otvorenog koda. To je simbolički matematički alat koji koristi protok podataka i diferencibilno programiranje. Pomoću njega možete rješavati niz zadataka, uključujući duboke neuronska mreža obuka.
TensorFlow je moćan i prilagodljiv. Isto tako, odličan je alat za razvoj i implementaciju modela mašinskog učenja. Možete izgraditi komplikovane modele sa nekoliko slojeva i tenzorskih operacija. Takođe, unapred izgrađeni modeli u biblioteci mogu se fino podesiti za specifične potrebe.
Nadalje, TensorFlow ima ogromnu zajednicu korisnika koja se širi. Dakle, postoji mnoštvo informacija i pomoći za pojedince koji su novi na platformi.
TensorFlow je popularan za mašinsko učenje dijelom zato što pruža tok posla od kraja do kraja. Dakle, možete lako konstruisati, obučiti i implementirati modele. Pruža alate i strategije za poboljšanje i skaliranje modela kako bi odgovarali specifičnim zahtjevima. Ona varira od prethodne obrade podataka do implementacije modela.
Šta je prepoznavanje lica?
Prepoznavanje lica je a računarski vid zadatak koji identifikuje nečiju identifikaciju na osnovu njenog 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 upotreba, uključujući sigurnosne sisteme, organizaciju fotografija i biometrijsku autentifikaciju.
Preciznost algoritama za prepoznavanje lica značajno se povećala posljednjih godina kao rezultat napretka u mašinskom učenju.
Uvoz potrebnih biblioteka
Prije nego što započnemo bilo što, moramo uvesti biblioteke potrebne za naš model. Tensorflow (tf) se uvozi i koristi za kreiranje i obuku modela. <(p>
“numpy” obavlja matematičke proračune i obradu podataka.
“matplotlib.pyplot” se uvozi kao plt i koristi se za crtanje podataka i vizualizacije.
Konačno, “fetch lfw people” se uvozi iz sklearna. skupova podataka i koristi se za učitavanje skupa podataka za prepoznavanje lica. Ova funkcija je dio scikit-learn alata. Zahvaljujući ovoj funkciji nismo morali da učitavamo još jedan skup podataka. Ovo je već ugrađeno u sckit-learn.
I, pruža vam pristup širokom spektru skupovi podataka za mašinsko učenje aplikacije. U ovom scenariju koristimo metodu dohvaćanja lfw people da bismo dohvatili skup podataka „Označena lica u divljini“ (LFW). Sadrži fotografije lica ljudi, kao i oznake koje idu uz njih.
Ove biblioteke su ključ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
Prethodna obrada i učitavanje skupa podataka za prepoznavanje lica
U ovom dijelu koristimo funkciju “dohvati lfw ljudi” za prethodnu obradu podataka o prepoznavanju lica. Prvo, koristimo dohvati lfw ljudi s opcijom “min lica po osobi=60”. To znači da želimo uključiti samo osobe u skup podataka koje imaju najmanje 60 fotografija. Stoga osiguravamo da naš model ima adekvatne podatke za učenje. Takođe, ovo smanjuje opasnost od prenamjene.
Podaci i oznake iz objekta lica se zatim izdvajaju i dodeljuju varijablama X i y. X hol.
Sada smo spremni za obuku našeg modela prepoznavanja lica koristeći prethodno obrađene podatke i naljepnice.
faces = fetch_lfw_people(min_faces_per_person=60)
X = faces.data
y = faces.target
target_names = faces.target_names
Podjela skupova za obuku i testove
U ovom koraku, podijelili smo naš skup podataka o prepoznavanju lica na dvije polovine koristeći metodu podjele testa vlaka iz odabira sklearn.model. Cilj ove podjele je procijeniti performanse našeg modela nakon treninga
Funkcija split testa vlaka prihvata kao ulaz podatke X i oznake y. I, dijeli ih na grupe za obuku i testove. U ovom primjeru biramo test size=0.2. Ovo implicira da će se 20% podataka koristiti kao testni set, a 80% kao skup za obuku. Nadalje, koristimo nasumično 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 predobrade podataka je da ih pripremi za ulazak u model. Podaci su prethodno obrađeni u ovom kodu dijeljenjem svake podatkovne točke sa 255.
Šta nas je motivisalo da to postignemo? Normalizacija je postupak predobrade koji se koristi u mašinskom učenju kako bi se garantovalo da su sve karakteristike na istoj skali. U ovom scenariju, dijeljenje sa 255 skalira podatke na raspon od 0 do 1, što je uobičajeni korak normalizacije podataka slike.
Ovo ubrzava konvergenciju modela i može povećati njegove performanse.
X_train = X_train / 255.0
X_test = X_test / 255.0
Kreiranje moda
Želimo da identifikujemo osobu čije se lice pojavljuje na slici. U ovom slučaju koristit ćemo potpuno povezanu mrežu, često poznatu kao gusta mreža. Riječ je o umjetnoj neuronskoj mreži koja je korištena za kreiranje modela.
Umjetne neuronske mreže su modelirane prema načinu na koji ljudski mozak funkcionira i kako je organiziran. Sastoje se od čvorova za obradu informacija ili neurona koji su povezani. 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 uneli u sledeći sloj, ulazni podaci se izravnavaju u prvom sloju u jednodimenzionalni niz. Prema tome, 128 i 64 neurona u sljedeća dva sloja su potpuno povezani.
ReLU aktivacijska funkcija je jedinstvena aktivacijska funkcija koju koriste ovi slojevi. Uz to, možemo natjerati model da nauči nelinearne korelacije između ulaza i izlaza. Posljednji sloj koristi softmax funkciju aktivacije za predviđanje. I, to je potpuno povezan sloj sa onoliko neurona koliko postoji 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 kompajlira pomoću funkcije “kompiliraj”. Moramo pripremiti model za obuku. Dakle, definirat ćemo optimizator, funkciju gubitka i metriku koja će se koristiti za procjenu modela.
Tokom obuke, optimizator je zadužen za promjenu parametara modela. “Adam” optimizator je popularna tehnika optimizacije dubokog učenja.
Koristimo funkciju gubitka za procjenu performansi modela na podacima o obuci. Budući da su ciljne oznake cijeli brojevi koji odražavaju klasu slike, a ne vektori koji se kodiraju u jednom vrućem obliku, funkcija gubitka “sparse categorical crossentropy” je povoljna.
Konačno, definiramo metriku za procjenu modela, u ovom slučaju, „tačnost“.
model.compile(optimizer='adam', loss='sparse_categorical_crossentropy', metrics=['accuracy'])
Model Training
Koristit ćemo funkciju “fit” za obuku modela.
Pružit ćemo podatke o obuci (X train) i povezane oznake (y train), kao i postaviti broj epoha (iteracija) za pokretanje kao 10. Procedura obuke modificira težine modela kako bi se smanjio gubitak (razlika između predviđene i stvarne oznake) i poboljšati tačnost podataka o obuci.
model.fit(X_train, y_train, epochs=10)
Model Evaluation
Sada, moramo procijeniti obučeni model na podacima testa. Koristimo gubitak testa, a tačnost testa se koristi za procjenu performansi modela. Na testu X test podataka i test oznaka y, moramo pozvati “funkciju model.evaluate”
Funkcija daje točnost testa i gubitak testa. Varijable test gubitak i test točnost, respektivno, sadrže ove vrijednosti. Konačno, koristimo funkciju “print” za ispis tač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 podatke testa, algoritam pravi predviđanja. Kada se testni podaci proslijede metodi “model.predict”, ona daje niz predviđanja za svaku sliku u skupu testova.
Ime ciljne klase za svaku sliku se zatim preuzima sa liste "imena cilja" koristeći funkciju "np.argmax" da bi se identifikovao indeks sa najvećom predviđenom verovatnoćom. Ovaj indeks se zatim koristi za određivanje predviđene klase za svaku sliku.
Koristeći razumijevanje liste, sva predviđanja u nizu "predviđenja" su podvrgnuta ovoj metodi, što rezultira listom "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 bismo ocijenili koliko dobro model radi, bit će prikazano prvih 10 fotografija i njihova predviđanja. On će iscrtati fotografije u sivim tonovima i prikazati i stvarnu klasu slike i klasu koju je model predvideo koristeći modul matplotlib.pyplot.
Funkciju “imshow” koristi for petlja za iscrtavanje svake od prvih 10 fotografija testnog skupa. Imena cilja[y test[i]] i predviđene klase[i] se koriste za određivanje stvarne klase slike i predviđene klase, respektivno. Naslovi svake parcele su tada naznačeni ovim klasifikacijama.
Konačno, dijagram se prikazuje pomoću plt.show() metode.
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 kompletno i fleksibilno okruženje za kreiranje modela mašinskog učenja.
Finim podešavanjem modela kako bi zadovoljio određene zahtjeve ili dodavanjem novih dostignuća u mašinskom učenju, tačnost modela se može još više povećati.
TensorFlow i prepoznavanje lica će se vjerovatno sve više koristiti u industrijama poput sigurnosnih sistema, biometrijske autentifikacije i zdravstvene zaštite u budućnosti. Uskoro ćemo vidjeti fascinantne inovacije.
Ostavite odgovor