| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 人工智能 -> 计算摄影——妆造迁移 -> 正文阅读 |
|
[人工智能]计算摄影——妆造迁移 |
? ? ? ? 妆造迁移算法是将一张人像中的妆造迁移到任何一张人像中,这是美颜算法中比较新也比较复杂的技术,这里对传统算法和深度学习算法整理一下。 ? ? ? ? 在妆造迁移中,实例面部皮肤特征,如雀斑、痣和瑕疵等,不应被迁移。同时目标面部固有皮肤特征也应保留。 传统妆造迁移算法基于实例的妆容迁移(Example-Based Cosmetic Transfer)? ? ? ? 该方法需要成对的数据,比如下图,A和A*为成对的妆造前后实例图像,B为目标图像,B*为根据A的妆造进行迁移后的图像。一般需要四个步骤: 预处理????????在妆容迁移前,首先用贝叶斯扣图(Bayesian matting)将眉毛和睫毛分离,然后对从原始图像中分离眉毛和睫毛后产生的孔洞进行修补,修补方式包括图像修复(image inpainting)和纹理合成(texture synthesis),然后利用独立成分分析(independent component analysis,ICA)将固有皮肤特征(如雀斑、痣或瑕疵)从实例面部图像A和A*中去除。最后将所有图像面部变形为标准面部。 妆容映射? ? ? ? 妆容映射将人脸图像分解为颜色和光照两部分的乘积,通过计算妆造前后的光照密度对比图cp来完成迁移:,在各个像素点p 上,色彩混合表示式为: 外观修正? ? ? ? 上面的方法需要示例图和目标图有完全相同的几何结构和光照,并且精确对齐才可以,但这基本是不可能的,因此还需要对它进行局部几何变换修正,即将示例图的二阶拉普拉斯信息映射到目标图中。
在该假设下,由妆容引起的几何外观变化可通过混合各个像素点p的a*p和bp近似表示,即局部拉普拉斯二阶导数估计为:?,在给定β后,等式右端为确定值,此时需要修改bp*以满足上式对△bp*的约束,可以使用高斯-赛德尔(Gauss-Seidel)迭代求解。 眼睛迁移????????睫毛和眉毛的浓妆效果需要更精细的处理,包括毛发的长度、颜色和密度。本文利用提取的眉毛和睫毛的蒙板a将图像B的眉毛和睫毛选区叠加到B*上,,实现眉毛和睫毛的转移。 该方法有几个重大的局限性: (1) 要求肤色相近,背景单一,这限制了应用场景。 (2) 无法适应比较大的几何变换。 (3) 需要成对的妆造对比图进行训练,获取这样的数据需要很高的成本。 基于物理模型和非成对数据的算法????????成对的妆造对比图获取代价高昂,《Digital Face Makeup by Example》方法则提出了人脸分层模型,不需成对的样本图,只需要输入两张图片,一张是目标图片I,一张是参考的样例化妆图片ε,其流程如下图。 该方法主要分为四步: 第一步:将I和ε进行人脸对齐。因为我们是在像素点级别进行迁移,所以人脸的对齐是很有必要的。文中人脸对齐采用了薄板样条函数(Thin Plate Spline,简称TPS), 这是一种在图像配准中很常见的插值方法。 第二步:对I和ε分别进行分解。文中将图片转换到CIELAB颜色空间,然后对图像进行了分层建模。L层被认为是光照层(lightness layer),可以被分解为粗粒度脸部结构层(Face Structure)和细粒度皮肤细节层(Skin Detail),具体的实现其实就是将lightness layer执行一个边缘保持的滤波操作(edge-preserving smoothing)得到large-scale layer,然后将lightness layer减去large-scale layer得到detail layer。剩下的两个通道a*和b*则被认为是颜色层。 第三步:将分解后的图像进行不同的处理,两幅皮肤细节层(Skin Detail)直接相加,颜色层使用一个alpha blending进行融合,对人脸结构中的高光和阴影部分则使用梯度进行迁移。 第四步:将得到的三部分组合到一起。注意到嘴唇化妆和脸部是很不一样的。在物理化妆中,嘴唇上的化妆品(如口红)通常会保留或突出嘴唇的质感,而不是像在面部皮肤上那样隐藏,处理方法是对原始图I中的每一个像素,从妆造图中搜索匹配的像素进行替换,此时会同时用到L通道的像素值和空间位置信息。 该方法原理清晰,不需要使用成对的数据,且不需要进行训练,但是需要输入图和妆造图进行精确的对齐,这限制了该类方法的实用性。实际上,传统的妆造迁移算法都无法避免这样的问题,它们对输入图的姿态以及光照非常敏感。 深度学习妆造迁移算法基于GAN的妆造迁移算法Github:https://github.com/Honlan/BeautyGAN? 以商汤提出的BeautyGAN为代表,它输入两张人脸图片,一张无妆图,一张有妆图,模型输出换妆之后的结果,即一张上妆图和一张卸妆图。 BeautyGAN采用了经典的图像翻译结构,生成器G包括两个输入,分别是无妆图Isrc、有妆图Iref,通过编码器(encoder)、若干个残差模块(residual blocks)、解码器(decoder)组成的生成器G 得到两个输出,分别是上妆图IBsrc、卸妆图IAref,结构示意图如下图。 BeautyGAN使用了两个判别器DA和DB,其中DA用于区分真假无妆图,DB用于区分真假有妆图。 BeautyGAN整体loss由4部分loss组成,对抗loss(adversarial loss),循环GAN loss( cycle consistency loss),感知loss( perceptual loss) ,换妆约束loss(makeup constrain loss) 。 对抗loss(adversarial loss): 循环GAN loss( cycle consistency loss): ????????为了消除迁移细节的瑕疵,将上妆图IBsrc和卸妆图IAref再次输入给G,重新执行一次卸妆和上妆,得到两张重建图Iresrc和卸妆图Ireref,此时通过循环损失(cycle consistency loss)约束一张图经过两次G变换后与对应的原始图相同。因为生成器的输入包含了一对图,所以与CycleGAN的不同之处在于这里使用了同一个生成器G,该损失用于维持图像的背景信息。 感知loss( perceptual loss): 上妆和卸妆不能改变原始的人物身份信息,这可以通过基于VGG模型的Perceptual loss进行约束,定义如下: 其中Cl,Hl,Wl分别是网络第l层的通道数,特征图高度和宽度。 换妆约束loss(makeup constrain loss): ????????为了更加精确的控制局部区域的妆造效果,首先使用PSPNet 这样的分割模型,对人脸区域进行分割,即Face parsing 。可以分别提取出嘴巴,眼睛,人脸这3个部位。然后分别对这3个部位进行直方图Histogram loss的计算。 为什么要进行Face parsing操作?
为什么要使用Histogram loss,而不是MSE loss?
下面是一些效果图: 参考文章:文献阅读 - Example-Based Cosmetic Transfer_K5niper的博客-CSDN博客 美颜换妆之BeautyGAN_watersink的博客-CSDN博客_beauty gan ? ? ? ? |
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/25 20:51:00- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |