使用pix2pix为Snapchat创建镜头

之前的文章标题几乎相同,唯一的区别是我使用dlib和openCV通过算法为Snapchat创建了镜头,今天,我想展示如何使用机器学习获得结果。 这种方法将允许不参与算法的手动设计,而是直接从神经网络获得最终图像。


这是我们得到的:



什么是pix2pix?


这是一种使用竞争网络 (通常称为pix2pix) 将图像转换为图像的方法


名称“ pix2pix”是指训练网络将输入图像转换为其相应的输出图像。 以下是此类转换的示例:



pix2pix最酷的功能是它的多功能性 。 无需为上述每个任务创建新的算法或模型,仅使用不同的数据集来训练网络就足够了。


与之前使用的方法不同,pix2pix可以更快地学习并且使用更小的训练集来解决问题。 例如,当使用Pascal Titan X GPU在不到两小时的时间内对400对图像的数据集进行训练时,可获得以下结果。



pix2pix如何工作?


pix2pix使用两个并行学习的神经网络:


  1. 发电机组
  2. 鉴别器

生成器尝试从输入的训练数据生成输出图像,而鉴别器尝试确定结果是真实的还是生成的。


当生成器生成的图像与真实的图像无法区分(区分)时,我们就开始在它们和真实图像上训练区分器。 当鉴别器成功地将生成的图像与实际图像区分开时,我们再次开始训练生成器,使其再次学习欺骗鉴别器。


这种“军备竞赛”导致这样的事实,即人很难将真实图像与生成图像区分开。


练习


我们将在256x256图像上训练Snapchat的过滤器生成器(大尺寸将需要更多的视频内存)。 要创建数据集,请使用上一教程中代码


我下载了许多面部图像,并对每个图像都应用了“暴徒眼镜”过滤器。 结果将是这些对:



要创建模型,请使用基于TensorFlow pix2pix 存储库 。 克隆并安装 Tensorflow。


开始训练的命令如下:


python pix2pix.py --mode train --output_dir dir_to_save_checkpoint --max_epochs 200 --input_dir dir_with_training_data --which_direction AtoB 

参数which_direction设置训练方向。 AtoB意味着我们要将图像A (左,没有眼镜)变成图像B (右,有眼镜)。 顺便说一句,请注意pix2pix可以成功地学习如何从带有滤镜的图像中还原原始图像,只需更改训练方向即可。


您可以使用tensorboard监视训练进度,为此需要运行以下命令:


 tensorboard --logdir=dir_to_save_checkpoint 

一旦您看到训练数据的结果变得非常好,就可以停止训练并在任意数据上测试模型。 您可以从最后一个控制点继续进行训练,如下所示:


 python pix2pix.py --mode train --output_dir dir_to_save_checkpoint --max_epochs 200 --input_dir dir_with_training_data --which_direction AtoB --checkpoint dir_of_saved_checkpoint 

结论


pix2pix型生成网络的出现为为各种图像处理任务提供通用且简单的解决方案开辟了广阔的前景。



Source: https://habr.com/ru/post/zh-CN483310/


All Articles