窝牛号

这个AI换脸算法,让马斯克也体验了一把当钢铁侠——SberSwap算法

硅谷“钢铁侠”,让马斯克真正体验一下当钢铁侠的感觉

AI换脸

上期视频,我们分享了一个让马斯克体验当钢铁侠的视频,其中使用到了AEI-Net SberSwap换脸技术,也许,你没有听说过SberSwap,但是大名鼎鼎的deepfake你肯定听说过。

——1——

什么是SberSwap

下图是一个名为AEI-Net的 SberSwap 模型图,由三部分组成。

第一个是身份编码器,它从图像Xs中找到向量Zid,与将Xs嵌入描述图像中人脸身份的空间有关的编码器。

第二种是Multi-level Attributes Encoderd,其结构与 U-Net 相同,从图像Xt中提取特征Zatt。与将X emb嵌入到空间中有关的编码器,该空间描述了交换面部时要保留的属性。

第三个是AAD 生成器,它根据这些信息生成所需的图像。

AEI-Net的体系结构

身份编码器

该子网将源图像Xs投影到低维特征空间。提取人脸的不同信息,例如眼睛的形状大小,眼睛与嘴巴之间的距离,嘴巴的弯曲度等等。

身份编码器

AADGenerator

AAD Generator是“ Adaptive Attentional Denormalization Generator”的缩写。它以提高的空间分辨率集成了前两个子网的输出,以生成AEI-Net的最终输出。

AAD Generator

AAD(Adaptive Attentional Denormalization)生成器用于将和中的信息结合起来生成,其主要结构是AAD层,见下图(c),其输入为

AAD

——2——

代码实现SberSwap

目标图片

在开始运行代码之前,需要找一张你需要转换人脸的图片以及源图片,或者源视频

代码支持图片转换以及视频转换,然后clone代码

第一步:clone代码,并安装下载预训练模型

!git clone https://github.com/cedro3/sber-swap.git %cd sber-swap 加载检测器 !wget -P ./insightface_func/models/antelope https://github.com/sberbank-ai/sber-swap/releases/download/antelope/glintr100.onnx !wget -P ./insightface_func/models/antelope https://github.com/sberbank-ai/sber-swap/releases/download/antelope/scrfd_10g_bnkps.onnx 安装第三方库 !pip install mxnet-cu101mkl !pip install onnxruntime-gpu==1.8 !pip install insightface==0.2.1 !pip install kornia==0.5.4 初始化模型,并加载模型 app = Face_detect_crop(name=&39;, root=&39;) app.prepare(ctx_id= 0, det_thresh=0.6, det_size=(640,640)) G = AEI_Net(backbone=&39;, num_blocks=2, c_id=512) G.eval() G.load_state_dict(torch.load(&39;, map_location=torch.device(&39;))) G = G.cuda() G = G.half() netArc = iresnet100(fp16=False) netArc.load_state_dict(torch.load(&39;)) netArc=netArc.cuda() netArc.eval() handler = Handler(&39;, 0, ctx_id=0, det_size=640) use_sr = True if use_sr: os.environ[&39;] = &39; torch.backends.cudnn.benchmark = True opt = TestOptions() model = Pix2PixModel(opt) model.netG.train()

初始化模型,加载预训练模型,初始化完成后,我们就可以输入自己的图片或者视频进行AI人脸转换了

AI换脸

第三步:图片AI换脸

source = &39; 39;targer.jpg&输入目标需要转换的图片 source_full = cv2.imread(source) crop_size = 224 batch_size = 40 source = crop_face(source_full, app, crop_size)[0] source = [source[:, :, ::-1]] target_full = cv2.imread(target) full_frames = [target_full] target = get_target(full_frames, app, crop_size) final_frames_list, crop_frames_list, full_frames, tfm_array_list = model_inference(full_frames,source,target,netArc, G,app,set_target = False,crop_size=crop_size,BS=batch_size) result = get_final_image(final_frames_list, crop_frames_list, full_frames[0], tfm_array_list, handler) cv2.imshow(&39;, result) cv2.imwrite(&39;, result)

这里加载2张图片,一张原始图片,一张需要AI换脸的图片,通过模型后,便可以得到AI换脸后的图片了

AI换脸

第四步:视频AI换脸

source = &39; 39;test.mp4&目标视频 source_full = cv2.imread(source) result = &34; crop_size = 224 batch_size = 40 source = crop_face(source_full, app, crop_size)[0] source = [source[:, :, ::-1]] full_frames, fps = read_video(video) target = get_target(full_frames, app, crop_size) final_frames_list, crop_frames_list, full_frames, tfm_array_list = model_inference(full_frames,source,target,netArc, G, app, set_target = False,crop_size=crop_size, BS=batch_size) if use_sr: final_frames_list = face_enhancement(final_frames_list, model) get_final_video(final_frames_list, crop_frames_list, full_frames, tfm_array_list,result,fps, handler) add_audio_from_another_video(video, result, &34;)代码源链接 https://github.com/ai-forever/sber-swap

AI换脸

本站所发布的文字与图片素材为非商业目的改编或整理,版权归原作者所有,如侵权或涉及违法,请联系我们删除

窝牛号 wwww.93ysy.com   沪ICP备2021036305号-1