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 людей» для попередньої обробки даних розпізнавання обличчя. По-перше, ми використовуємо вибірку lfw людей з опцією «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». Треба підготувати модель до навчання. Отже, ми визначимо оптимізатор, функцію втрат і метрики, які використовуватимуться для оцінки моделі.
Під час навчання оптимізатор відповідає за зміну параметрів моделі. Оптимізатор «Адам» — популярна техніка оптимізації глибокого навчання.
Ми використовуємо функцію втрат, щоб оцінити ефективність моделі на даних навчання. Оскільки цільові мітки є цілими числами, що відображають клас зображення, а не одноразово закодовані вектори, функція втрат «розрідженої категоріальної кросентропії» є сприятливою.
Нарешті, ми визначаємо показники для оцінки моделі, у цьому випадку «точність».
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 і розпізнавання облич у майбутньому, ймовірно, все частіше використовуватимуться в таких галузях, як системи безпеки, біометрична автентифікація та охорона здоров’я. Незабаром ми побачимо захоплюючі інновації.
залишити коментар