CFengFeng / face-nn

游戏捏脸,基于神经风格迁移框架生成逼真人脸

Home Page:https://huailiang.github.io

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

基于神经网络捏脸

Reinferences

1.  Unity-2019.2.1f1
2.  python-3.5
3.  tensorboardX
4.  dlib-19.18
5.  numpy-1.15.4
6.  torch-1.1.0
7.  opencv-contrib-python 3.4.0.12
8.  tqdm-4.23.4
9.  argparse-1.4.0
10. scipy-1.0.1
11. Pillow

论文

网易伏羲实验室、密歇根大学、北航和浙大的研究者提出了一种游戏角色自动创建方法,利用 Face-to-Parameter 的转换快速创建游戏角色,用户还可以自行基于模型结果再次进行修改,直到得到自己满意的人物。此项目按照论文里的描述建立。

Face-to-ParameterTranslationforGameCharacterAuto-Creation

引擎预览

打开Unity, 点击菜单栏Tools->Preview, 通过此工具可以手动去捏脸。当然, 此项目是通过神经网络生成参数params。

Database

打开Unity, 点击菜单栏Tools->GenerateDatabase

在export会生成两个文件夹trainset和testset, 分别用作训练集和测试集。 trainset随机生成的噪点大概是1/95。

这里由引擎随机生成2000张图片, 其中80%用作训练集, 20%用作验证集。同时在图片同目录会生成二进制文件db_description,记录捏脸相关的参数。

生成图片分辨率:512x512, 代替论文的是这里使用Unity引擎代替Justice引擎。

脸部对齐 - Face alignment

对于输入图片,通过此工具dlib进行脸部截取。

pip3 install dlib

dlib 引用模型下载地址:

http://dlib.net/files/shape_predictor_68_face_landmarks.dat.bz2

http://dlib.net/files/dlib_face_recognition_resnet_model_v1.dat.bz2

LightCNN

light_cnn出自2016 cvpr吴翔A Light CNN for Deep Face Representation with Noisy Labels,light_cnn优势在于一个很小的模型和一个非常不错的识别率。论文里使用LightCNN用于生成256 demonsion 信息,进而得到Loss函数L1, 即Discriminative Loss, 衡量引擎生成的图片和Imitator生成的图片差异。

训练好的模型下载连接:

google driver: LightCNN-29 v2

baidu yun: LightCNN-29 v2

人脸分割

论文里使用人脸分割,提取局部面部特征, 从而计算Facial Content Loss, 下面列出了我网上找到相关的人脸分割的相关介绍和数据集。

  1. 介绍

    图像解析与编辑[**科学院信息工程研究所网络空间技术实验室ppt]: https://pan.baidu.com/s/1FYznfGG914pPaU5bs0-4dw

  2. 数据集

    helen_small4seg

    https://share.weiyun.com/5Q9ST03 密码:ndks4g

不同于论文里使用的resnet50,此项目引用的模型是resnet18。

预训练model: https://pan.baidu.com/s/1AEc7CJGirsdxOouD3boRBQ

下载后存放在face-parsing.PyTorch/res/cp 目录下

最后的效果如图:

去掉skybox(背景), 然后隐藏掉身体和脖子部分, 处理效果后如下:

利用openCV的candy算法, 提取脸部轮廓:

Operation

训练 train

进入git 下载目录, 按照下面命令就可以train, 训练的时候每隔100步会生成preview 图片,实时查看训练结果; 每隔500步就会保存下当前模型, 保存在model文件夹下

cd /path/to/workdir

cd neural/

mkdir dat/

# 这里需要将下载的lightcnn, dlib等模型拷贝过来
copy yours_download_model_path data/

python main.py \
	--phase=train_imitator \
	--batch_size=4 \
	--learning_rate=0.01 \
	--total_steps=30000	\
	--prev_freq=100	\
	--save_freq=500	\
	--path_to_dataset="../export/trainset_female/"

# 开启tensorboard 查看graph运行情况
tensorboard --logdir logs

reinference

如果因为中间因为偶然因素(比如说断电)退出了训练, 又想从之前保存的model中恢复出来, 这时候可以先把model里的模型文件copy到reinference目录, 然后执行下面命令:

python main.py \
	--phase=inference_imitator	\
	--total_steps=30000	\
	--path_to_dataset="../export/trainset_female/"

About

游戏捏脸,基于神经风格迁移框架生成逼真人脸

https://huailiang.github.io

License:MIT License


Languages

Language:HLSL 29.3%Language:Python 29.2%Language:C# 28.9%Language:Mask 5.1%Language:ShaderLab 2.9%Language:Cuda 2.8%Language:C++ 1.5%Language:Shell 0.2%Language:C 0.2%