Изменения

Перейти к: навигация, поиск

Генерация дипфейков с помощью нейронных сетей

527 байт добавлено, 18:11, 13 января 2021
Нет описания правки
'''Дипфейк''' (''англ. Deepfake'') {{---}} результат работы ряда алгоритмов для синтеза изображений человеческого лица или голоса. Алгоритмы, применяемые для решения данной задачи основаны на Порождающе-состязательных сетях. Современные алгоритмы позволяют генерировать не только лицо человека, но и его голос. C таким примером можно ознакомится по ссылке [https://www.youtube.com/watch?v=2svOtXaD3gg Home Stallone DeepFake]
[[Файл:Deep_fake_title_crop.png|thumb|400px|Рисунок 1. Примеры дипфейков #1 <ref name=orig>[https://arxiv.org/pdf/1908.05932.pdf]</ref>]]
Другими словами алгоритм реконструкции является рекурсивным для каждой итерации:
$I_{r_{j}}, S_{r_{j}} = G_r(I_{r_{j - 1}};H(p_j)), I_{r_{0}} = I_s, i < j < n.$.
Наша модель $G_r$ имеет двы выхода. Первый выход выдает изображение с перенесенной геометрией, второй {{---}} маску для сегментации. Так же стоить заметить, что маска для сегментации состоит из трех классов, кожи, прически и фона. Такой подход позволяет увеличить точность всего процесса переноса.
Генераторы обучаются с помощью следующих функций потерь:
$\displaystyle Loss(G_r) = \lambda_{stepwise} Loss_{rec}(I_{r_{n}}, I_{t}) + \lambda_{rec}Loss_{rec}(I_{r}, I_{t}) + \lambda_{adv}Loss_{adv} + \lambda_{seg}Loss_{pixel}(S_r, S_t).$.
$\displaystyle Loss(G_s) = Loss_{CE} + \lambda_{reenact}Loss_{pixel}(S_t, S_{t} {r}).$.
$\displaystyle Loss_{percCE}(x, y) = -\sum_{i = 1}^{nC} t_i \log(f(s)_i),\ t\frac{1{---}{C_i H_i W_i} || F_i(x) - F_i(y) ||_1 \ Правильная\ метка\ класса.$.
$\displaystyle Loss_{pixelperc}(x, y) = \sum_{i = 1}^{n} \frac{1}{C_i H_i W_i} || F_i(x ) - F_i(y ) ||_1 , C_i, H_i, W_i\ {{---}}\ число\ каналов\ и\ размер\ изображения.$.
$\displaystyle Loss_{recpixel}(x, y) = \lambda_{perc} Loss_{perc}(|| x, - y) + \lambda_{pixel} Loss_{pixel}(x, y)||_1 .$.
$\displaystyle Loss_{advrec}(Gx, Dy) = \min_lambda_{Gperc} \max_Loss_{D_1perc}(x, ..., D_n} y) + \sum_lambda_{i = 1}^{npixel} Loss_{GANpixel}(Gx, D_iy).$.
$\displaystyle Loss_{adv}(G, D) = \min_{G} \max_{D_1, ..., D_n} \sum_{i = 1}^{n} Loss_{GAN}(G, D_i).$ $\displaystyle Loss_{GAN}(G, D) = \mathbb{E}_{(x, y)}[\log D(x, y)] + \mathbb{E}_{x} [\log(1 - D(x, G(x)))].$.
Где $G_r$ {{---}} генератор переноса геометрии, $G_s$ {{---}} генератор сегментации лица.
[[Файл:Deep_fake_more_results.png|thumb|400px|Рисунок 2. Примеры дипфейков #2<ref name=orig>[https://arxiv.org/pdf/1908.05932.pdf]</ref>]]
== Перенос сгенерированного лица ==
Пусть $x_{i_{1}}, x_{i_{2}}, x_{i_{3}}$ будут трисом(треугольником) $T$ и $I_{s_{i_{1}}}, I_{s_{i_{2}}}, I_{s_{i_{3}}}$ {{---}} соответствующие лица. Необходимо вычислить барицентрические координаты<ref name=bari>[https://ru.wikipedia.org/wiki/%D0%91%D0%B0%D1%80%D0%B8%D1%86%D0%B5%D0%BD%D1%82%D1%80%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%B8%D0%B5_%D0%BA%D0%BE%D0%BE%D1%80%D0%B4%D0%B8%D0%BD%D0%B0%D1%82%D1%8B Барицентрические координаты]</ref> $\lambda_{1}, \lambda_{2}, \lambda_{3}$ от $x_t$ относительно $x_{i_{1}}, x_{i_{2}}, x_{i_{3}}$. Тогда результат интерполяции:
$\displaystyle I_r = \sum_{k=1}^{3} \lambda_k G_r(I_{s_{i_{k}}}; H(p_t)).$
Где $p_t$ 2D ключевая точка лица $F_t$.
[[Файл:Deep_fake_view.png|right|thumb|450px|Рисунок 3. Карта переноса точек<ref name=orig>[https://arxiv.org/pdf/1908.05932.pdf]</ref>]]
== Вписывание лица ==
Поскольку из-за разницы в углах поворота или разной прически сегментированные маски нужных и исходных изображений могут отличаться видимыми регионами. Например, у одной маски сегментации длинная прическа, которая закрывает пол лица, а у второй маски сегментации класс волос отсутствует. Поэтому нам необходимо "дорисовать" или "стереть" участки, которые не могут быть перенесены напрямую.
Чтобы решить данную задачу мы обучим еще одну модель $G_c$. $G_c$ принимает в себя лицо $F_s$, такое что все необходимые участки будут дорисованы, а ненужные удалены.
Функция потерь такой сети {{---}}}
$\displaystyle Loss(G_c) = \lambda_{rec}Loss_{rec}(I_c, I_t) + \lambda_{adv}Loss_{adv}.$.
== Отрисовка полученного лица ==
Пусть $I_t$ будет исходным лицом, а $I_{r} {t}$ будет нужным нам лицом для переноса и $S_t$ маской сегментации. Тогда используя уравнение Пуассона <ref name=Poisson>[https://en.wikipedia.org/wiki/Poisson%27s_equation Уравнение Пуассона]</ref>, мы можем выполнить цветокоррекцию следующим образом
$\displaystyle P(I_t;I_{r} ^{t};S_t) = arg min ||\nabla f - \nabla I ^{t}_{r}||^{2}_{2}.$
$\displaystyle f(i, j) = I_t(i, j), \forall S_t(i, j) = 0.$
$\nabla$ {{---}} оператор взятия градиента.
$\displaystyle Loss(G_b) = \lambda_{rec}Loss_{rec}(I_t;I_{r} ^{t};S_t), P(I_t;I_{r} ^{t};S_t)) + \lambda_{adv}Loss_{adv}.$
== Данные для обучения и процесс обучения ==
[[Файл:Deep_fake_pipeline.png|thumb|right|450px|Рисунок 4. Общая схема алгоритма<ref name=orig>[https://arxiv.org/pdf/1908.05932.pdf]</ref>]]
В качестве обучающего множества можно использовать множество дата сетов с размеченными лицами, одним из таких служит IJB-C <ref name=ijbc>[https://noblis.org/wp-content/uploads/2018/03/icb2018.pdf IJB-C]</ref>. На нем обучается генератор $G_r$. Данный дата сет состоит из более чем $11$ тысяч видео, $5500$ из которых высокого качества. При обучении кадры из $I_s$ и $I_t$ берутся из двух случайных видео. Так же для начального шага нам был необходим perceptual loss<ref name=perceptual>[https://arxiv.org/abs/1603.08155 Perceptual Losses for Real-Time Style Transfer and Super-Resolution]</ref>, он может быть получен, обучив VGG-19<ref name=vgg>[https://arxiv.org/abs/1409.1556 Very Deep Convolutional Networks for Large-Scale Image Recognition]</ref> модель или взяв готовую обученную на ImageNet<ref name=imagenet>[http://www.image-net.org/ ImageNet]</ref> или VGGFace2<ref name=vggface2>[https://arxiv.org/abs/1710.08092 VGGFace2: A dataset for recognising faces across pose and age]</ref>, второй дата сет предпочтительный, поскольку для его обучения используются только лица.
* [[К-d деревья и перечисление точек в произвольном прямоугольнике (статика)]]
* [[Триангуляция Делоне]]
* [[Генерация изображения по тексту]]
==Примечания==
30
правок

Навигация