其他
张东升,我知道是你!如何使用GAN做一个秃头生产器
喜欢就关注我们吧!
最近一部电视剧《隐秘的角落》在网上引起了众多讨论,要说这是2020年全网热度最高的电视剧也不为过。而剧中反派Boss张东升也是网友讨论的话题之一,特别是他的秃头特点,已经成为一个梗了。
看过这部剧后,我突然很想知道自己秃头是什么样子,于是查了一下飞桨官网,果然它有图片生成的模型库。那么,我们如何使用PaddlePaddle做出一个秃头生成器呢。
生成对抗网络介绍
StarGAN多领域属性迁移
AttGAN利用分类损失和重构损失来保证改变特定的属性
STGAN只输入有变化的标签,引入GRU结构,更好的选择变化的属性
实验过程
1. 准备数据集
unzip data/data21325/imgAlignCeleba.zip -d dataset/
cp data/data21325/*.txt -d dataset/
2. 获取模型
# paddlepaddle/models的仓库里含有其支持的所有gan模型
!git clone https://gitee.com/paddlepaddle/models.git -b release/1.8
!cp -r models/PaddleCV/gan/* ./work/
3. 开始训练
%cd ~/dataset
!python ../work/train.py --model_net STGAN \ # 指定stgan模型网络
--data_dir ../dataset \ # 数据集目录
--dataset . \ # 数据集相对位置
--crop_size 170 \
--image_size 128 \
--train_list ../dataset/attr_celeba.txt \ # 训练集位置
--gan_mode wgan \
--batch_size 32 --print_freq 1 \
--num_discriminator_time 5 \
--epoch 50 \
--dis_norm instance_norm \
--output ~/output/stgan/
4. 开始推理
# 输入的参数可以看看infer_bald.py开头的解释哦,主要需要注意的是
# n_samples:它的个数决定了输出的结果图中含有几张图的结果,我设置为1,那么就会只有一张图的属性变换输出。
# crop_size、image_size最好不要修改,经过我测试会影响效果,因此最好把图片控制在178的宽度
!python ./work/infer_bald.py \
--model_net STGAN \
--init_model ./33/ \
--dataset_dir my_dataset \
--test_list dataset/test1.txt \
--use_gru True \
--output ./infer_result/stgan/ \
--n_samples 1 \
--selected_attrs "Bald,Bangs,Black_Hair,Blond_Hair,Brown_Hair,Bushy_Eyebrows,Eyeglasses,Male,Mouth_Slightly_Open,Mustache,No_Beard,Pale_Skin,Young" \
--c_dim 13 \
--crop_size 178 \
--image_size 128 \
--load_height 128 \
--load_width 128 \
--crop_height 128 \
--crop_width 128 \
5. 秃头效果展示
效果结论
因为stgan只用输入变化的属性,原infer会循环变化每个一个风格属性(Bald,Bangs等),我把切换风格属性的循环,修改成了只输入秃头属性,然后循环逐渐改变变化程度,使其结果产生渐变效果
这里我发现男性中头发是短发的秃头化效果,明显比长发男性好,头发蓬松就会影响秃头效果,因为蓬松的头发遮盖了脑袋的形状,也有可能是训练集缺少这类男性图片的原因。第一张图是最自然的,看起来也最真,应该是寸头短发的因素。 输入图片的大小接近128x128,或者178x178,效果会比较好,原因可能是训练集的大小都是128x128。官方这里也说明:(http://https//www.paddlepaddle.org.cn/hubdetail?name=stgan_celeba&en_category=GANs) 待处理图片尽量只露脸,当五官是朝向正前方且露出五官时,效果会比较好。 待处理图片的尺寸接近 128 * 128 像素时,效果会比较好。
使用PaddleHub
!pip install paddlehub==1.6.1 -i https://pypi.tuna.tsinghua.edu.cn/simple
!hub install stgan_celeba
stgan = hub.Module(name="stgan_celeba")
test_img_path = ["my_dataset/img_align_celeba/000003.jpg"]
# org_info是一个只有一个元素的列表 如:["Bald,Bangs"]
# org_info要尽可能详细的说明输入图片的特征情况,否则会影响输出效果:
# 必须填写性别( "Male" 或 "Female")可选值"Bald", "Bangs", "Black_Hair", #"Blond_Hair", "Brown_Hair", "Bushy_Eyebrows", "Eyeglasses", #"Mouth_Slightly_Open", "Mustache", "No_Beard", "Pale_Skin", "Aged"
org_info = ["Male"]
# 指定要变化的特征:秃头
trans_attr = ["Bald"]
# set input dict
input_dict = {"image": test_img_path, "style": trans_attr, "info": org_info}
# execute predict and print the result
results = stgan.generate(data=input_dict)
print(results)
感谢
END
Intel 20G 内部资料泄露,含源码、文档与培训视频等内容1Password 官方:年内推出 Linux 版本,后端完全采用 Rust 编写
觉得不错,请点个在看呀!