百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 编程字典 > 正文

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

toyiye 2024-06-28 10:15 34 浏览 0 评论

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

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

——1——

什么是SberSwap

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

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

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

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

身份编码器

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

AADGenerator

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

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

——2——

代码实现SberSwap

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

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

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

!git clone https://github.com/cedro3/sber-swap.git
%cd sber-swap
#加载模型
!wget -P ./arcface_model https://github.com/sberbank-ai/sber-swap/releases/download/arcface/backbone.pth
!wget -P ./arcface_model https://github.com/sberbank-ai/sber-swap/releases/download/arcface/iresnet.py
# 加载检测器
!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
# 加载模型
!wget -P ./weights https://github.com/sberbank-ai/sber-swap/releases/download/sber-swap-v2.0/G_unet_2blocks.pth
!wget -P ./weights https://github.com/sberbank-ai/sber-swap/releases/download/super-res/10_net_G.pth
#安装第三方库
!pip install mxnet-cu101mkl
!pip install onnxruntime-gpu==1.8
!pip install insightface==0.2.1
!pip install kornia==0.5.4
#  import第三方库
import cv2
import torch
import time
import os
from utils.inference.image_processing import crop_face, get_final_image, show_images
from utils.inference.video_processing import read_video, get_target, get_final_video, add_audio_from_another_video, face_enhancement
from utils.inference.core import model_inference
from network.AEI_Net import AEI_Net
from coordinate_reg.image_infer import Handler
from insightface_func.face_detect_crop_multi import Face_detect_crop
from arcface_model.iresnet import iresnet100
from models.pix2pix_model import Pix2PixModel
from models.config_sr import TestOptions

python代码之前,请clone源代码,并安装模型需要的第三方库,并导入相关的库

第二步:模型初始化

# 初始化模型,并加载模型
app = Face_detect_crop(name='antelope', root='./insightface_func/models')
app.prepare(ctx_id= 0, det_thresh=0.6, det_size=(640,640))
G = AEI_Net(backbone='unet', num_blocks=2, c_id=512)
G.eval()
G.load_state_dict(torch.load('weights/G_unet_2blocks.pth', map_location=torch.device('cpu')))
G = G.cuda()
G = G.half()
netArc = iresnet100(fp16=False)
netArc.load_state_dict(torch.load('arcface_model/backbone.pth'))
netArc=netArc.cuda()
netArc.eval()
handler = Handler('./coordinate_reg/model/2d106det', 0, ctx_id=0, det_size=640)
use_sr = True
if use_sr:
    os.environ['CUDA_VISIBLE_DEVICES'] = '0'
    torch.backends.cudnn.benchmark = True
    opt = TestOptions()
    model = Pix2PixModel(opt)
    model.netG.train()

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

第三步:图片AI换脸

source = 'source.jpg' #输入源图片
target = '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('result', result)
cv2.imwrite('result.png', result)

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

第四步:视频AI换脸

source = 'source.jpg' #需要换脸的图片
video = 'test.mp4' #目标视频
source_full = cv2.imread(source)
result = "result.mp4"
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, "audio")
代码源链接
https://github.com/ai-forever/sber-swap

相关推荐

「编程」Java GUI 基础(java编程语言基础)

图形化学习是外功,内功外功配合才能所向披靡。一、JFrameJAVASWING导入包importjavax.swing.*导入包importjava.awt.*JFrameframe=new...

这六个Java技术当年是多么风光,而现在又有几个人用过

嗨,雷猴啊,今天我给大家分享下我的开发历程中,我知道的那些被淘汰的技术或者框架。不知道你们都知道吗?也不知道你们都有没有用过,但是它们之前都是风靡一时,让我们再来了解一次吧。偷偷告诉大家有些我甚至都没...

开发第一个Swing程序(开发第一个java程序实验报告)

packagecom.web.www;importjavax.swing.*;/**第一个Swing程序*/publicclassSwing1extendsJFrame{publicSw...

Java课程设计项目实例《远程屏幕分享监视》第2部分

Java课程设计项目实例《远程屏幕分享监视》第2部分1、服务器端ScreenMonitoringServer程序类及相关的功能方法的编程实现(1)创建出服务器端的ScreenMonitoringSer...

新手学Java编程语言怎么入门?知识点都帮你整理好了

新手学Java编程语言怎么入门?下面和千锋广州小编一起来看看吧!掌握语言基础是第一步,了解Java基础知识,Java关键字、核心概念或者基本编码技术。掌握操作符、控制执行流程、访问权限控制、复用类、多...

Java Swing组件“HelloWorld”程序演示实例

Java源代码:/*首先导入Swing需要的包*/importjavax.swing.*;importjavax.swing.UIManager;importjava.awt.*;import...

新年Java小游戏之「年兽大作战」祝您笑口常开

这个游戏加上编写文章,上班摸鱼时间加上回家的空闲时间,大概花了三天多。java写这玩应真的很痛苦,各种状态位,各种图片和逻辑判断,脑袋都快炸了。而且肯定没有前端的精致,效果一般,偶尔会有卡顿,各位就图...

10分钟掌握 JMeter接口测试的基础入门

嘿。大家好,我是4U:...

JMeter 的简单安装说明(jmeter安装配置)

最近在做一组性能测试,接触到了JMeter这个测试工具,在这里记录一下JMeter的介绍以及简单安装过程。JMeter简介...

Jmeter压测实例分享——新手儿也能一学就会!

JMeter是Apache组织开发的基于Java的压力测试工具。用于对软件做压力测试,它最初被设计用于Web应用测试,但后来扩展到其他测试领域。它可以用于测试静态和动态资源,例如静态文件、Java...

过年必备Java动态烟花教程如何用Canvas和Timer实现炫酷烟花动画

烟花是一种常见的庆祝活动和节日的方式,它们在夜空中绽放出各种颜色和形状,给人们带来美丽和欢乐。你是否想过用Java编程来模拟烟花的效果呢?如果你对此感兴趣,那么这篇教程就是为你准备的。在这篇教程中,你...

全程软件测试(九十五):Jmeter技能基础—读书笔记

jmeter是一款优秀的开源性能测试工具,目前最新版本3.0版本,官网文档地址:http://jmeter.apache.org/usermanual/index.html一、优点...

原创 JAVA Swing JFrame窗口的建立

importjava.awt.*;importjavax.swing.*;publicclassExample1extendsJFrame{//定义一个类继承JFrame类public...

Java Swing组件下的JComboBox组件实例

运行成功的界面:java源代码:一定要注意:执行环境(JRE)javaSE-1.8/*首先导入JButtontest所需要的包*/importjavax.swing.*;importjavax.s...

Java引包的几种方法(java 引用)

第一种方法可以在Superclass这里输入javax.swing.JFrame进行引包也可以在类体外面输入importjavax.swing.JFrame;进行引包还可以点击JFrame然后点击I...

取消回复欢迎 发表评论:

请填写验证码