TensorFlow je vsestransko orodje za ustvarjanje modelov strojnega učenja.
V tej objavi si bomo ogledali, kako ustvariti sistem za prepoznavanje obrazov s TensorFlow, odprtokodnim ogrodjem za strojno učenje. Preučili bomo bistvene procese pri ustvarjanju uspešnega sistema za prepoznavanje obrazov, od zbiranja in priprave podatkov do usposabljanja in ocenjevanja modela.
Dobili boste izkušnjo iz prve roke s TensorFlow za ustvarjanje prepoznave obraza s pomočjo izrezkov kode in primerov iz resničnega sveta. Vabljeni, da nam sledite, ko nadaljujemo.
Uvod v TensorFlow
TensorFlow je brezplačna in odprtokodna knjižnica. Je simbolična matematična orodjarna, ki uporablja pretok podatkov in diferencialno programiranje. Z njim lahko opravite vrsto nalog, vključno z globokimi nevronska mreža usposabljanje.
TensorFlow je močan in prilagodljiv. Prav tako je odlično orodje za razvoj in uvajanje modelov strojnega učenja. Ustvarite lahko zapletene modele z več plastmi in tenzorskimi operacijami. Prav tako je mogoče vnaprej zgrajene modele v knjižnici natančno nastaviti za posebne potrebe.
Poleg tega ima TensorFlow ogromno in rastočo skupnost uporabnikov. Torej obstaja obilica informacij in pomoči za posameznike, ki so novi na platformi.
TensorFlow je priljubljen za strojno učenje delno zato, ker zagotavlja potek dela od konca do konca. Tako lahko enostavno konstruirate, učite in uvajate modele. Zagotavlja orodja in strategije za izboljšanje in prilagajanje modelov, da ustrezajo posebnim zahtevam. Razlikuje se od predhodne obdelave podatkov do uvajanja modela.
Kaj je prepoznavanje obraza?
Prepoznavanje obraza je a računalniški vid naloga, ki prepozna identifikacijo osebe na podlagi njenega obraza. Ta tehnika prepozna poteze obraza, kot so oblika in tekstura oči, nosu in ust.
In jih primerja z bazo podatkov znanih obrazov, da prepozna ujemanje. Prepoznavanje obraza ima več uporab, vključno z varnostnimi sistemi, organizacijo fotografij in biometrično avtentikacijo.
Natančnost algoritmov za prepoznavanje obrazov se je v zadnjih letih močno povečala zaradi preboja v strojnem učenju.
Uvoz potrebnih knjižnic
Preden kar koli začnemo, moramo uvoziti knjižnice, potrebne za naš model. Tensorflow (tf) je uvožen in uporabljen za ustvarjanje in usposabljanje modela. <(p>
»numpy« izvaja matematične izračune in obdelavo podatkov.
»matplotlib.pyplot« se uvozi kot plt in uporablja za prikaz podatkov in vizualizacije.
Končno je »fetch lfw people« uvožen iz sklearn. nabore podatkov in se uporablja za nalaganje nabora podatkov za prepoznavanje obraza. Ta funkcija je del kompleta orodij scikit-learn. Zahvaljujoč tej funkciji nam ni bilo treba nalagati drugega nabora podatkov. To je že vgrajeno v sckit-learn.
In vam omogoča dostop do širokega nabora nabori podatkov za strojno učenje aplikacije. V tem scenariju uporabljamo metodo fetch lfw people za pridobitev nabora podatkov »Labeled Faces in the Wild« (LFW). Vsebuje fotografije obrazov ljudi in oznake, ki jih spremljajo.
Te knjižnice so kritične pri izvajanju in ocenjevanju našega modela prepoznavanja obrazov.
import tensorflow as tf
import numpy as np
import matplotlib.pyplot as plt from sklearn.datasets
import fetch_lfw_people
Predhodna obdelava in nalaganje nabora podatkov za prepoznavanje obraza
V tem delu uporabljamo funkcijo »fetch lfw people« za predhodno obdelavo podatkov za prepoznavanje obraza. Najprej uporabimo funkcijo »Fetch lfw people« z možnostjo »najmanj obrazov na osebo=60«. To pomeni, da želimo v nabor podatkov vključiti samo osebe, ki imajo vsaj 60 fotografij. Zato zagotavljamo, da ima naš model ustrezne podatke za učenje. To tudi zmanjša nevarnost preobremenitve.
Podatki in oznake iz objekta obrazov se nato ekstrahirajo in dodelijo spremenljivkama X in y. X hol.
Zdaj smo pripravljeni usposobiti naš model za prepoznavanje obraza z uporabo vnaprej obdelanih podatkov in oznak.
faces = fetch_lfw_people(min_faces_per_person=60)
X = faces.data
y = faces.target
target_names = faces.target_names
Razdelitev vadbenih in testnih nizov
V tem koraku smo naš nabor podatkov o prepoznavanju obrazov razdelili na dve polovici z uporabo metode razdelitve testa vlaka iz sklearn.model selection. Cilj te delitve je oceniti uspešnost našega modela po treningu
Funkcija razdelitve testa vlaka sprejme kot vhodne podatke X in oznake y. In jih razdeli na nize za usposabljanje in teste. V tem primeru izberemo velikost testa=0.2. To pomeni, da bo 20 % podatkov uporabljenih kot testni niz in 80 % kot trening. Poleg tega uporabljamo naključno stanje=42, da zagotovimo, da so podatki dosledno razdeljeni vsakič, ko se izvede koda.
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)
Priprava podatkov
Namen predprocesiranja podatkov je, da jih pripravimo za vnos v model. Podatki so v tej kodi predhodno obdelani tako, da se vsaka podatkovna točka deli z 255.
Kaj nas je motiviralo, da smo to dosegli? Normalizacija je postopek predprocesiranja, ki se uporablja pri strojnem učenju, da se zagotovi, da so vse funkcije na istem merilu. V tem scenariju deljenje z 255 poveča podatke na obseg od 0 do 1, kar je običajen korak normalizacije slikovnih podatkov.
To pospeši konvergenco modela in lahko poveča njegovo zmogljivost.
X_train = X_train / 255.0
X_test = X_test / 255.0
Ustvarjanje načina
Želimo identificirati posameznika, katerega obraz se pojavi na sliki. V tem primeru bomo uporabili popolnoma povezano omrežje, pogosto znano kot gosto omrežje. Gre za umetno nevronsko mrežo, ki je bila uporabljena za izdelavo modela.
Umetne nevronske mreže so oblikovane po tem, kako delujejo in so organizirani človeški možgani. Sestavljeni so iz vozlišč za obdelavo informacij ali nevronov, ki so povezani. Vsak nevron v plasti v gosti mreži je povezan z vsakim nevronom v plasti nad njim.
Model ima štiri plasti v tej kodi. Za vnos v naslednjo plast so vhodni podatki v prvi plasti sploščeni v enodimenzionalni niz. 128 in 64 nevronov v naslednjih dveh plasteh je popolnoma povezanih.
Aktivacijska funkcija ReLU je edinstvena aktivacijska funkcija, ki jo uporabljajo te plasti. S tem lahko dosežemo, da se model nauči nelinearnih korelacij med vhodi in izhodi. Zadnja plast uporablja aktivacijsko funkcijo softmax za izdelavo napovedi. In je popolnoma povezana plast s toliko nevroni, kot je potencialnih razredov.
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')
])
Sestavljanje modela
Model se prevede s funkcijo “compile”. Model moramo pripraviti za trening. Tako bomo definirali optimizator, funkcijo izgube in metrike, ki bodo uporabljene za oceno modela.
Med treningom je optimizator zadolžen za spreminjanje parametrov modela. Optimizator »adam« je priljubljena tehnika optimizacije globokega učenja.
Za oceno delovanja modela na podatkih o usposabljanju uporabljamo funkcijo izgube. Ker so ciljne oznake cela števila, ki odražajo razred slike in ne enkratno kodirani vektorji, je izgubna funkcija »redke kategorične navzkrižne entropije« ugodna.
Nazadnje definiramo meritve za oceno modela, v tem primeru "točnosti".
model.compile(optimizer='adam', loss='sparse_categorical_crossentropy', metrics=['accuracy'])
Usposabljanje za modele
Za usposabljanje modela bomo uporabili funkcijo »fit«.
Zagotovili bomo podatke o usposabljanju (X vlak) in povezane oznake (y vlak) ter nastavili število epoh (iteracij), ki naj se izvajajo na 10. Postopek usposabljanja spremeni uteži modela, da zmanjša izgubo (razlika med predvidene in dejanske oznake) in izboljšati natančnost podatkov o usposabljanju.
model.fit(X_train, y_train, epochs=10)
Vrednotenje modela
Zdaj moramo oceniti usposobljeni model na podlagi testnih podatkov. Za oceno delovanja modela uporabljamo testno izgubo in testno natančnost. Pri testnih podatkih X test in preskusnih oznakah y test moramo poklicati »funkcijo model.evaluate«
Funkcija prikaže natančnost testa in izgubo testa. Spremenljivki testna izguba oziroma testna natančnost vsebujeta te vrednosti. Nazadnje uporabimo funkcijo »natisni« za izpis točnosti preskusa.
test_loss, test_accuracy = model.evaluate(X_test, y_test)
print("Test accuracy:", test_accuracy)
Napovedovanje razredov in pridobivanje predvidenih razredov
Z uporabo modela usposabljanja in testnih podatkov algoritem naredi napovedi. Ko so testni podatki posredovani metodi "model.predict", ta izpiše niz napovedi za vsako sliko v testnem nizu.
Ime ciljnega razreda za vsako sliko se nato pridobi s seznama »ciljnih imen« z uporabo funkcije »np.argmax« za identifikacijo indeksa z največjo predvideno verjetnostjo. Ta indeks se nato uporabi za določitev predvidenega razreda za vsako sliko.
Z uporabo razumevanja seznama so vse napovedi v matriki »napovedi« podvržene tej metodi, rezultat pa je seznam »predvidenih razredov«.
predictions = model.predict(X_test)
predicted_classes = [target_names[np.argmax(prediction)] for prediction in predictions]
Vizualizacija napovedi
Zdaj lahko vidimo, kako izgleda naš model.
Da bi ocenili, kako dobro gre modelu, bo prikazanih prvih 10 fotografij in njihove napovedi. Fotografije bo izrisal v sivinah in prikazal dejanski razred slike in razred, ki ga je predvidel model z uporabo modula matplotlib.pyplot.
Funkcijo »imshow« uporablja zanka for za izris vsake od prvih 10 fotografij testnega niza. Ciljna imena[y test[i]] in predvideni razredi[i] se uporabljajo za določitev dejanskega oziroma predvidenega razreda slike. Naslovi vsake ploskve so nato označeni s temi klasifikacijami.
Končno se izris prikaže z uporabo 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()
Zaviti
TensorFlow ponuja popolno in prilagodljivo okolje za ustvarjanje modelov strojnega učenja.
S fino nastavitvijo modela za izpolnjevanje posebnih zahtev ali z dodajanjem novih razvojnih dosežkov v strojnem učenju se lahko natančnost modela še poveča.
TensorFlow in prepoznavanje obraza se bosta v prihodnosti verjetno čedalje bolj uporabljala v panogah, kot so varnostni sistemi, biometrična avtentikacija in zdravstvo. Kmalu bomo priča zanimivim novostim.
Pustite Odgovori