TensorFlow je všestranný nástroj na vytváranie modelov strojového učenia.
V tomto príspevku sa pozrieme na to, ako vytvoriť systém rozpoznávania tváre pomocou TensorFlow, open-source rámca strojového učenia. Prejdeme si základné procesy pri vytváraní úspešného systému rozpoznávania tvárí, od zhromažďovania a prípravy údajov až po trénovanie a hodnotenie modelu.
Získate skúsenosti z prvej ruky s TensorFlow na vytvorenie rozpoznávania tváre pomocou útržkov kódu a príkladov z reálneho sveta. Môžete nás sledovať, ako postupujeme.
Úvod do TensorFlow
TensorFlow je bezplatná knižnica s otvoreným zdrojovým kódom. Je to symbolický matematický súbor nástrojov, ktorý využíva tok údajov a diferencovateľné programovanie. Zvládnete s ním celý rad úloh vrátane hlbokých neurónové sieť školenia.
TensorFlow je výkonný a prispôsobivý. Rovnako je to skvelý nástroj na rozvoj a nasadenie modelov strojového učenia. Môžete vytvárať komplikované modely s niekoľkými vrstvami a operáciami tenzorov. Tiež vopred zostavené modely v knižnici môžu byť doladené pre špecifické potreby.
Okrem toho má TensorFlow obrovskú a rozširujúcu sa komunitu používateľov. Existuje teda množstvo informácií a pomoci pre jednotlivcov, ktorí sú na platforme noví.
TensorFlow je populárny pre strojové učenie čiastočne preto, že poskytuje komplexný pracovný tok. Takže môžete ľahko zostavovať, trénovať a nasadzovať modely. Poskytuje nástroje a stratégie na zlepšovanie a škálovanie modelov, aby vyhovovali špecifickým požiadavkám. Líši sa od predbežného spracovania údajov až po nasadenie modelu.
Čo je rozpoznávanie tváre?
Rozpoznávanie tváre je a počítačová vízia úloha, ktorá identifikuje identifikáciu osoby na základe jej tváre. Táto technika rozpoznáva črty tváre, ako je tvar a štruktúra očí, nosa a úst.
A porovnáva ich s databázou známych tvárí na identifikáciu zhody. Rozpoznávanie tváre má niekoľko využití, vrátane bezpečnostných systémov, organizácie fotografií a biometrickej autentifikácie.
Presnosť algoritmov rozpoznávania tváre sa v posledných rokoch výrazne zvýšila v dôsledku prelomov v strojovom učení.
Import nevyhnutných knižníc
Pred začatím čohokoľvek musíme importovať knižnice potrebné pre náš model. Tensorflow (tf) sa importuje a používa na vytvorenie a trénovanie modelu. <(p>
„numpy“ vykonáva matematické výpočty a spracovanie údajov.
„matplotlib.pyplot“ sa importuje ako plt a používa sa pre grafy a vizualizácie údajov.
Nakoniec sa „fetch lfw people“ importuje zo sklearn. množiny údajov a používajú sa na načítanie množiny údajov rozpoznávania tváre. Táto funkcia je súčasťou sady nástrojov scikit-learn. Vďaka tejto funkcii sme nemuseli nahrávať ďalší dataset. Toto je už zabudované v sckit-learn.
A poskytuje vám prístup k širokej škále množiny údajov pre strojové učenie aplikácie. V tomto scenári používame metódu fetch lfw people na získanie súboru údajov „Labeled Faces in the Wild“ (LFW). Obsahuje fotografie tvárí ľudí, ako aj štítky, ktoré s nimi súvisia.
Tieto knižnice sú rozhodujúce pri implementácii a hodnotení nášho modelu rozpoznávania tváre.
import tensorflow as tf
import numpy as np
import matplotlib.pyplot as plt from sklearn.datasets
import fetch_lfw_people
Predspracovanie a načítanie množiny údajov na rozpoznávanie tváre
V tejto časti využívame funkciu „fetch lfw people“ na predbežné spracovanie údajov rozpoznávania tváre. Najprv použijeme načítanie lfw ľudí s možnosťou „min. tvárí na osobu=60“. Znamená to, že do súboru údajov chceme zahrnúť iba osoby, ktoré majú aspoň 60 fotografií. Preto zaisťujeme, že náš model má dostatočné údaje, ktoré sa dá naučiť. Okrem toho sa tým znižuje nebezpečenstvo nadmerného vybavenia.
Údaje a štítky z objektu tváre sa potom extrahujú a priradia k premenným X a y. X hol.
Teraz sme pripravení trénovať náš model rozpoznávania tváre pomocou vopred spracovaných údajov a štítkov.
faces = fetch_lfw_people(min_faces_per_person=60)
X = faces.data
y = faces.target
target_names = faces.target_names
Rozdelenie tréningových a testovacích sád
V tomto kroku sme rozdelili náš súbor údajov o rozpoznávaní tváre na dve polovice pomocou metódy testovania vlakov z výberu sklearn.model. Cieľom tohto splitu je posúdiť výkon nášho modelu po tréningu
Funkcia rozdelenia testu vlaku akceptuje ako vstupné údaje X a označenia y. A rozdeľuje ich na tréningové a testovacie sady. V tomto príklade vyberieme veľkosť testu = 0.2. To znamená, že 20 % údajov sa použije ako testovací súbor a 80 % ako tréningový súbor. Okrem toho používame náhodný stav = 42, aby sme zabezpečili konzistentné rozdelenie údajov pri každom vykonaní kódu.
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)
Príprava údajov
Účelom predspracovania údajov je pripraviť ich na vstup do modelu. Údaje sa v tomto kóde predspracujú vydelením každého údajového bodu číslom 255.
Čo nás motivovalo dosiahnuť to? Normalizácia je postup predbežného spracovania používaný v strojovom učení, aby sa zaručilo, že všetky funkcie budú na rovnakej úrovni. V tomto scenári delenie číslom 255 zmení mierku údajov na rozsah od 0 do 1, čo je zvyčajný krok normalizácie obrazových údajov.
To urýchľuje konvergenciu modelu a môže zvýšiť jeho výkon.
X_train = X_train / 255.0
X_test = X_test / 255.0
Vytvorenie režimu
Chceme identifikovať osobu, ktorej tvár sa objavuje na obrázku. V tomto prípade použijeme plne pripojenú sieť, často označovanú ako hustá sieť. Ide o umelú neurónovú sieť, ktorá bola použitá na vytvorenie modelu.
Umelé neurónové siete sú modelované podľa toho, ako funguje a je organizovaný ľudský mozog. Skladajú sa z uzlov alebo neurónov na spracovanie informácií, ktoré sú prepojené. Každý neurón vo vrstve v hustej sieti je spojený s každým neurónom vo vrstve nad ním.
Model má v tomto kóde štyri vrstvy. Aby boli vstupné dáta vložené do ďalšej vrstvy, sú v prvej vrstve sploštené do jednorozmerného poľa. 128 a 64 neurónov v nasledujúcich dvoch vrstvách sú teda úplne prepojené.
Funkcia aktivácie ReLU je jedinečná aktivačná funkcia používaná týmito vrstvami. Vďaka tomu môžeme prinútiť model naučiť sa nelineárne korelácie medzi vstupmi a výstupmi. Posledná vrstva využíva funkciu aktivácie softmax na vytváranie predpovedí. A je to plne prepojená vrstva s toľkými neurónmi, koľko je potenciálnych tried.
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')
])
Zostavenie modelu
Model sa zostavuje pomocou funkcie „kompilovať“. Musíme pripraviť model na tréning. Definujeme teda optimalizátor, stratovú funkciu a metriky, ktoré sa použijú na posúdenie modelu.
Počas tréningu má optimalizátor na starosti zmenu parametrov modelu. Optimalizátor „adam“ je populárna technika optimalizácie s hlbokým učením.
Stratovú funkciu používame na posúdenie výkonu modelu na trénovacích údajoch. Pretože cieľové štítky sú celé čísla, ktoré odrážajú triedu obrázka, a nie vektory, ktoré sú zakódované jedným horúcim spôsobom, funkcia straty „riedkej kategorickej krížovej entropie“ je priaznivá.
Nakoniec definujeme metriky na posúdenie modelu, v tomto prípade „presnosť“.
model.compile(optimizer='adam', loss='sparse_categorical_crossentropy', metrics=['accuracy'])
Modelový tréning
Na trénovanie modelu použijeme funkciu „fit“.
Poskytneme tréningové údaje (X train) a súvisiace štítky (y train), ako aj nastavenie počtu epoch (iterácií), ktoré sa majú spustiť ako 10. Tréningový postup upravuje modelové váhy, aby sa znížila strata (rozdiel medzi predpovedané a skutočné označenia) a zlepšiť presnosť tréningových údajov.
model.fit(X_train, y_train, epochs=10)
Hodnotenie modelu
Teraz musíme posúdiť trénovaný model na testovacích údajoch. Na posúdenie výkonnosti modelu používame stratu testu a presnosť testu. V teste X test a testovacích štítkoch y test musíme zavolať „funkciu model.evaluate“
Funkcia zobrazuje presnosť testu a stratu testu. Tieto hodnoty obsahujú premenné testovacia strata a presnosť testu. Nakoniec použijeme funkciu „tlač“ na výstup presnosti testu.
test_loss, test_accuracy = model.evaluate(X_test, y_test)
print("Test accuracy:", test_accuracy)
Predpovedanie tried a získanie predpovedaných tried
Pomocou trénovacieho modelu a testovacích údajov algoritmus robí predpovede. Keď sa testovacie údaje prenesú do metódy „model.predict“, vytvorí sa pole predpovedí pre každý obrázok v testovacej sade.
Názov cieľovej triedy pre každý obrázok sa potom získa zo zoznamu „názvov cieľov“ pomocou funkcie „np.argmax“ na identifikáciu indexu s najväčšou predpokladanou pravdepodobnosťou. Tento index sa potom použije na určenie predpovedanej triedy pre každý obrázok.
Použitím porozumenia zoznamu sú všetky predpovede v poli „predpovede“ podrobené tejto metóde, výsledkom čoho je zoznam „predpovedaných tried“.
predictions = model.predict(X_test)
predicted_classes = [target_names[np.argmax(prediction)] for prediction in predictions]
Vizualizácia predpovedí
Teraz môžeme vidieť, ako náš model vyzerá.
Na vyhodnotenie toho, ako sa modelke darí, sa zobrazí prvých 10 fotografií a ich predpovede. Vykreslí fotografie v odtieňoch sivej a zobrazí skutočnú triedu obrázka aj triedu predpovedanú modelom pomocou modulu matplotlib.pyplot.
Funkciu „imshow“ používa cyklus for na vykreslenie každej z prvých 10 fotografií testovacej sady. Cieľové názvy[y test[i]] a predpovedané triedy[i] sa používajú na určenie skutočnej triedy obrázka a predpokladanej triedy. Názvy každého pozemku sú potom označené týmito klasifikáciami.
Nakoniec sa graf zobrazí pomocou metódy 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()
Zabaliť
TensorFlow ponúka kompletné a flexibilné prostredie na vytváranie modelov strojového učenia.
Doladením modelu tak, aby spĺňal konkrétne požiadavky, alebo pridaním nového vývoja v oblasti strojového učenia možno presnosť modelu ešte zvýšiť.
TensorFlow a rozpoznávanie tváre sa budú v budúcnosti pravdepodobne čoraz viac používať v odvetviach, ako sú bezpečnostné systémy, biometrické overovanie a zdravotníctvo. Už čoskoro uvidíme fascinujúce inovácie.
Nechaj odpoveď