💛前情提要💛
本文是传知代码平台
中的相关前沿知识与技术的分享~
接下来我们即将进入一个全新的空间,对技术有一个全新的视角~
本文所涉及所有资源均在传知代码平台可获取
以下的内容一定会让你对AI 赋能时代
有一个颠覆性的认识哦!!!
以下内容干货满满,跟上步伐吧~
💡本章重点
- 平行宇宙中的某某某
🍞一. 论文概述
本项目复现了CVPR2024中的一篇题为 CapHuman: Capture Your Moments in Parallel Universes 的文章。该文章旨在实现从单一的面部照片,生成在多样化头部位置、姿势、表情和光照条件等不同场景下的个性化图像。
整个pipeline是基于预训练好的stable diffusion,在此基础上添加了一个新的框架—CapHuman,用于实现:
-
个性化 (Generalizable Identity Preservation): 编码个体的身份特征,并将其对齐到latent space, 用以保持身份的一致性
-
面部细节控制 (Flexible and Fine-grained Head Control): 引入三维面部先验,使得可以灵活且三维一致地控制头部细节生成。
接下来我会详细谈一谈自己对于该模型的理解以及复现过程中遇到的一些问题及解决方式。
🍞二. 模型结构
a) 采用“编码特征然后对齐”的方式来实现可泛化的身份保持;
a.1) 编码特征: ① 全局粗粒度特征:
这里使用一个预训练好的人脸识别特征提取器 Eid 来编码全局特征
② 局部细粒度特征:
这里使用CLIP的image encoder Eimg 来提取局部特征
我们只保留了分割后的面部区域,其余多余区域被去除。
a.2) 对齐:
其中
这里是参考的stable diffusion中注入text等condition的方式(即cross atttention). fl 是 latent feature
b) 引入三维参数化面部模型,实现灵活且细致的头部控制;
以人类为中心的图像生成往往偏好于对人类头部的灵活、细粒度和精确控制。 然而,现在功能强大的预训练文本到图像的扩散模型缺乏这种控制能力。人们认为,这些预训练模型已经学习到了有关不同头部位置、姿态、面部表情和光照条件的多样化人类图像的内部结构先验。我们的目标是通过引入适当的控制信号作为触发器来解锁其能力。
我们使用预训练好的面部特征提取模型可以获取头部条件 H,
根据 H 来预测面部掩码 M,来帮助接下来的CapFace模块 π更多的作用于面部区域。
c) 设计了一个CapFace模块 π,以赋予文生图扩散模型上述能力。
CapFace 模块 π 与 Stable Diffusion 编码器具有类似的结构。特征图在每一层都与 Stable Diffusion 解码器部分逐元素对齐。
🍞三.演示效果
🍞四.复现过程(重要)
-
原项目的github链接 CapHuman
-
下载数据集及权重文件,分别放在data和ckpts目录下;
-
如果遇到的网络连接问题,通通改为手动下载
def __init__(self, version="ckpts/clip-vit-large-patch14", device="cuda", max_length=77, freeze=True, layer="last", layer_idx=None): # clip-vit-base-patch32
super().__init__()
assert layer in self.LAYERS
local_model_path =" " # 本地放置模型文件的路径
self.processor = CLIPProcessor.from_pretrained(local_model_path)
self.transformer = CLIPVisionModel.from_pretrained(local_model_path)
FlAME、dlib、mtcnn 等
-
FLAME: 是一个用于生成三维人脸形状和表情的统计模型。其基于大规模的三维人脸扫描,能够捕捉到人脸的广泛变化,包括身份、面部表情(如微笑或皱眉)、和头部姿势(转动、倾斜)等。
-
dlib: 是一个包含机器学习算法的现代C++工具箱,广泛用于工业和学术领域。在计算机视觉领域,其也提供了很多功能,尤其在人脸检测和识别技术方面表现突出。这些功能包括但不限于:人脸检测、人脸特征点检测、人脸识别等。
-
mtcnn: 是一个流行的用于人脸检测和对齐的深度学习模型,特别适用于在图像中同时检测人脸位置和识别人脸关键点(如眼睛、鼻子、嘴角等)
代码文件中提供了对三种人脸识别方式的选择,由于FLAME和dlib的安装我遇到了一些问题,因此我采用的是mtcnn.
🍞五.使用方式(推理过程)
# start
python inference.py --ckpt ckpts/caphuman.ckpt
--vae_ckpt ckpts/vae-ft-mse-840000-ema-pruned.ckpt
--model models/cldm_v15.yaml
--sd_ckpt ckpts/Realistic_Vision_V3.0.ckpt
--input_image examples/input_images/196251.png
--pose_image examples/pose_images/pose1.png
--prompt "a photo of a man wearing a suit in front of Space Needle"
可以替换这里的input_image和pose_image为你想用的图片
使用gradios
python -m gradios.gradio_visualization
--ckpt ckpts/caphuman.ckpt
--vae_ckpt ckpts/vae-ft-mse-840000-ema-pruned.ckpt
--model models/cldm_v15.yaml
--sd_ckpt ckpts/Realistic_Vision_V3.0.ckpt
🫓总结
综上,我们基本了解了“一项全新的技术啦” 🍭 ~~
恭喜你的内功又双叒叕得到了提高!!!
感谢你们的阅读😆
后续还会继续更新💓,欢迎持续关注📌哟~
💫如果有错误❌,欢迎指正呀💫
✨如果觉得收获满满,可以点点赞👍支持一下哟~✨
【传知科技 – 了解更多新知识】