机器学习笔记 - SimSwap 指南:高保真换脸的高效框架

1、换脸技术概述和道德讨论

        Deepfake和换脸在过去几年中已成为一种新趋势。尽管这项技术听起来很疯狂,并已作为一种概念引入市场,但它比以往任何时候都更受欢迎。社交媒体空间最近充斥着人们交换面孔并冒充他们最喜欢的偶像的图像和视频,无论是政治家、顶级音乐家、演员还是其他备受推崇的人物。它正在与另一个人交换你的脸,并且只有在正确的意图下才会产生有趣的图片和视频。Face Swap 应用程序使您可以独自享受很多乐趣,也可以与朋友一起创建可能席卷社交媒体的内容。模仿著名的好莱坞演员或流行歌星从未如此简单,因为您只需与您最喜欢的名人交换面孔即可。同样重要的是要注意,您将能够获得的结果完全取决于应用程序的换脸功能。Deepfake 等新的和即将出现的技术对此也有一个有趣的看法,您可以在其中替换和交换其他人的脸,并创建一个完美无瑕的视频,看起来完全真实。基于 Deepfake 概念的易于访问和高度下载的移动应用程序,例如 Reface 和 MSQRD,正在被用来感受知名人士的感受;但是用你的脸!您可以在其中与其他人替换和交换面孔,并创建一个完美无瑕的视频,看起来完全真实。基于 Deepfake 概念的易于访问和高度下载的移动应用程序,例如 Reface 和 MSQRD,正在被用来感受知名人士的感受;但是用你的脸!您可以在其中与其他人替换和交换面孔,并创建一个完美无瑕的视频,看起来完全真实。基于 Deepfake 概念的易于访问和高度下载的移动应用程序,例如 Reface 和 MSQRD,正在被用来感受知名人士的感受;但是用你的脸!

        Deepfake 是一种使用深度学习和神经网络的技术,是一种基于 AI 或人工智能的人类合成技术,用于使用生成对抗网络(如深度学习技术GAN )将现有图像和视频组合并叠加到源图像或视频上。将现有源视频与图像相结合以进行变形显然会产生“假”视频,该视频显示一个或多个人在现实生活中从未真正发生过的事件中执行动作。GAN 是一种神经网络,其中两个不同的网络相互协调。一个网络生成假货或生成网络,因为它可以被称为,另一个评估它们看起来有多真实和不同。

        多年来,换脸一直在电影中被灌输。高技能的视频编辑和计算机生成的图像或 CGI 专家需要花费几个小时使用大量计算能力才能获得不错的结果。今天,随着新技术的新突破,任何拥有深度学习技术和强大图形处理单元的人都可以制作出远远优于旧电影中传统换脸技术的假视频和图像。现在不需要繁重的视频编辑技能,因为整个过程由算法自动处理。但如今,此类技术也被滥用于在群众中制造仇恨和/或为人们的政治议程制造仇恨。

2、什么是 SimSwap?

        SimSwap 是一个高效的框架,旨在推广高保真人脸交换。与以前的传统方法要么缺乏泛化到任意身份的能力,要么无法保留和检测特定的不同属性(如面部表情和注视方向)相比,SimSwap 的框架可以轻松地将任意源人脸的身份转换为任意目标人脸,同时保留目标人脸的属性。上述过程以以下两种方式进行。首先,ID 注入模块 (IIM) 在特征级别将源人脸的身份信息传递给目标人脸。通过使用这个模块,它将身份特定的人脸交换算法的架构扩展到任意人脸交换的框架。第二,使用 Wea​​k Feature Matching Loss Efficiently 有助于框架保留和隐式保存面部属性。编码器在此过程中从目标面部提取包含身份和属性信息的目标特征。由于解码器仅设法将目标的特征转换为具有源身份的图像,因此源人脸的身份信息被集成到解码器的权重中。因此,DeepFakes 中的解码器只能应用于一个特定的身份。工业换脸方式是利用先进的设备来重构演员的面部模型,重建场景的光照条件,这是大多数人无法企及的。最近,近来,利用 SimSwap 等技术实现无需高端设备的换脸技术引起了研究人员的关注。SimSwap 完全有能力实现与其他此类技术相比具有竞争力的身份性能,同时比以前的最先进方法更好地保留属性。 

3、创建自己的换脸模型

        我们将尝试使用 SimSwap 创建我们的换脸模型。我们将在视频上实现人脸交换,用不同的人脸图像替换目标视频中的人脸。以下是 SimSwap 创建者的官方实现,可以从此处的链接访问其 GitHub。

GitHub - neuralchen/SimSwap: An arbitrary face-swapping framework on images and videos with one single trained model!icon-default.png?t=M4ADhttps://github.com/neuralchen/SimSwap        安装

 !git clone https://github.com/neuralchen/SimSwap
 !cd SimSwap && git pull 

        然后我们将安装所有依赖项以开始使用以下代码

!pip install insightface==0.2.1 onnxruntime moviepy 
!pip install googledrivedownloader 
!pip install imageio==2.4.1

        这里我们使用 Insightface 和imageio。Imageio 是一个 Python 库,它提供了一个接口来读取和写入不同类型的图像数据,例如动画图像和图像中的体积数据。

import os 
os.chdir("SimSwap") #importing SimSwap 模型 

        从 InsightFace 调用先决条件

