В этой статье мы увидим распознавание лиц с использованием VGG16 с использованием концепции трансферного обучения.

Перенос обучения — это «перенос» изученных весов на другую задачу. Используем модель, разработанную для одной задачи, в другой аналогичной задаче.

VGG16 — это усовершенствованный алгоритм CNN. Мы загрузим предварительно обученную модель VGG16. VGG работает с данными изображений размером 224*224 пикселя. Здесь мы будем использовать веса imagenet.

Затем замораживаем слои.

Теперь мы создадим функцию с именем new, в которой мы определим новые слои, которые будут добавлены к существующей модели.

Теперь нам нужно добавить слои, которые мы создали в предыдущей модели. Здесь количество классов равно 3, потому что мы используем 3 лица для классификации.

Мы видим, что наши слои добавлены.

Теперь мы определим путь, по которому присутствуют данные обучения и проверки.

Затем мы сделаем некоторое увеличение данных, поскольку у нас меньше данных.

train_generator возьмет входные данные из каталогов и изменит их размер в соответствии с VGG. Точно так же будет делать validation_generator.

Здесь мы используем PMSprop в качестве оптимизатора.

мы будем использовать Model Checkpoint для сохранения модели. Только лучшая модель будет выбрана в соответствии с потерей стоимости.

Мы будем использовать раннюю остановку, чтобы, если значение потерь не уменьшалось в течение 3 непрерывных эпох, останавливать дальнейшие эпохи.

Затем компилируем модель.

Мы указали количество эпох равным 5, а размер партии — равным 4, чтобы повысить точность.

Последняя эпоха дала нам точность почти 89%, а также функция потерь уменьшена, поэтому мы сохраняем модель.

Теперь мы загрузим модель.

Мы создаем два словаря Actors_dict и Actors_dict_n, как уже упоминалось, которые указывают классы и откуда их брать.

Мы создадим функцию draw_test, которая будет отображать вывод в окне с помощью opencv.

Еще одна функция создана для того, чтобы брать случайные изображения из папки.

Наконец мы получаем вывод.

ВЫВОД