Обучение свёрточной генеративно состязательной нейросети рисованию на примере Рэй Аянами. / GAN
Вставка
- Опубліковано 12 сер 2023
- Сделал на С++ и CUDA операции со свёрткой через матричное умножение. Попробовал обучить нейросеть рисовать на примере Рэй. К сожалению, качественного изображения пока получить не удалось. Возможно, нужны десятки тысяч эпох. Ну и датасет нужен в десятки тысяч изображений (здесь в датасете было всего четыре картинки :) ).
Музыка взята из • A Cruel Angel's Thesis... - Наука та технологія
Не ожидал такого увидеть на этом канале)))
Почему? :O
@@danieolivo2438 Ну, не знаю... по-моему советские лазеры, слюдники и голография, как-то не очень сочетаются со странными японскими мультиками :)
Какие слои у вас использовались? Любопытно узнать
Уже не помню - сеть перестроена, ибо качество с этими слоями получилось не очень (да и вообще тут коллапс сети, что неудивительно, ибо в датасете было аж 4 (!) картинки) :) . Но там у генератора было что-то уровня:
0) Полносвязный (64*3) - слой шума
1) Полносвязный (64*3*16) - учетверение разрешения.
2) Обратная свёртка, шаг 1, дополнение 0, ядро 11x11, ядер 128
3) Удвоение пикселей
4) Обратная свёртка, шаг 1, дополнение 0, ядро 7x7, ядер 32
5) Удвоение пикселей
6) Обратная свёртка, шаг 1, дополнение 0, ядро 7x7, ядер 32
7) Удвоение пикселей
8) Обратная свёртка, шаг 1, дополнение 0, ядро 5x5, ядер 16
9) Обратная свёртка, шаг 1, дополнение 0, ядро 3x3, ядер 3
Везде, кроме выходного слоя активация LeakyReLu. В выходном - гиперболический тангенс.
В дискриминаторе в обратном порядке. Вместо удвоения - усреднение по 2. Ядра 3x3.
Везде, кроме выходного слоя активация LeakyReLu. В выходном - сигмоид.
Как-то так. Сейчас я компоную по два обратносвёрточные слои ( а в дискриминаторе свёрточные).
А из-за чего возникают артефакты в виде сетки горизонтальных и вертикальных линий? Как это явление называется? :)
Просто там есть слои удвоения пикселей для повышения разрешения. Потом эти удвоенные пиксели должны быть обработаны новыми свёртками до получения изображения. Но проблема в том, что дискриминатор (который оценивает, настоящее изображение или нет) в процессе обучения ещё не понял, что этих линий не должно быть. А раз он не понял, то и генератор забил на всё то, что дискриминатор пропускает. По типу и так сойдёт. :)
@@danieolivo2438 А как сделать, чтобы дискриминатор понял? :)
Обучать его. :) Но тут есть вопрос о необходимой и достаточной структуре сети, которая вообще сможет запомнить такие нюансы в изображениях.
хмм
есть у s3tl трек и фоном как раз в похожем стиле
Где я трек взял, я указал под видео. :)
А всё остальное просто обучение нейронки. Собственно, Рэй и была взята для обучения из-за понравившегося мне трека.