Прошло уже полтора года после написания первой статьи про DeepFake, пришло новое понимание, хотя до конца все мне еще не понятно! Главное что DeepFake все еще удивляет, в какой-нибудь онлайн сервис его так и не могут засунуть потому что тут много ручной работы, ну и проблема с вычислительной мощностью тоже остается. А в домашних условиях, когда не жалко ни электричества ни времени, пожалуйста можно уже интересные веши делать с любимыми актерами или вот хотябы например с женой, что гораздо интереснее получается!
Про выбор железа. Можно на любом на котором есть ядра CUDA, но если их мало то будет долго обрабатываться, да можно даже на CPU но обрабатываться будет вечность(одной жизни не хватит). В начале все делал на GIGABYTE RTX 2070 MINI ITX 8Gb 2304 CUDA, потом на NVIDIA PNY RTX A4500 20Gb 7168 CUDA! И сейчас очень жалею что схватил профессиональную карту весной 22 года, хотя тогда по памяти и по ценам она того стоила — сейчас же… Профессиональные карты, они не быстрые — они энергоэффективные, цены на них не падают(и не особо растут потому что изначально уже очень высокие) сейчас дешевле и гораздо выгодней по производительности брать 3090 или 3090 TI, да даже 4090 (но она обрезанная без SLI в два раза увеличить память, для большших моделей по разрешению, собрав бутер не получится) — вот только электричество, производительность на ватт у профессиональных выше!
Для создания DeepFake использую DeepFaceLab на Ubuntu, но можно и на Windows, особой разницы по стабильности нет так же иногда крашится всё, даже если на карте включен ECC!
Собираем данные лица data_src
Требования к лицу (у меня)
— видео с тенями на лице и без
— отсутвие волос на лице, и пальцев и прочее
— и надо смотреть чтобы было похоже на себе, обычно на видео впределах 2-3 лет все похожи на себя
— лицо должно быть на пол экрана, при размере видео 1080p лицо ну хотябы на 30-50% экрана!
Берем Аня Тейлор-Джой на youtube вот эти видео:
https://www.youtube.com/watch?v=AeNW1duZweA
https://www.youtube.com/watch?v=r7bg7swhCvw
https://www.youtube.com/watch?v=yGBrj2azqcc
https://www.youtube.com/watch?v=HjniMU1IgHE
https://www.youtube.com/watch?v=vYw38mwFmC8
Тут конечно больше всего лица даст видео Anya Taylor-Joy From «Emma» Tells Us About Her First Times, но остальные тоже карйне полезны потому что с тенями и редкими выражениями и позами лица!
Если Аня Тейлор-Джой живет с вами в одной квартире, то вам конечно проще специально её снять для DeepFake, на монотонном фоне, чтобы AI было легце вырезать её лицо. И тени можно создать освещением всякие.
Видео скачиваю и в видео редакторе Kdenlive соединяю их в одно видео, вырезая всё лишнее и всё где мелкое лицо и где прикрыто!
Сохраняю его в папку \DeepFaceLab\workspace под именем data_src.mp4
Получается около 10 минут лица
Теперь запускаем скрипт который из этого видео сделат кадры
\DeepFaceLab\scripts\2_extract_image_from_data_src.sh
Он спросит сколько кадров в секунду брать, я обычно пишу 7 — 12 и формат png. Кадры кладуться сюда \DeepFaceLab\workspace\data_src\
Всго вышло примерно 7500 это не много, но нам пойдет, теперь запускаем скрипт который будет вытасиквать лица из кадров и класть их в \DeepFaceLab\workspace\data_src\align\
\DeepFaceLab\scripts\4_data_src_extract_faces_S3FD.sh
Он спросит:
Face type — что выхватывать я обычно беру wf — всё лицо
Max number of faces from image — естественно 1 одно
Image size — и мне по моему видео достаточно 512
Jpeg quality — 90
Write debug images to aligned_debug? — n
И вот это уже долгий процесс, я смотрю сразу в \DeepFaceLab\workspace\data_src\align\ и не удасчные стараюсь сразу удалить — где лицо прикрыто, где совсем смазано.
Теперь запускаем некую сортировку
\DeepFaceLab\scripts\5.2_data_dst_sort.sh
Тут выбираем лучше лица
[13] best faces
И число близкое к общему количеству лиц например 7000. Итого стало меньше на 81 кадр!
Самое время, подготовить видео на которое будем накладывать лицо Аньи. Его надо сохранить в папке \DeepFaceLab\workspace под именем data_dst.mp4.
И так же вытащить кадры
\DeepFaceLab\scripts\3_extract_image_from_data_dst.sh
И лица
\DeepFaceLab\scripts\5_data_dst_extract_faces_S3FD.sh
параметры такие же
Face type — wf
Image size — 512
Jpeg quality — 90
Удалять тут придется тщательнее, тут больше лиц, появляются они в \DeepFaceLab\workspace\data_dst\align\
И так у нас есть картинки лица какого на кого наложить, но надо на этих картинках выделить самое лицо. Вот тут появляется первая нейросеть, она тоже тренируется, но даже натренированной имеет смысл помочь выделив на кадрах несколько лиц, особенно если на эти лица попадает палец в принимающем видео.
Запускаем распознавание контура лица
Нужна модель для распознования, можно свою качать а можно скачать уже натренерованную мной от сюда
mega.nz/folder/9JoHVKaZ#5ZHqRmeCe0FxPOJlBxgIXg
и кладем в \DeepFaceLab\workspace\model\ все файлы
============= Model Summary ============= == == == Model name: XSeg == == == == Current iteration: 303451 == == == ==----------- Model Options -----------== == == == face_type: wf == == pretrain: False == == batch_size: 16 == == == ==------------ Running On -------------== == == == Device index: 0 == == Name: NVIDIA RTX A4500 == == VRAM: 17.91GB == == == =========================================
Запускаем
\DeepFaceLab\scripts\5_XSeg_data_src_mask_edit.sh
Выделяем линией с первого значка, он для лица. Второй значок для сохранений деталий лица с принимающего видео, например усов или стекающих капель крови.
И так несколько кадров, где сложное или необычное лицо.
По умолчанию нейроесть учится сразу и на принимающих кадрах и на отдающих, так что на принимающих тоже отмечаем.
\DeepFaceLab\scripts\5_XSeg_data_dst_mask_edit.sh
Тут сильно рекомендую промотать все кады в редакторе, во-первых это будет еще одна проверка кадров на вшивость и иногда одно и тоже(нужное нам лицо) опеределяется два раза, и при промотке это будет заметно, второе определяется неправильно и видно как оно дергается на общем фоне… факт наличия этого глюка еще заметен по номуреции файлов, но понять какой правильный можно только просматривая.
И запускаем учебу нейросети
\DeepFaceLab\scripts\5_XSeg_train.sh
тут все по умолчанию
[CPU] : CPU [0] : NVIDIA RTX A4500 [0] Which GPU indexes to choose? : 0
Есть тут и настройки в них можно выйти нажав любую кнопка когда появится
Press enter in 2 seconds to override model settings.
Здесь везде n но имеет смысл установить
Batch_size — у меня 16 зависит от размера памяти видокарты кажется
В открывшемся окне, надо будем смотреть как нейросеть научилась для этого надо нажать:
P — обновить прогресс
[пробел] — переключиться между видами
L — переключиться между графиком прогресса, хорошо когда линия как можно ниже и без скачков
ВАЖНО: Нельзя тут вводить символы при русской раскладке клавиатуры, процесс сразу крашится!
Тут не обезательно ждать вечно, можно остановить учебу, применить эту нейросеть, опять её посмотеть редактором(который запускали выше) обвести лица на сложных кадрах и опять запустить обучение!
Останновить процесс можно нажав [Enter] когда на странице с превью!
Применяем нейросеть на лицах
\DeepFaceLab\scripts\5_XSeg_data_src_mask_apply.sh
\DeepFaceLab\scripts\5_XSeg_data_dst_mask_apply.sh
И смотрим
\DeepFaceLab\scripts\5_XSeg_data_src_mask_edit.sh
\DeepFaceLab\scripts\5_XSeg_data_dst_mask_edit.sh
Чтобы выделился выделение лица надо нажать вот это, выделяет не очень наглядно, просто делается темнее
Если все норм идем дальше
Запускаем обучение нейросети для наложения лица на видео
Настройки мною натренерованной модели
=============== Model Summary ================ == == == Model name: 320A256A128_SAEHD == == == == Current iteration: 1709643 == == == ==------------- Model Options --------------== == == == resolution: 320 == == face_type: wf == == models_opt_on_gpu: True == == archi: liae-ud == == ae_dims: 256 == == e_dims: 128 == == d_dims: 128 == == d_mask_dims: 32 == == masked_training: True == == eyes_mouth_prio: True == == uniform_yaw: False == == blur_out_mask: False == == adabelief: True == == lr_dropout: n == == random_warp: True == == random_hsv_power: 0.0 == == true_face_power: 0.0 == == face_style_power: 0.0 == == bg_style_power: 0.0 == == ct_mode: none == == clipgrad: False == == pretrain: False == == autobackup_hour: 5 == == write_preview_history: False == == target_iter: 0 == == random_src_flip: False == == random_dst_flip: True == == batch_size: 6 == == gan_power: 0.0 == == gan_patch_size: 40 == == gan_dims: 16 == == == ==--------------- Running On ---------------== == == == Device index: 0 == == Name: NVIDIA RTX A4500 == == VRAM: 17.91GB == == == ==============================================
Скачиваем её от сюда
mega.nz/folder/tE5XTDbT#OFcuuSOVLoUa8Hrj1dt8Lg
и кладем в \DeepFaceLab\workspace\model\ все файлы
Запускаем
\DeepFaceLab\scripts\6_train_SAEHD.sh
Выбираем модель
[0] : 320A256A128
и тут также идем в настройки в них можно выйти нажав любую кнопка когда появится
Press enter in 2 seconds to override model settings.
Все подойдет как у меня но стоит обратить внимание на следующие настройки
Autobackup every N hour — делать настройки каждые штук часов, смотрите по совему диску я делаю каждые 5 часов, если чаще диск забивается, все таки работает пару дней, а модель весит 4Gb!
Batch_size — а вот это во сколько потоков запускать тренировку, это напрямую зависит от количества памяти на вашей видеокарте, у меня 20GB стоит 6, попробуйте крастно снижать, если у вас 12Gb ставьте 3. Если модель поучится и выдаст ошибку или не запустить вообще то снижайте это число.
Ну и все поехали!
Лицо Аньки новое для этой модели, так что начинается вот так — это уже хорошо!
— все не черное, значит модель не рассыпалась
— уже видны черты лица, если бы это модель начиналась с нуля, просто очертания лица появились бы только через пару часов
Тут также
[P] — обновить прогресс
[пробел] — переключиться между видами
L — переключиться между графиком прогресса, хорошо когда линия как можно ниже и без скачков
Через час или через 6000 итирация — уже хорошо, я обычно на зубы смотрю, тут плохо видно но если появляются отдельные зубы значит уже хорошо! Очень мало времени прошло а уже хорошо — но это обьяснимо, во-первых модель уже была натренерована, во втроых всего на 200 кадров накладываем, в третьих но это же Венздей — ноль эмоций на лице!
В предпросмотре появляются совсем кривые картинки, это нормально, модель учится эксперементирует, в конечный результат они не попадут. А вот если на лице (по краям кадра — не страшно) начнут появляется радужные точки или пятны это плохо — модель локально начинает рассыпаться, остается только надеятся что в конечный результат они не попадут, или их будет мало и можно будет вырезать.
Да и на этом обучение не переносятся цвета, это модель для формы лица. Для цвета запустим эту же модель но с другими настройками и она перестанет быть многоразовой, станет одноразовой только под это видео!
Итого училась 13 часа, чем дальше тем улучшения менее заметны но они есть!
Останавливаю нажатием [Enter] и эту модель копирую прям из папки \DeepFaceLab\workspace\model\ в отдельную, это для следующих видео, начинать будем с этой модели.
А теперь добиваюсь цветов, с этим как я понял DeepFaceLab уже плохо справляется и его автор рекомендует использовать AfterEffects или Davinci Resolve, это не свободные порграммы, кто его знает что там происходит и как! Скину всю работу опять на нейросеть может вытянет!
Запускаю опять обучения но меняю параметры.
\DeepFaceLab\scripts\6_train_SAEHD.sh
идем в настройки в них можно выйти нажав любую кнопка когда появится
Press enter in 2 seconds to override model settings.
Batch_size — уменьшаю на один до 5 по другим разам знаю что сейчас память будет больше использоваться и может не хватить.
Use learning rate dropout — тут ставлю y так надо
Enable random warp of samples — тут ставлю n так надо
GAN power — это не трогаю, а вообще это повышает четкость, начинаю обычно с 0.1, если сразу не завалится повышаю еще
Face style power — вот оно тут ставлю 0.002 все эти улучшатели повышают риск колапса модели, конкретно этот параметр выдает черные дыры на лице, так что надо по чуть-чуть.
Запустил утром, вечером подошел посмотреть — вот модель и рассыпалась
Бекапы делал каждые ти часа смотрю и значит развалилась где-то после обеда эх пол дня жег электричество в пустую!
Копирую последную живую модель из \DeepFaceLab\workspace\model\320A256A128_SAEHD_autobackups в \DeepFaceLab\workspace\model и буду уже накладывать, а что делать, все равно после Face style power не особо заметные улучшения, они только на уровне тонов слегка лучше делают картинку!
Запускаем
\DeepFaceLab\scripts\7_merge_SAEHD.sh
Тут все поумолчанию, потом задумается, но надо жать [Tab] когда одумается покажет вот что
Конкретно для этого кадры у меня такие настройки
Mode: overlay mask_mode: learned-prd*learned-dst erode_mask_modifier: 75 blur_mask_modifier: 189 motion_blur_power: 0 output_face_scale: -3 color_transfer_mode: mkl-m sharpen_mode : None blursharpen_amount : 0 super_resolution_power: 0 image_denoise_power: 0 bicubic_degrade_power: 0 color_degrade_power: 0
Для каждой сцены иногда приходиться подбирать свои, так что с этим вам придется возится самим, опишу основные:
mask_mode: — это варианты выделения лица, меняется нажатием [X]
erode_mask_modifier — подрезание накладываемого лица по контуру [W] в меньшую сторону и в большую [S]
blur_mask_modifier — размыливание контуров накладываемого лица больше [E] меньше [D]
output_face_scale — размер накладываемого лица увеличение [J] уменьшение [U]
color_transfer_mode — это единственная настройка реально влияющая на цвет накладываемого лица, отдельно сделать ярче или цветатсей нельзя эх… переключаться [C], тут заметно что разные цветовые схемы по разному нагружают процессор.
blursharpen_amount — делает размытие или четче… чуть-чуть, размытие лучше работает, так же он слегка подрезает контуры, четче [Y], размытие [H]
super_resolution_power — делает четче, не идеально четко но делает, побочный эффект осветление(или наоборот затемнение) четче [T] менее [G]
[~] — посмотреть оригинал
[1], [2], [3], [4] — вернуть накладываемое лицо с разными цветовыми деффектами, но практически всегда подходит только [1]
[?]+[Shift] — применить настройки ко всем кадрам, которые дальше
[>]+[Shift] — обработать все кадры, которые дальше
[?] — обработать один следующий кадр
[ESC] — закончить редактирование
Смотрим, первая сцена — в целом хорошо но не хватает светлости у лицы Аньи…
Тут уже похуже, тени на Ани сильнее чем на оригинале, но все еще похоже на сцену и оттенки кожи тоже имеются
Ну вот тут уже, в конце, плохо — тень так и выделяется, общий оттенок лица, и четкости не хватает так как лицо больше… можно было бы докрутить еще на пару дней оставить обрабатывается и стало бы лучше, а может и нет! DeepFakeLab не придумает нужную тень он может только подогнать существующею слегка, может в этом проблема — не было достаточно близкого лица Аньи для этой сцене, а в других были!
Записываем все в видео
\DeepFaceLab\scripts\8_merged_to_mp4.sh
Появляется в \DeepFaceLab\workspace\ файл result.mp4
Иногда лучше, иногда хуже, это еще не совсем плохо!
Добавить комментарий