TensorFlow je všestranný nástroj pro vytváření modelů strojového učení.
V tomto příspěvku se podíváme na to, jak vytvořit systém rozpoznávání obličeje pomocí TensorFlow, open-source rámce strojového učení. Projdeme si základní procesy při vytváření úspěšného systému rozpoznávání obličejů, od shromažďování a přípravy dat až po trénování a hodnocení modelu.
Získáte první zkušenost s TensorFlow pro vytváření rozpoznávání obličeje pomocí úryvků kódu a příkladů z reálného světa. Můžete nás sledovat, jak postupujeme.
Úvod do TensorFlow
TensorFlow je bezplatná knihovna s otevřeným zdrojovým kódem. Jedná se o symbolickou matematickou sadu nástrojů, která využívá tok dat a diferencovatelné programování. Zvládnete s ním řadu úkolů, včetně hlubokých nervová síť školení.
TensorFlow je výkonný a přizpůsobivý. Stejně tak je to skvělý nástroj pro vývoj a nasazení modelů strojového učení. Můžete vytvářet složité modely s několika vrstvami a operacemi tenzoru. Také předem připravené modely v knihovně lze doladit pro konkrétní potřeby.
Kromě toho má TensorFlow obrovskou a rozšiřující se komunitu uživatelů. Existuje tedy nepřeberné množství informací a pomoci pro jednotlivce, kteří jsou na platformě noví.
TensorFlow je oblíbený pro strojové učení částečně proto, že poskytuje komplexní pracovní postup. Můžete tedy snadno konstruovat, trénovat a nasazovat modely. Poskytuje nástroje a strategie pro zlepšování a škálování modelů tak, aby vyhovovaly konkrétním požadavkům. Liší se od předběžného zpracování dat po nasazení modelu.
Co je rozpoznávání tváře?
Rozpoznávání obličeje je a počítačového vidění úkol, který identifikuje identifikaci osoby na základě její tváře. Tato technika rozpoznává rysy obličeje, jako je tvar a textura očí, nosu a úst.
A porovnává je s databází známých tváří k identifikaci shody. Rozpoznávání obličeje má několik použití, včetně bezpečnostních systémů, organizace fotografií a biometrického ověřování.
Přesnost algoritmů rozpoznávání obličeje se v posledních letech podstatně zvýšila v důsledku průlomů ve strojovém učení.
Import nezbytných knihoven
Než cokoliv začneme, musíme naimportovat knihovny potřebné pro náš model. Tensorflow (tf) se importuje a použije k vytvoření a trénování modelu. <(p>
„numpy“ provádí matematické výpočty a zpracování dat.
„matplotlib.pyplot“ je importován jako plt a použit pro datové grafy a vizualizace.
Nakonec je ze sklearnu importováno „fetch lfw people“. datové sady a slouží k načtení datové sady rozpoznávání obličeje. Tato funkce je součástí sady nástrojů scikit-learn. Díky této funkci jsme nemuseli nahrávat další dataset. Toto je již zabudováno ve sckit-learn.
A poskytuje vám přístup k široké škále datové sady pro strojové učení aplikací. V tomto scénáři používáme metodu fetch lfw people k načtení datové sady „Labeled Faces in the Wild“ (LFW). Obsahuje fotografie tváří lidí a štítky, které k nim patří.
Tyto knihovny jsou rozhodující při implementaci a vyhodnocování našeho modelu rozpoznávání obličejů.
import tensorflow as tf
import numpy as np
import matplotlib.pyplot as plt from sklearn.datasets
import fetch_lfw_people
Předzpracování a načtení datové sady pro rozpoznání tváře
V této části využíváme funkci „fetch lfw people“ k předběžnému zpracování dat rozpoznávání obličeje. Nejprve použijeme načtení lfw lidí s volbou „min faces per person=60“. To znamená, že do datové sady chceme zahrnout pouze osoby, které mají alespoň 60 fotografií. Proto zajišťujeme, aby náš model měl adekvátní data k učení. Také se tím snižuje nebezpečí nadměrné montáže.
Data a popisky z objektu faces jsou pak extrahovány a přiřazeny k proměnným X a y. X hol.
Nyní jsme připraveni trénovat náš model rozpoznávání obličeje pomocí předem zpracovaných dat a štítků.
faces = fetch_lfw_people(min_faces_per_person=60)
X = faces.data
y = faces.target
target_names = faces.target_names
Rozdělení tréninkových a testovacích sad
V tomto kroku jsme rozdělili naši datovou sadu pro rozpoznávání obličejů na dvě poloviny pomocí metody rozdělení testu vlaku z výběru sklearn.model. Cílem tohoto splitu je posoudit výkon našeho modelu po tréninku
Funkce rozdělení testu vlaku přijímá jako vstupní data X a návěští y. A rozděluje je na tréninkové a testovací sady. V tomto příkladu vybereme velikost testu=0.2. To znamená, že 20 % dat bude využito jako testovací sada a 80 % jako tréninková sada. Dále používáme náhodný stav=42, abychom zajistili konzistentní rozdělení dat při každém provedení 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)
Příprava dat
Účelem předzpracování dat je připravit je pro vstup do modelu. Data jsou v tomto kódu předzpracována vydělením každého datového bodu 255.
Co nás motivovalo k tomu, abychom toho dosáhli? Normalizace je postup předběžného zpracování používaný ve strojovém učení, aby bylo zaručeno, že všechny funkce jsou ve stejném měřítku. V tomto scénáři dělení 255 změní měřítko dat na rozsah 0 až 1, což je obvyklý krok normalizace obrazových dat.
To urychlí konvergenci modelu a může zvýšit jeho výkon.
X_train = X_train / 255.0
X_test = X_test / 255.0
Vytvoření režimu
Chceme identifikovat osobu, jejíž tvář se objevuje na obrázku. V tomto případě použijeme plně propojenou síť, často známou jako hustá síť. Je to umělá neuronová síť, která byla použita k vytvoření modelu.
Umělé neuronové sítě jsou modelovány podle toho, jak funguje a je organizován lidský mozek. Skládají se z uzlů zpracovávajících informace nebo neuronů, které jsou propojeny. Každý neuron ve vrstvě v husté síti je spojen s každým neuronem ve vrstvě nad ním.
Model má v tomto kódu čtyři vrstvy. Aby byla vstupní data vložena do další vrstvy, jsou v první vrstvě sloučena do jednorozměrného pole. 128 a 64 neuronů v následujících dvou vrstvách jsou tedy zcela propojeny.
Aktivační funkce ReLU je jedinečná aktivační funkce používaná těmito vrstvami. Díky tomu můžeme přimět model, aby se naučil nelineární korelace mezi vstupy a výstupy. Poslední vrstva využívá aktivační funkci softmax k provádění předpovědí. A je to plně propojená vrstva s tolika neurony, kolik je potenciálních tříd.
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')
])
Kompilace modelu
Model se zkompiluje pomocí funkce „kompilovat“. Musíme připravit model na trénink. Definujeme tedy optimalizátor, ztrátovou funkci a metriky, které budou použity k posouzení modelu.
Během školení má optimalizátor na starosti změnu parametrů modelu. Optimalizátor „adam“ je oblíbená optimalizační technika pro hluboké učení.
K posouzení výkonu modelu na trénovacích datech používáme ztrátovou funkci. Vzhledem k tomu, že cílové štítky jsou celá čísla odrážející třídu obrázku spíše než jednorázově zakódované vektory, je funkce ztráty „řídké kategorické crossentropie“ příznivá.
Nakonec definujeme metriky pro posouzení modelu, v tomto případě „přesnost“.
model.compile(optimizer='adam', loss='sparse_categorical_crossentropy', metrics=['accuracy'])
Modelový trénink
K trénování modelu použijeme funkci „fit“.
Poskytneme tréninková data (X train) a související štítky (y train) a také nastavíme počet epoch (iterací), které se mají spustit, na 10. Tréninkový postup upravuje modelové váhy, aby se snížila ztráta (rozdíl mezi předpokládané a skutečné štítky) a zlepšit přesnost tréninkových dat.
model.fit(X_train, y_train, epochs=10)
Hodnocení modelu
Nyní potřebujeme posoudit trénovaný model na testovacích datech. K posouzení výkonnosti modelu používáme ztrátu testu a přesnost testu. Na testovacích datech X test a testovacích štítcích y test musíme zavolat „funkci model.evaluate“
Funkce zobrazuje přesnost testu a ztrátu testu. Tyto hodnoty obsahují proměnné test ztráty a přesnost testu. Nakonec použijeme funkci „print“ pro výstup přesnosti testu.
test_loss, test_accuracy = model.evaluate(X_test, y_test)
print("Test accuracy:", test_accuracy)
Předvídání tříd a získávání předpokládaných tříd
Pomocí trénovacího modelu a testovacích dat vytváří algoritmus předpovědi. Když jsou testovací data předána metodě „model.predict“, je výstupem pole předpovědí pro každý obrázek v testovací sadě.
Název cílové třídy pro každý obrázek je pak získán ze seznamu „cílových jmen“ pomocí funkce „np.argmax“ k identifikaci indexu s největší předpokládanou pravděpodobností. Tento index se pak používá k určení předpokládané třídy pro každý obrázek.
Pomocí porozumění seznamu jsou všechny předpovědi v poli „predikce“ podrobeny této metodě, což vede k seznamu „predikovaných tříd“.
predictions = model.predict(X_test)
predicted_classes = [target_names[np.argmax(prediction)] for prediction in predictions]
Vizualizace předpovědí
Nyní se můžeme podívat, jak náš model vypadá.
Aby bylo možné vyhodnotit, jak dobře si model vede, zobrazí se prvních 10 fotografií a jejich předpovědi. Vykreslí fotografie ve stupních šedi a zobrazí jak skutečnou třídu obrázku, tak třídu předpokládanou modelem pomocí modulu matplotlib.pyplot.
Funkci „imshow“ používá smyčka for k vykreslení každé z prvních 10 fotografií testovací sady. Názvy cílů[y test[i]] a předpokládané třídy[i] se používají k určení skutečné třídy obrázku a předpokládané třídy. Názvy každého pozemku jsou pak označeny těmito klasifikacemi.
Nakonec se graf zobrazí pomocí metody 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()
Zabalit
TensorFlow nabízí kompletní a flexibilní prostředí pro vytváření modelů strojového učení.
Doladěním modelu tak, aby vyhovoval konkrétním požadavkům, nebo přidáním nového vývoje ve strojovém učení lze přesnost modelu ještě zvýšit.
TensorFlow a rozpoznávání obličeje budou pravděpodobně v budoucnu stále více využívány v odvětvích, jako jsou bezpečnostní systémy, biometrické ověřování a zdravotnictví. Brzy uvidíme fascinující inovace.
Napsat komentář