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

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

toyiye 2024-06-21 11:55 9 浏览 0 评论

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

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 ./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

AI换脸

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换脸

第三步:图片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换脸

第四步:视频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

AI换脸

相关推荐

为何越来越多的编程语言使用JSON(为什么编程)

JSON是JavascriptObjectNotation的缩写,意思是Javascript对象表示法,是一种易于人类阅读和对编程友好的文本数据传递方法,是JavaScript语言规范定义的一个子...

何时在数据库中使用 JSON(数据库用json格式存储)

在本文中,您将了解何时应考虑将JSON数据类型添加到表中以及何时应避免使用它们。每天?分享?最新?软件?开发?,Devops,敏捷?,测试?以及?项目?管理?最新?,最热门?的?文章?,每天?花?...

MySQL 从零开始:05 数据类型(mysql数据类型有哪些,并举例)

前面的讲解中已经接触到了表的创建,表的创建是对字段的声明,比如:上述语句声明了字段的名称、类型、所占空间、默认值和是否可以为空等信息。其中的int、varchar、char和decimal都...

JSON对象花样进阶(json格式对象)

一、引言在现代Web开发中,JSON(JavaScriptObjectNotation)已经成为数据交换的标准格式。无论是从前端向后端发送数据,还是从后端接收数据,JSON都是不可或缺的一部分。...

深入理解 JSON 和 Form-data(json和formdata提交区别)

在讨论现代网络开发与API设计的语境下,理解客户端和服务器间如何有效且可靠地交换数据变得尤为关键。这里,特别值得关注的是两种主流数据格式:...

JSON 语法(json 语法 priority)

JSON语法是JavaScript语法的子集。JSON语法规则JSON语法是JavaScript对象表示法语法的子集。数据在名称/值对中数据由逗号分隔花括号保存对象方括号保存数组JS...

JSON语法详解(json的语法规则)

JSON语法规则JSON语法是JavaScript对象表示法语法的子集。数据在名称/值对中数据由逗号分隔大括号保存对象中括号保存数组注意:json的key是字符串,且必须是双引号,不能是单引号...

MySQL JSON数据类型操作(mysql的json)

概述mysql自5.7.8版本开始,就支持了json结构的数据存储和查询,这表明了mysql也在不断的学习和增加nosql数据库的有点。但mysql毕竟是关系型数据库,在处理json这种非结构化的数据...

JSON的数据模式(json数据格式示例)

像XML模式一样,JSON数据格式也有Schema,这是一个基于JSON格式的规范。JSON模式也以JSON格式编写。它用于验证JSON数据。JSON模式示例以下代码显示了基本的JSON模式。{"...

前端学习——JSON格式详解(后端json格式)

JSON(JavaScriptObjectNotation)是一种轻量级的数据交换格式。易于人阅读和编写。同时也易于机器解析和生成。它基于JavaScriptProgrammingLa...

什么是 JSON:详解 JSON 及其优势(什么叫json)

现在程序员还有谁不知道JSON吗?无论对于前端还是后端,JSON都是一种常见的数据格式。那么JSON到底是什么呢?JSON的定义...

PostgreSQL JSON 类型:处理结构化数据

PostgreSQL提供JSON类型,以存储结构化数据。JSON是一种开放的数据格式,可用于存储各种类型的值。什么是JSON类型?JSON类型表示JSON(JavaScriptO...

JavaScript:JSON、三种包装类(javascript 包)

JOSN:我们希望可以将一个对象在不同的语言中进行传递,以达到通信的目的,最佳方式就是将一个对象转换为字符串的形式JSON(JavaScriptObjectNotation)-JS的对象表示法...

Python数据分析 只要1分钟 教你玩转JSON 全程干货

Json简介:Json,全名JavaScriptObjectNotation,JSON(JavaScriptObjectNotation(记号、标记))是一种轻量级的数据交换格式。它基于J...

比较一下JSON与XML两种数据格式?(json和xml哪个好)

JSON(JavaScriptObjectNotation)和XML(eXtensibleMarkupLanguage)是在日常开发中比较常用的两种数据格式,它们主要的作用就是用来进行数据的传...

取消回复欢迎 发表评论:

请填写验证码