人脸重建模型以单张人像图作为输入,利用层次化表征实现快速人脸几何、纹理恢复,输出高精度3D人脸重建mesh,相关论文HRN已被CVPR2023接收。
该模型在单图人脸重建榜单 REALY 中取得了正脸、侧脸重建双榜第一!
可在界面右侧在线体验模块进行一键试用,需要注意的是:
页面无法支持displacement map的渲染,因此只能展示重建纹理及中频细节,可利用下方代码范例导出高频细节的展示结果。
初次使用等待时间可能较长(模型初始化、排队、网络传输等因素),需要一分钟左右,请耐心等待。
如果渲染结果脸部有大量白点(非modelscope水印),可能与chrome浏览器版本有关,请升级到最新版后进行试用。
在该模型中,我们提出了一种新颖的层次化表征网络 (HRN),以实现单图的高精细人脸重建。 具体来说,我们将人脸几何拆解为低频部分、中频细节以及高频细节三个部分,并引入了层次化表征分别对其进行建模(如下图),从而实现精细的人脸建模。
本模型在原始HRN的基础上做了少许改动,以提升效果和鲁棒性:
使用方式:
推理时间:
使用范围:
目标场景:
本模型基于pytorch进行训练和推理,在ModelScope框架上,提供输入图片,即可以通过简单的Pipeline调用来使用人脸重建模型。
安装好基础modelscope环境后,安装nvdiffrast
# 安装nvdiffrast
git clone https://github.com/NVlabs/nvdiffrast.git
cd nvdiffrast
pip install .
# 安装nvdiffrast所需依赖(opengl等)
apt-get install freeglut3-dev
apt-get install binutils-gold g++ cmake libglew-dev mesa-common-dev build-essential libglew1.5-dev libglm-dev
apt-get install mesa-utils
apt-get install libegl1-mesa-dev
apt-get install libgles2-mesa-dev
apt-get install libnvidia-gl-525
当前模型依赖gpu进行3D渲染,请在gpu环境进行试用、测试
import os
import cv2
from moviepy.editor import ImageSequenceClip
from modelscope.models.cv.face_reconstruction.utils import write_obj
from modelscope.outputs import OutputKeys
from modelscope.pipelines import pipeline
from modelscope.utils.constant import Tasks
def save_results(result, save_root):
os.makedirs(save_root, exist_ok=True)
# export obj and texture
mesh = result[OutputKeys.OUTPUT]['mesh']
texture_map = result[OutputKeys.OUTPUT_IMG]
mesh['texture_map'] = texture_map
write_obj(os.path.join(save_root, 'hrn_mesh_mid.obj'), mesh)
# export rotation video
frame_list = result[OutputKeys.OUTPUT]['frame_list']
video = ImageSequenceClip(sequence=frame_list, fps=30)
video.write_videofile(
os.path.join(save_root, 'rotate.mp4'), fps=30, audio=False)
del frame_list
# save visualization image
vis_image = result[OutputKeys.OUTPUT]['vis_image']
cv2.imwrite(os.path.join(save_root, 'vis_image.jpg'), vis_image)
print(f'Output written to {os.path.abspath(save_root)}')
face_reconstruction = pipeline(Tasks.face_reconstruction, model='damo/cv_resnet50_face-reconstruction', model_revision='v2.0.0-HRN')
result = face_reconstruction('data/test/images/face_reconstruction.jpg')
save_results(result, './face_reconstruction_results')
如果你觉得这个该模型对有所帮助,请考虑引用下面的相关的论文:
@misc{lei2023hierarchical,
title={A Hierarchical Representation Network for Accurate and Detailed Face Reconstruction from In-The-Wild Images},
author={Biwen Lei and Jianqiang Ren and Mengyang Feng and Miaomiao Cui and Xuansong Xie},
year={2023},
eprint={2302.14434},
archivePrefix={arXiv},
primaryClass={cs.CV}
}