В рамках моей программы Deep Learning Foundation Nanodegree в Udacity я научился создавать новые лица с помощью генеративных состязательных сетей, или сокращенно GAN.

Если вы понятия не имеете, что такое GAN, возможно, сначала прочтите эту удобную статью от Dev Nag, в которой вы узнаете о GAN теоретически, а также реализуете одну из 50 строк кода PyTorch.

В последних нескольких лекциях программы Deep Learning Foundation Nanodegree студенты узнают, как применять и внедрять GAN, и в этом проекте цель состояла в том, чтобы использовать эти знания для реализации GAN для создания новых лиц. Идея заключалась в том, чтобы реализовать Deep Convolutional GAN ​​и обучить архитектуру на наборе данных MNIST. Как только архитектура смогла генерировать новые рукописные цифры, она была готова генерировать новые лица с использованием набора данных CelebA.

При выборе архитектуры моего DCGAN я сначала остановился на упрощенной версии сети, описанной в статье Обучение неконтролируемому представлению с помощью глубоких сверточных генерирующих состязательных сетей », которую вы можете увидеть выше. Вместо четырех сверточных слоев я использовал только два - соответственно, результаты были размытыми и неточными.

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

Это, очевидно, означало, что моя архитектура была готова к обучению на наборе данных CelebA. Обучение длилось примерно 15–20 минут, и хотя первые несколько итераций выглядели как что-то демоническое, конечный результат был прекрасен.

Результаты стали узнаваемыми в виде лиц посреди тренировочного процесса и лишь немного доводили себя до конца. Это результат одной эпохи. Чтобы лица были менее размытыми, тренировку нужно было бы продлить немного дольше.

Если вы хотите ознакомиться с моим кодом, посетите мой проект на GitHub. Весь код там! Увидимся в следующий раз!