!wget --no-check-certificate "https://sh23tw.dm.files.1drv.com/y4mmGiIkNVigkSwOKDcV3nwMJulRGhbtHdkheehR5TArc52UjudUYNXAEvKCii2O5LAmzGCGK6IfleocxuDeoKxDZkNzDRSt4ZUlEt8GlSOpCXAFEkBwaZimtWGDRbpIGpb_pz9Nq5jATBQpezBS6G_UtspWTkgrXHHxhviV2nWy8APPx134zOZrUIbkSF6xnsqzs3uZ_SEX_m9Rey0ykpx9w" -O antelope.zip 
!unzip ./antelope.zip -d ./insightface_func/models/

        导入更多依赖项

import cv2
import torch
import fractions
import numpy as np
from PIL import Image
import torch.nn.functional as F
from torchvision import transforms
from models.models import create_model
from options.test_options import TestOptions
from insightface_func.face_detect_crop_multi import Face_detect_crop
from util.videoswap import video_swap
from util.add_watermark import watermark_image 

        我们将开始为我们的面部交换模型构建转换器,其中包含所有导入的内容,它将由一个编码器和解码器组成,以在目标视频上实现我们的面部交换。

 #creating the video transformer
 transformer = transforms.Compose([
         transforms.ToTensor(),
         #transforms.Normalize([0.485, 0.456, 0.406], [0.229, 0.224, 0.225])
     ])
 transformer_Arcface = transforms.Compose([
         transforms.ToTensor(),
         transforms.Normalize([0.485, 0.456, 0.406], [0.229, 0.224, 0.225])
     ])
 detransformer = transforms.Compose([
         transforms.Normalize([0, 0, 0], [1/0.229, 1/0.224, 1/0.225]),
         transforms.Normalize([-0.485, -0.456, -0.406], [1, 1, 1])
     ]) 

        设置目标图像和视频的路径,我们使用演员 Robert Downey Jr 的图像来替换目标视频中的人脸。

opt = TestOptions()
opt.initialize()
opt.parser.add_argument('-f') ## dummy arg to avoid bug
opt = opt.parse()
opt.pic_a_path = './demo_file/Iron_man.jpg' ## image to be replace it with 
opt.video_path = './demo_file/multi_people_1080p.mp4' #Target video Path
opt.output_path = './output/demo.mp4'#Path to save output at 
opt.temp_path = './tmp'
opt.Arc_path = './arcface_model/arcface_checkpoint.tar'
opt.isTrain = False 

        创建我们的神经网络模型,

 crop_size = 224
 torch.nn.Module.dump_patches = True
 model = create_model(opt)
 model.eval()
 app = Face_detect_crop(name='antelope', root='./insightface_func/models')
 app.prepare(ctx_id= 0, det_thresh=0.6, det_size=(640,640))
 pic_a = opt.pic_a_path
 # img_a = Image.open(pic_a).convert('RGB')
 img_a_whole = cv2.imread(pic_a)
 img_a_align_crop, _ = app.get(img_a_whole,crop_size)
 img_a_align_crop_pil = Image.fromarray(cv2.cvtColor(img_a_align_crop[0],cv2.COLOR_BGR2RGB)) 
 img_a = transformer_Arcface(img_a_align_crop_pil)
 img_id = img_a.view(-1, img_a.shape[0], img_a.shape[1], img_a.shape[2])
 # convert numpy to tensor
 img_id = img_id.cuda() 

        训练我们的模型

#create latent id
 img_id_downsample = F.interpolate(img_id, scale_factor=0.5)
 latend_id = model.netArc(img_id_downsample)
 latend_id = latend_id.detach().to('cpu')
 latend_id = latend_id/np.linalg.norm(latend_id,axis=1,keepdims=True)
 latend_id = latend_id.to('cuda')
 video_swap(opt.video_path, latend_id, model, app, opt.output_path,temp_results_dir=opt.temp_path) 

        输出

 input mean and std: 127.5 127.5
 find model: ./insightface_func/models/antelope/glintr100.onnx recognition
 find model: ./insightface_func/models/antelope/scrfd_10g_bnkps.onnx detection
 set det-size: (640, 640)
   0%|          | 0/594 [00:00<?, ?it/s](142, 366, 4)
 100%|██████████| 594/594 [08:19<00:00,  1.19it/s]
 [MoviePy] >>>> Building video ./output/demo.mp4
 [MoviePy] Writing audio in demoTEMP_MPY_wvf_snd.mp3
 100%|██████████| 438/438 [00:00<00:00, 635.28it/s][MoviePy] Done.
 [MoviePy] Writing video ./output/demo.mp4
 100%|██████████| 595/595 [00:55<00:00, 10.69it/s]
 [MoviePy] Done.
 [MoviePy] >>>> Video ready: ./output/demo.mp4 

        Face Swapped Video 将保存在上述路径中,输出为

        在本文中,我们使用 SimSwap 库探索了面部交换和 deepfake 领域。 我们已经实现了一个换脸模型,它用我们的图像替换了目标视频。 您可以尝试使用不同的面孔和更复杂的图像来查看 SIMSwap 对它们的行为。 您可以在此处找到此 colab 实现的链接。
https://colab.research.google.com/drive/1PJw8wFN-VItYGOmtAJfeWUeYBJ4lFl6j?usp=sharingicon-default.png?t=M4ADhttps://colab.research.google.com/drive/1PJw8wFN-VItYGOmtAJfeWUeYBJ4lFl6j?usp=sharing

4、其它著名换脸工具

        FaceSwap 是一种利用深度学习来识别和交换图片和视频中的人脸的工具。

https://github.com/deepfakes/faceswapicon-default.png?t=M4ADhttps://github.com/deepfakes/faceswap

猜你喜欢

转载自blog.csdn.net/bashendixie5/article/details/124862733