TensorFlow to wszechstronne narzędzie do tworzenia modeli uczenia maszynowego.
W tym poście przyjrzymy się, jak stworzyć system rozpoznawania twarzy za pomocą TensorFlow, struktury uczenia maszynowego typu open source. Omówimy podstawowe procesy tworzenia skutecznego systemu rozpoznawania twarzy, od gromadzenia i przygotowywania danych po trenowanie i ocenę modelu.
Zdobędziesz doświadczenie z pierwszej ręki z TensorFlow, aby tworzyć rozpoznawanie twarzy za pomocą fragmentów kodu i rzeczywistych przykładów. Zapraszamy do śledzenia postępów.
Wprowadzenie do TensorFlow
TensorFlow to bezpłatna biblioteka typu open source. Jest to symboliczny zestaw narzędzi matematycznych, który wykorzystuje przepływ danych i programowanie różniczkowe. Możesz z nim obsłużyć szereg zadań, w tym głębokie sieci neuronowe szkolenia.
TensorFlow jest potężny i elastyczny. Podobnie, jest to doskonałe narzędzie do rozwijania i wdrażanie modeli uczenia maszynowego. Możesz budować skomplikowane modele z kilkoma warstwami i operacjami tensorowymi. Ponadto gotowe modele w bibliotece można dostosować do konkretnych potrzeb.
Ponadto TensorFlow ma ogromną i rozwijającą się społeczność użytkowników. Tak więc istnieje mnóstwo informacji i pomocy dla osób, które są nowe na platformie.
Popularny jest TensorFlow uczenie maszynowe po części dlatego, że zapewnia kompleksowy przepływ pracy. Dzięki temu można łatwo konstruować, trenować i wdrażać modele. Zapewnia narzędzia i strategie do ulepszania i skalowania modeli w celu dopasowania ich do określonych wymagań. Różni się od wstępnego przetwarzania danych po wdrożenie modelu.
Co to jest rozpoznawanie twarzy?
Rozpoznawanie twarzy to A wizja komputerowa zadanie, które identyfikuje tożsamość osoby na podstawie jej twarzy. Ta technika rozpoznaje cechy twarzy, takie jak kształt i faktura oczu, nosa i ust.
I porównuje je z bazą danych znanych twarzy, aby zidentyfikować dopasowanie. Rozpoznawanie twarzy ma kilka zastosowań, w tym systemy bezpieczeństwa, organizację zdjęć i uwierzytelnianie biometryczne.
Dokładność algorytmów rozpoznawania twarzy znacznie wzrosła w ostatnich latach w wyniku przełomów w uczeniu maszynowym.
Importowanie niezbędnych bibliotek
Zanim cokolwiek zaczniemy, musimy zaimportować biblioteki potrzebne do naszego modelu. Tensorflow (tf) jest importowany i wykorzystywany do tworzenia i uczenia modelu. <(p>
„numpy” wykonuje obliczenia matematyczne i przetwarzanie danych.
„matplotlib.pyplot” jest importowany jako plt i używany do wykresy i wizualizacje danych.
Wreszcie „fetch lfw people” jest importowane ze sklearn. zestawów danych i używany do ładowania zestawu danych rozpoznawania twarzy. Ta funkcja jest częścią zestawu narzędzi scikit-learn. Dzięki tej funkcji nie musieliśmy przesyłać kolejnego zestawu danych. Jest to już wbudowane w skit-learn.
I daje dostęp do szerokiej gamy zestawy danych do uczenia maszynowego Aplikacje. W tym scenariuszu używamy metody fetch lfw people w celu pobrania zestawu danych „Labeled Faces in the Wild” (LFW). Zawiera zdjęcia twarzy ludzi oraz towarzyszące im etykiety.
Biblioteki te są krytyczne we wdrażaniu i ocenie naszego modelu rozpoznawania twarzy.
import tensorflow as tf
import numpy as np
import matplotlib.pyplot as plt from sklearn.datasets
import fetch_lfw_people
Wstępne przetwarzanie i ładowanie zestawu danych rozpoznawania twarzy
W tej części wykorzystujemy funkcję „fetch lfw people” do wstępnego przetwarzania danych rozpoznawania twarzy. Najpierw używamy opcji pobierania lfw osób z opcją „min. twarzy na osobę=60”. Oznacza to, że chcemy uwzględnić w zbiorze danych tylko osoby, które mają co najmniej 60 zdjęć. Dlatego zapewniamy, że nasz model ma odpowiednie dane do nauki. Zmniejsza to również niebezpieczeństwo przetrenowania.
Dane i etykiety z obiektu twarzy są następnie wyodrębniane i przypisywane do zmiennych X i y. X hol.
Jesteśmy teraz gotowi do trenowania naszego modelu rozpoznawania twarzy przy użyciu wstępnie przetworzonych danych i etykiet.
faces = fetch_lfw_people(min_faces_per_person=60)
X = faces.data
y = faces.target
target_names = faces.target_names
Podział zestawów treningowych i testowych
W tym kroku podzieliliśmy nasz zestaw danych rozpoznawania twarzy na dwie połowy przy użyciu metody podziału testu pociągu z wyboru sklearn.model. Celem tego podziału jest ocena wydajności naszego modelu po treningu
Funkcja podziału testu pociągu przyjmuje jako dane wejściowe dane X i etykiety y. I dzieli je na zestawy treningowe i testowe. W tym przykładzie wybieramy rozmiar testu = 0.2. Oznacza to, że 20% danych zostanie wykorzystanych jako zbiór testowy, a 80% jako zbiór uczący. Ponadto używamy random state=42, aby zapewnić spójny podział danych za każdym razem, gdy wykonywany jest kod.
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)
Przygotowanie danych
Celem wstępnego przetwarzania danych jest przygotowanie ich do wprowadzenia do modelu. Dane są wstępnie przetwarzane w tym kodzie poprzez podzielenie każdego punktu danych przez 255.
Co nas zmotywowało do osiągnięcia tego celu? Normalizacja to procedura przetwarzania wstępnego stosowana w uczeniu maszynowym w celu zagwarantowania, że wszystkie funkcje mają tę samą skalę. W tym scenariuszu dzielenie przez 255 powoduje skalowanie danych do zakresu od 0 do 1, co jest typowym krokiem normalizacji danych obrazu.
Przyspiesza to zbieżność modelu i może zwiększyć jego wydajność.
X_train = X_train / 255.0
X_test = X_test / 255.0
Tworzenie trybu
Chcemy zidentyfikować osobę, której twarz widnieje na zdjęciu. W tym przypadku użyjemy w pełni połączonej sieci, często nazywanej siecią gęstą. Jest to sztuczna sieć neuronowa, która została wykorzystana do stworzenia modelu.
Sztuczne sieci neuronowe są wzorowane na tym, jak działa i jest zorganizowany ludzki mózg. Składają się z węzłów przetwarzających informacje lub neuronów, które są ze sobą połączone. Każdy neuron w warstwie w gęstej sieci jest połączony z każdym neuronem w warstwie powyżej.
Model ma cztery warstwy w tym kodzie. Aby wprowadzić je do następnej warstwy, dane wejściowe są spłaszczane w pierwszej warstwie w jednowymiarową tablicę. Odpowiednio, neurony 128 i 64 w kolejnych dwóch warstwach są całkowicie połączone.
Funkcja aktywacji ReLU jest unikalną funkcją aktywacji używaną przez te warstwy. Dzięki temu możemy sprawić, że model nauczy się nieliniowych korelacji między danymi wejściowymi i wyjściowymi. Ostatnia warstwa wykorzystuje funkcję aktywacji softmax do przewidywania. I jest to w pełni połączona warstwa z tyloma neuronami, ile jest potencjalnych klas.
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')
])
Kompilacja modelu
Model jest kompilowany za pomocą funkcji „kompiluj”. Musimy przygotować model do treningu. Zdefiniujemy więc optymalizator, funkcję strat i metryki, które zostaną użyte do oceny modelu.
Podczas treningu optymalizator odpowiada za zmianę parametrów modelu. Optymalizator „adam” jest popularną techniką optymalizacji głębokiego uczenia się.
Używamy funkcji straty do oceny wydajności modelu na danych treningowych. Ponieważ etykiety docelowe są liczbami całkowitymi odzwierciedlającymi klasę obrazu, a nie wektorami zakodowanymi na gorąco, funkcja utraty „rzadka kategoryczna krzyżentropia” jest korzystna.
Na koniec definiujemy metryki do oceny modelu, w tym przypadku „dokładność”.
model.compile(optimizer='adam', loss='sparse_categorical_crossentropy', metrics=['accuracy'])
Trening modelowy
Użyjemy funkcji „dopasuj”, aby wytrenować model.
Dostarczymy dane treningowe (pociąg X) i powiązane etykiety (pociąg y), a także ustawimy liczbę epok (iteracji) na 10. Procedura uczenia modyfikuje wagi modelu, aby zmniejszyć stratę (różnica między etykiety przewidywane i rzeczywiste) oraz poprawić dokładność danych treningowych.
model.fit(X_train, y_train, epochs=10)
Ocena modelu
Teraz musimy ocenić przeszkolony model na danych testowych. Używamy straty testowej i dokładności testu, aby ocenić wydajność modelu. W teście X danych testowych i teście etykiet testowych y musimy wywołać „funkcję model.evaluate”
Funkcja wyprowadza dokładność testu i utratę testu. Zmienne odpowiednio tłumienie testu i dokładność testu zawierają te wartości. Na koniec używamy funkcji „drukuj”, aby wyświetlić dokładność testu.
test_loss, test_accuracy = model.evaluate(X_test, y_test)
print("Test accuracy:", test_accuracy)
Przewidywanie klas i uzyskiwanie przewidywanych klas
Wykorzystując model uczący i dane testowe, algorytm tworzy prognozy. Kiedy dane testowe są przekazywane do metody „model.predict”, generuje ona tablicę przewidywań dla każdego obrazu w zestawie testowym.
Nazwa klasy docelowej dla każdego obrazu jest następnie pobierana z listy „nazw docelowych” za pomocą funkcji „np.argmax” w celu zidentyfikowania indeksu z największym przewidywanym prawdopodobieństwem. Ten indeks jest następnie używany do określenia przewidywanej klasy dla każdego obrazu.
Korzystając z rozumienia listy, wszystkie predykcje w tablicy „predictions” są poddawane tej metodzie, w wyniku czego powstaje lista „przewidywanych klas”.
predictions = model.predict(X_test)
predicted_classes = [target_names[np.argmax(prediction)] for prediction in predictions]
Wizualizacja prognoz
Teraz możemy zobaczyć, jak wygląda nasz model.
Aby ocenić, jak dobrze radzi sobie model, zostanie wyświetlonych 10 pierwszych zdjęć i ich prognozy. Narysuje zdjęcia w skali szarości i wyświetli zarówno rzeczywistą klasę obrazu, jak i klasę przewidywaną przez model za pomocą modułu matplotlib.pyplot.
Funkcja „imshow” jest używana przez pętlę for do wykreślenia każdego z pierwszych 10 zdjęć zestawu testowego. Nazwy docelowe[y test[i]] i przewidywane klasy[i] są używane do określenia odpowiednio rzeczywistej i przewidywanej klasy obrazu. Tytuły każdej działki są następnie wskazywane przez te klasyfikacje.
Na koniec wykres jest wyświetlany przy użyciu 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()
Zamotać
TensorFlow oferuje kompletne i elastyczne środowisko do tworzenia modeli uczenia maszynowego.
Dostrajając model w celu spełnienia określonych wymagań lub dodając nowe rozwiązania w uczeniu maszynowym, można jeszcze bardziej zwiększyć dokładność modelu.
W przyszłości TensorFlow i rozpoznawanie twarzy będą prawdopodobnie coraz częściej wykorzystywane w branżach takich jak systemy bezpieczeństwa, uwierzytelnianie biometryczne i opieka zdrowotna. Wkrótce zobaczymy fascynujące innowacje.
Dodaj komentarz