上妆卸妆转换(美颜/反美颜)

方案1: 使用 CycleGAN 进行图片“翻译”


使用本套系统,只要输入一张“素颜的图像”,就可以得到一张“化妆美颜的图像”,输入一张“化了妆的图像”,就可以获得一张“卸了妆的素颜图像”。也就是说,可以在上妆和卸妆图像间自由转换!

项目主页:

https://github.com/junyanz/pytorch-CycleGAN-and-pix2pix

项目说明:

本系统使用的 CycleGAN 是一种深度学习模型,要让系统可用,首先得对它进行训练。以下内容将说明运行这个系统所需的软件环境,以及收集处理训练数据,训练这个系统的方法,最后是训练完成后,使用系统的方法。

使用方法


Step1:安装软件环境

1.1系统需求

  • Linux or macOS
  • Python 2 or 3
  • CPU or NVIDIA GPU + CUDA CuDNN

1.2软件安装

  • 从官网获取 PyTorch 及 vision http://pytorch.org
  • 安装 visdom 和 dominate

1.3获取本套系统源码


Step2:收集、处理训练数据

要训练系统,必须找到大量的“上妆/卸妆”图片。

2.1收集训练数据

了解到国外有研究组研究过“上妆/卸妆”相关的课题,可以通过写信的方式索要数据集。
http://www.antitza.com/makeup-datasets.html

如果没能要来数据集,那么只能通过自己收集的方式。
其实“上妆/卸妆”图片是非常好找的,只需要百度搜索“化妆前后对比”,即可找到大量图片。

2.2切分图片

但是自己搜集的图片数据集需要“洗”后才可以使用。

首先需要将两张在一起的图片从中间切开,使用 python 的 PIL/pillow 可以方便的操作图片。

上面的方法可以将一张图片从中间分成两半。

2.3切分人脸


只将图片分开还不够,还要将人脸部分切分出来。因为未切分的图片中包含有“背景、身体、头发”等信息,这对模型学习脸部的“上妆/卸妆”没有任何帮助,反而会影响模型学习效果。
从GitHub中可以找到“cropman”这个工具,能方便的将人脸图片切割出来。

2.4将图片调整至同样大小

虽然模型会自动调整图片的大小,但是模型是使用缩放的方式调整输入图片大小,会影响图像比例。所以在将图片输入模型前需要手动调整图片大小。

2.5图片增强自造训练数据集

经过上面的一系列处理,我们能获得一批“高质量”的“上妆前和上妆后”的人脸图片。但是,如果收集的图片不够,比如笔者只有168张图片,对模型来说是不足够的,这时我们需要运用图片增强技术,利用已有的高质量图片,再“制造”一些训练图片。

在这个过程中涉及到对图片的“旋转、位移、置换、调整色彩、对比度、亮度”等等,同样使用PIL/Pillow,相关程序如下:

至此,包括原有的168张图片,我共有1008张“上妆/卸妆”图片,可以运行模型进行训练了。


Step3:使用数据,开始训练

3.1将训练数据放入指定位置

在训练前要把训练数据放到指定位置以方便使用。
- 在 CycleGAN 源码目录中找到./datasets目录.
- 在 datasets 目录下创建“上妆/卸妆”数据文件夹:makeup2
- 在 makeup2 中创建子目录
- trainA 训练数据A(素颜图片)
- trainB 训练数据B(美妆图片)
- testA 测试数据A(测试用素颜图片)
- testB 测试数据B(测试用美妆图片)
- 将之前加工过的数据放置在相应文件夹中即可。

3.2开始训练

  • 运行实时训练监控程序

运行命令后,访问:

即可打开训练过程实时监控平台
- 开始训练

其中:
- dataroot 表示训练数据目录
- name 表示模型训练完成后的名字
- model 表示要使用的基本模型框架

命令运行后即开始训练,通常训练过程会持续12个小时左右。


Step4:训练完成,使用系统!

4.1测试系统

训练结束后,即可测试验证模型,在保证测试图片已经放在相应目录的情况下,运行命令:

在这里注意,训练好的模型都在 ./checkpoints 目录下
测试结果生成在 ./results 目录下。


原理:CycleGAN 是什么?

CycleGAN可以被训练以完成两种图像间的互相转换。

利用这个原理,我们只要提供给CycleGAN足够的“上妆/卸妆”图片进行训练,就可以让CycleGAN具备在“上妆/卸妆”图片间转换的能力。

Leave A Comment?