TensorFlow е универсален инструмент за създаване на модели за машинно обучение.
В тази публикация ще разгледаме как да създадем система за разпознаване на лица с TensorFlow, рамка за машинно обучение с отворен код. Ще разгледаме основните процеси при създаването на успешна система за разпознаване на лица, от събиране и подготовка на данни до обучение и оценка на модел.
Ще получите опит от първа ръка с TensorFlow, за да създадете разпознаване на лица с помощта на кодови фрагменти и примери от реалния свят. Можете да следвате, докато продължаваме.
Въведение в TensorFlow
TensorFlow е безплатна библиотека с отворен код. Това е символична математическа кутия с инструменти, която използва поток от данни и диференцируемо програмиране. Можете да се справите с редица задачи с него, включително дълбоки невронна мрежа обучение.
TensorFlow е мощен и адаптивен. По същия начин той е чудесен инструмент за развитие и внедряване на модели за машинно обучение. Можете да създавате сложни модели с няколко слоя и тензорни операции. Също така, предварително изградените модели в библиотеката могат да бъдат фино настроени за специфични нужди.
Освен това TensorFlow има огромна и разширяваща се потребителска общност. Така че има изобилие от информация и помощ за лица, които са нови в платформата.
TensorFlow е популярен за машинно обучение отчасти защото осигурява работен процес от край до край. Така че можете лесно да конструирате, обучавате и разгръщате модели. Той предоставя инструменти и стратегии за подобряване и мащабиране на модели, за да отговарят на конкретни изисквания. Тя варира от предварителна обработка на данни до внедряване на модела.
Какво е разпознаване на лица?
Разпознаването на лица е a компютърно зрение задача, която идентифицира идентификацията на човек въз основа на лицето му. Тази техника разпознава черти на лицето, като формата и структурата на очите, носа и устата.
И ги сравнява с база данни с познати лица, за да идентифицира съвпадение. Разпознаването на лица има няколко приложения, включително системи за сигурност, организиране на снимки и биометрично удостоверяване.
Точността на алгоритмите за разпознаване на лица се повиши значително през последните години в резултат на пробив в машинното обучение.
Импортиране на необходимите библиотеки
Преди да започнем нещо, трябва да импортираме библиотеките, необходими за нашия модел. Tensorflow (tf) се импортира и използва за създаване и обучение на модела. <(p>
„numpy“ извършва математически изчисления и обработка на данни.
„matplotlib.pyplot“ се импортира като plt и се използва за диаграми и визуализации на данни.
И накрая, „fetch lfw people“ се импортира от sklearn. набори от данни и използвани за зареждане на набора от данни за разпознаване на лица. Тази функция е част от инструментариума scikit-learn. Благодарение на тази функция не се наложи да качваме друг набор от данни. Това вече е вградено в sckit-learn.
И ви дава достъп до широка гама от набори от данни за машинно обучение приложения. В този сценарий използваме метода fetch lfw people, за да извлечем набора от данни „Labeled Faces in the Wild“ (LFW). Състои се от снимки на лицата на хората, както и етикетите, които вървят с тях.
Тези библиотеки са критични при внедряването и оценката на нашия модел за разпознаване на лица.
import tensorflow as tf
import numpy as np
import matplotlib.pyplot as plt from sklearn.datasets
import fetch_lfw_people
Предварителна обработка и зареждане на набора от данни за разпознаване на лица
В тази част използваме функцията „извличане на lfw хора“ за предварителна обработка на данните за лицево разпознаване. Първо използваме fetch lfw people с опцията „min faces per person=60“. Това показва, че искаме да включим само хора в набора от данни, които имат поне 60 снимки. Следователно ние гарантираме, че нашият модел има адекватни данни за обучение. Също така, това намалява опасността от прекомерно оборудване.
След това данните и етикетите от обекта faces се извличат и присвояват на променливите X и y. X хол.
Вече сме готови да обучим нашия модел за лицево разпознаване с помощта на предварително обработени данни и етикети.
faces = fetch_lfw_people(min_faces_per_person=60)
X = faces.data
y = faces.target
target_names = faces.target_names
Разделяне на комплекти за обучение и тестове
В тази стъпка разделяме нашия набор от данни за разпознаване на лица на две половини, използвайки метода за разделяне на теста на влака от sklearn.model selection. Целта на това разделяне е да оцени представянето на нашия модел след тренировка
Функцията за разделяне на теста на влака приема като входни данни X и етикети y. И ги разделя на комплекти за обучение и тестове. В този пример избираме размер на теста=0.2. Това означава, че 20% от данните ще бъдат използвани като набор от тестове и 80% като набор за обучение. Освен това използваме произволно състояние=42, за да гарантираме, че данните се разделят последователно всеки път, когато се изпълнява кодът.
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)
Подготовка на данните
Целта на предварителната обработка на данните е да ги подготви за въвеждане в модела. Данните се обработват предварително в този код чрез разделяне на всяка точка от данни на 255.
Какво ни мотивира да постигнем това? Нормализирането е процедура за предварителна обработка, използвана в машинното обучение, за да се гарантира, че всички функции са в еднакъв мащаб. В този сценарий разделянето на 255 мащабира данните в диапазон от 0 до 1, което е обичайна стъпка за нормализиране на данните за картината.
Това ускорява конвергенцията на модела и може да увеличи неговата производителност.
X_train = X_train / 255.0
X_test = X_test / 255.0
Създаване на режима
Искаме да идентифицираме лицето, чието лице се появява на снимката. В този случай ще използваме напълно свързана мрежа, често известна като гъста мрежа. Това е изкуствена невронна мрежа, която е използвана за създаването на модела.
Изкуствените невронни мрежи са моделирани според начина, по който функционира и е организиран човешкият мозък. Те са съставени от възли за обработка на информация или неврони, които са свързани. Всеки неврон в слой в гъста мрежа е свързан с всеки неврон в слоя над него.
Моделът има четири слоя в този код. За да бъдат въведени в следващия слой, входните данни се изравняват в първия слой в едномерен масив. 128 и 64 неврони в следващите два слоя, съответно, са напълно свързани.
Функцията за активиране ReLU е уникална функция за активиране, използвана от тези слоеве. С това можем да накараме модела да научи нелинейни корелации между входовете и изходите. Последният слой използва функцията за активиране на softmax, за да прави прогнози. И това е напълно свързан слой с толкова неврони, колкото има потенциални класове.
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')
])
Компилиране на модела
Моделът се компилира с помощта на функцията “compile”. Трябва да подготвим модела за обучение. И така, ще дефинираме оптимизатора, функцията на загубата и показателите, които ще се използват за оценка на модела.
По време на обучението оптимизаторът отговаря за промяната на параметрите на модела. Оптимизаторът „adam“ е популярна техника за оптимизация на дълбоко обучение.
Ние използваме функцията за загуба, за да оценим ефективността на модела върху данните за обучение. Тъй като целевите етикети са цели числа, отразяващи класа на изображението, а не еднократно кодирани вектори, функцията за загуба на „разредена категорична кросентропия“ е благоприятна.
И накрая, ние дефинираме показателите за оценка на модела, в този случай „точността“.
model.compile(optimizer='adam', loss='sparse_categorical_crossentropy', metrics=['accuracy'])
Модел обучение
Ще използваме функцията „fit“, за да обучим модела.
Ние ще предоставим данните за обучение (X влак) и свързани етикети (y влак), както и ще зададем броя на епохите (повторения), които да се изпълняват като 10. Процедурата за обучение променя теглата на модела, за да намали загубата (разликата между предвидени и реални етикети) и подобряване на точността на данните за обучение.
model.fit(X_train, y_train, epochs=10)
Оценка на модела
Сега трябва да оценим обучения модел върху данните от теста. Ние използваме загубата на тест и точността на теста се използват за оценка на производителността на модела. На тестовите данни X test и тестовите етикети y test трябва да извикаме „функцията model.evaluate“
Функцията извежда точността на теста и загубата на теста. Променливите загуба на тест и точност на теста, съответно, съдържат тези стойности. Накрая използваме функцията „печат“, за да изведем точността на теста.
test_loss, test_accuracy = model.evaluate(X_test, y_test)
print("Test accuracy:", test_accuracy)
Прогнозиране на класове и получаване на прогнозираните класове
Използвайки тренировъчния модел и тестовите данни, алгоритъмът прави прогнози. Когато тестовите данни се предават на метода „model.predict“, той извежда масив от прогнози за всяка картина в тестовия набор.
След това името на целевия клас за всяка картина се извлича от списъка „имена на цели“, като се използва функцията „np.argmax“, за да се идентифицира индексът с най-голяма прогнозирана вероятност. След това този индекс се използва за определяне на предвидения клас за всяко изображение.
Използвайки разбиране на списък, всички прогнози в масива „предсказания“ се подлагат на този метод, което води до списъка „предвидени класове“.
predictions = model.predict(X_test)
predicted_classes = [target_names[np.argmax(prediction)] for prediction in predictions]
Визуализиране на прогнозите
Сега можем да видим как изглежда нашият модел.
За да се оцени колко добре се справя моделът, ще бъдат показани първите 10 снимки и техните прогнози. Той ще начертае снимките в нива на сивото и ще покаже както действителния клас на изображението, така и класа, предвиден от модела с помощта на модула matplotlib.pyplot.
Функцията „imshow“ се използва от for цикъла за начертаване на всяка от първите 10 тестови снимки. Имената на целите[y test[i]] и прогнозираните класове[i] се използват за определяне съответно на действителния и прогнозирания клас на изображението. След това заглавията на всеки сюжет се обозначават с тези класификации.
Накрая графиката се показва с помощта на метода 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()
Облечи
TensorFlow предлага пълна и гъвкава среда за създаване на модели за машинно обучение.
Чрез фина настройка на модела, за да отговаря на конкретни изисквания или чрез добавяне на нови разработки в машинното обучение, точността на модела може да се увеличи още повече.
TensorFlow и разпознаването на лица вероятно ще се използват все повече в индустрии като системи за сигурност, биометрично удостоверяване и здравеопазване в бъдеще. Скоро ще видим очарователни иновации.
Оставете коментар