用深度学习技术FCN自动生成口红

1 这个是什么?

???????基于全卷积神经网络(FCN)的自动生成口红Python程序。

图1 FCN生成口红的效果(注:此两张人脸图来自人脸公开数据库LFW)

2 怎么使用了?

???????首先能从这个Github (https://github.com/Kalafinaian/ai_lips_makeup) 中下载这个python项目。下载解压后你得到这样一个程序。

图2 口红Python程序

???????本项目的运行环境为Python3.6,需要的深度学习包tensorflow , 脸部图形处理包dlib,通用计算机视觉处理包cv2,以上三个python软件包都可以通过如下pip命令按照

???????pip install opencv-python
???????pip instll dlib=19.16.0
???????pip install tensorflow=1.12.0

???????安装好必要的python包后,就直奔主题说如何给一张人脸图加上口红,用pycharm打开项目运行main_predict.py。按照提示选择口红效果,再输入人脸图片的地址,最后加上口红的照片会在test_out文件夹中存储。

图3 FCN口红运行演示

???????同理类似处理test_in文件夹下的002.jpg,那么在test_out文件夹下可以获得加上亮面口红的人脸照片了。

图4 FCN口红的预测输出

3 程序的原理

???????这个基于全卷积神经网络的FCN口红的工作原理如下 (釉面口红为例)
???????(1) 训练集输入为没有口红的人脸,训练集输出为有釉面口红人脸,共170
个训练集。(因版权原因本程序不提供完整人脸,只提供口红照片)

图5 没有口红的人脸

图6 有釉面口红的人脸(诚如所见,训练集口红都是人工PS的??)

???????(2)使用dlib自带的模型提取出人脸嘴唇,将所有嘴唇图片resize到90×30的大小那么训练的输入和输出

图7 训练集原始嘴唇

图8 训练集对应釉面口红输出

???????(3)构建一个三层全卷积神经网络
???????(3.1)第一层输入为30×90×3 (RGB三通道)的多维数组,所以第一层卷积输入通道为3个,另定义输出通道为24个,采用elu激活函数,没有下采样
???????(3.2)根据第一层输出通道可知第二层输入为30×90×24的多维数组,另定义第二层输出通道为45个,同样采用elu激活函数,没有下采样
???????(3.3)根据第二层输出通道可知第三层输入为30×90×45的多维数组,另定义第二层输出通道为3个,同样采用elu激活函数,没有下采样
???????(3.4)定义损失函数为均方差损失,即loss等于第三次输出和训练输出每个像素点差的平方求平均数。

???????(4) 迭代训练100词,将模型参数保持为model文件夹中model_brightening
(详细过程可见代码)

???????(5) 高兴的使用模型参数进行口红生成

4 延伸阅读(全卷积神经网络和ELU激活函数)

???????简单来说FCN将传统CNN中的全连接层转化成一个个的卷积层(本文中程序连pooling也省略了)。在传统的CNN结构中,前N层是卷积层,倒数第二层是一个长度为4096的一维向量,倒数第一层是长度为1000的一维向量,对应1000个类别的概率。FCN将这3层表示为卷积层,卷积核的大小(通道数,宽,高)分别为(4096,1,1)、(4096,1,1)、(1000,1,1)。所有的层都是卷积层,故称为全卷积网络。简单来说FCN与CNN的区别在于FCN把CNN最后的全连接层换成卷积层,输出一张已经label好的图。

图9 FCN演示图

???????关于FCN具体只是可参见UC Berkeley的Jonathan Long等人提出了Fully Convolutional Networks (FCN)[1]。

???????然后再介绍一下ELU激活函数[2],这个函数长这样的

\[f\left( x \right) = \left\{ \begin{array}{l}
x\;\;\;\;\;\;\;\;\;\;\;\;\;\;x > 0 \\
\alpha \left( {{e^x} - 1} \right)\;\;\;x \le 0 \\
\end{array} \right.,\;f'\left( x \right) = \left\{ \begin{array}{l}
1\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;x > 0 \\
f\left( x \right) + \alpha \;\;\;x \le 0 \\
\end{array} \right.\]

???????在tensorflow中alpha默认取1(https://www.tensorflow.org/api_docs/
python/tf/nn/elu)。

图10 ELU函数和其他几个激活函数的图像

???????Elu函数可以加速训练并且可以提高分类的准确率。它有以下特征:
???????(1) elu由于其正值特性,可以像relu,lrelu,prelu一样缓解梯度消失
???????(2相比relu,elu存在负值,可以将激输出均值往0推近,输出均值接近0可以减少偏移效应进而使梯 度接近于自然梯度。
???????(3) Lrelu和prelu虽然有负值存在,但是不能确保是一个噪声稳定的去激活状态。Elu在负值时是一个指数函数,对于输入特征只定性不定量

5 总结

???????详细过程看代码,具体原理读论文。

推荐论文:

[1] Fully Convolutional Networks for Semantic Segmentation
(https://arxiv.org/abs/1411.4038)

[2] Fast and Accurate Deep Network Learning by Exponential Linear Units (ELUs)
(https://arxiv.org/abs/1511.07289v5)

推荐资源

http://vis-www.cs.umass.edu/lfw/
https://github.com/shelhamer/fcn.berkeleyvision.org

原文地址:https://www.cnblogs.com/Kalafinaian/p/11479275.html

时间: 2024-10-12 11:21:13

用深度学习技术FCN自动生成口红的相关文章

安防大数据挖掘的利刃:模式识别和深度学习技术

人工智能的概念提出已经很多年,但最近一次大热是在“人机大战”战胜世界围棋高手李世石的AlphaGo.同样,近几年安防行业热门的深度学习和模式识别的概念也频频出现在公众的视野当中,那么它们是如何应用在安防领域中?目前最前沿的应用又有哪些?以下将为您一一解答. 安防大数据挖掘 平安城市从2010年在全国推广至今已经6年,目前各地平安城市建设即将进入扩容改建期,需要更加综合与智能的整体解决方案.公共安防已不再局限于扩张视频监控覆盖广度和密度以及清晰度,而是由扩密度的传统安防时代向注重视频大数据挖掘.使

将深度学习技术应用于基于情境感知的情绪识别

目录 本分享为脑机学习者Rose整理发表于公众号:脑机接口社区(微信号:Brain_Computer).QQ交流群:903290195 延世大学和洛桑联邦理工学院(EPFL)的研究团队最近开发了一种新的技术,可以通过分析图像中的人脸和上下文特征来识别情绪.他们在arXiv上预先发表的一篇论文中介绍并概述了他们基于深度学习的架构,称为CAER-Net. 近年来,世界各地的研究人员一直在尝试开发通过分析图像.视频或音频剪辑来自动检测人类情绪的工具.这些工具可以有许多应用,例如,改善人机交互或帮助医生

[转]浅谈AlphaGo背后所涉及的深度学习技术

转自:http://www.199it.com/archives/449359.html 导读:关于Alfa Go的评论文章很多,但真正能够与开发团队交流的却不多,感谢Alfa Go开发团队DeepMind的朋友对我这篇文章内容的关注与探讨,指出我在之前那一版文章中用字上的不够精确,所以在此又作调整.我之前文章提到的「全局」指的是跨时间点的整场赛局,很容易被误认为是某个特定时点整个棋盘的棋局,所以后面全部都修改为「整体棋局」.此外,关于整体棋局评估,除了透过脱机数据学习的评价网络之外,还可以透过

《神经网络与深度学习》(七) 浅谈AlphaGo背后所涉及的深度学习技术

导读:关于Alfa Go的评论文章很多,但真正能够与开发团队交流的却不多,感谢Alfa Go开发团队DeepMind的朋友对我这篇文章内容的关注与探讨,指出我在之前那一版文章中用字上的不够较精确,所以在此又作调整.我之前文章提到的「全局」指的是跨时间点的整场赛局,很容易被误认为是某个特定时点整个棋盘的棋局,所以后面全部都修改为「整体棋局」.此外,关于整体棋局评估,除了透过脱机数据学习的评价网络之外,还可以透过根据目前状态实时计算的不同策略评价差异(这项技术称之为Rollouts),它透过将计算结

深度学习之 rnn 台词生成

深度学习之 rnn 台词生成 写一个台词生成的程序,用 pytorch 写的. import os def load_data(path): with open(path, 'r', encoding="utf-8") as f: data = f.read() return data text = load_data('./moes_tavern_lines.txt')[81:] train_count = int(len(text) * 0.6) val_count = int(l

对比《Keras图像深度学习实战》PDF+《深度学习技术图像处理入门》PDF代码分析

将深度学习技术应用于图像处理,推荐阅读<深度学习技术图像处理入门>,基于理论讲解,由浅入深地引出若干个经典案例,讲解当前深度神经网络在图像处理领域的应用.提供了基于云GPU容器(Docker)的完整在线开发环境,方便初学者直接学习核心代码. <深度学习技术图像处理入门>以通俗易懂的语言简要讲解机器学习的核心概念,通过比较传统机器学习和深度神经网络的区别,引入深度神经网络的应用领域,将一个完整的深度神经网络的复杂结构拆成输入处理.模型元件以及模型优化三个子块,并详细说明如何将深度神经

入门实战《深度学习技术图像处理入门》+《视觉SLAM十四讲从理论到实践》

学习图像识别处理,想在数据分析竞赛中取得较高的排名,看了<深度学习技术图像处理入门>电子书,一边看电子书一边做标记,对配套的代码也做了测试,收获颇多. 从机器学习.图像处理的基本概念入手,逐步阐述深度学习图像处理技术的基本原理以及简单的实现. 学习理论后做实验,使用卷积神经网络进行端到端学习,构建深度卷积神经网络,使用循环神经网络改进模型,评估模型,测试模型.最关键的是可以将模型运用于实战之中,将深度学习模型导入到工程中,数据类型转换函数,实施CAM可视化,这是我最需要的. 视觉和图形学真是一

【转载】如何自学深度学习技术,大神Yann LeCun亲授建议

编者按:Quora 上有网友提问:自学机器学习技术,你有哪些建议?(What are your recommendations for self-studying machine learning),Yann LeCun 在该提问下做了解答.本文由雷锋网(公众号:雷锋网)根据 LeCun 的回答整理而来,原文链接:http://www.leiphone.com/news/201611/cWf2B23wdy6XLa21.html 在网上有很多关于 Machine Learning 的材料.教程和视

机器码农:深度学习自动编程

转自原文机器码农:深度学习自动编程 作者简介:张俊林,中科院软件所博士,曾担任阿里巴巴.百度.新浪微博资深技术专家,目前是用友畅捷通工智能相关业务负责人,关注深度学习在自然语言处理方面的应用. 责编:何永灿,欢迎人工智能领域技术投稿.约稿.给文章纠错,请发送邮件至[email protected] 本文为<程序员>原创文章,未经允许不得转载,更多精彩文章请订阅2017年<程序员> 机器自动编程是人工智能一直以来期望攻克的重要应用领域,随着深度学习的逐步流行,最近在自动编程方向获得了