В этой статье мы увидим распознавание лиц с использованием 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.
Еще одна функция создана для того, чтобы брать случайные изображения из папки.
Наконец мы получаем вывод.