侧脸生成正脸我一直很感兴趣,老早就想把这块理一理的。今天来给大家分享一篇去年的老文章,如果有不对的地方,请斧正。

Beyond Face Rotation: Global and Local Perception GAN for Photorealistic and

Identity Preserving Frontal View Synthesis

文章下载地址:

https://arxiv.org/abs/1704.04086

有很多公众号和博客都写过了,翻译的文字我觉得有些生硬。俗话说,一千个读者有一千个哈姆雷特。今天我给大家我的视角,希望带来不一样的阅读体验。

温故而知新,可以为师矣。学习就是这样,去粗取精,去伪存真,由此及彼,由表及里。

第一节 侧脸生成正脸相关文献介绍

由此及彼

干类似的事情的还有2篇文章,也很值得读。推荐如下:

自动化所胡一博老师的:

Pose-Guided Photorealistic Face Rotation

颜水成老师的:

Towards Pose Invariant Face Recognition in the Wild

这两篇都是今年的CVPR。

借用一下胡一博老师整理的图:

整个领域的文献基本都在这里了。颜老师的文章是图片中的PIM。

如果光是生成人脸,还有一个工作是谷歌大脑的:

BEGAN: Boundary Equilibrium Generative Adversarial Networks

他这个是直接生成脸,训练集有正脸有侧脸的。

领域知识都介绍完了,我们来说说这篇文章吧。

第二节  文章的主线:输入与输出

论文有的是讲方法论的,有的是讲技能的。这篇文章是讲技能的。讲技能的文章,我的阅读方式是先抓主干。一个软件的主干是什么呢?那就是输入输出嘛。

论文用的训练集是Multi-PIE。训练集的输入:侧脸和正脸训练对。侧脸有几个种类,90度,60度,45度等等。事实上,不光正脸的训练对,还做了预处理,通过关键点检测,把左眼、右眼、鼻子、嘴巴都抠出来了。做成了侧脸左眼、正脸左眼训练对。依次类推。

训练好的模型有两个输出:第一个是侧脸生成正脸。

这个很好看懂,最后一列是正脸,其它都是两列,第一列是侧脸,不同角度,第二列是合成的人脸。

第二个输出是提升了人脸识别的精度。这个是他跟一般的GAN文章不一样的地方。也是比较有意思的点。

这个表格如果你之前没有研究过侧脸和正脸方面的内容,是比较难看懂的。比如说,这个是怎么测试的,他这个一列加减60度,得到的精度代表什么意思,训练集和测试集是啥。

这个列表上写的Setting1,事实上论文里只是一个引用没有具体说,具体的定义在这个文章里:

Deep Learning Identity-Preserving Face Space

训练集和测试集的人是分开的,所谓的setting1是指这个训练集测试集的具体设置。

他这个测试精度是这样得来的: 选定一张正脸,让你用CNN来判别,比如说75度的脸跟这个正脸是不是同一个人。从文章可以看到,45度以内,一般的CNN都效果很好的,45度以上,TP-GAN提升了不少精度,他是怎么做到的呢?因为他先用侧脸生成一个正脸,然后比对生成的正脸和真实的正脸是不是同一个人,这样提升精度的。

第三节 实现主线输入输出的loss和网络结构设计

 

网络结构是比较清楚的。文章讲的也很透彻。一个GAN网络和一个分类网络,GAN网络由两个,一个全局的GAN生成一个正脸轮廓没有具体眼睛嘴巴鼻子的,四个局部的GAN分别生成左眼 右眼 鼻子 嘴巴。然后把他们两个结合起来。

分类网络就是一个简单的CNN,判别生成的人脸是哪个人。

图片中,上一层是GAN网络,下一层是分类网络。

接下来我们看loss的设计,loss是指挥棒,得好好琢磨一下。

先看目标函数:

InF 代表的是ground truth正脸,InP代表的是侧脸,目标函数前一项是合成的正脸和真实正脸之间的损失,是对应网络结构中的二路GAN的,后一项是分类的交叉熵损失,对应网络结构图中的light-cnn。

1、像素级损失

这个loss计算起来计算量会很大,它直接算合成的人脸与真实正脸每个点像素值的绝对差值。这个loss在三个地方起作用,一个是预测局局部区域例如左眼的时候,一个是全局的,还有是全局和局部合成一个最终正脸的时候。如果光训练这一个loss,要训练到收敛我觉得是比较难的。因为每个点的像素值都能影响到loss,训练过程中指挥棒比较分散。

2、对称损失

由于预测的是正脸,正脸是对称的,左右对称位置上的像素应该相同。这个损失就是算左右位置像素值的差的。

3、对抗损失

这个就是一般的GAN损失,让合成的人脸跟真实人脸更接近。

D代表的是判别网络,G代表的是生成网络。

4、保留身份的损失

这个损失的作用是让合成的人脸还是本人,而不是合成了另一个人。对抗损失是保证合成的人脸逼真,保留身份损失相当于更进一步,不光逼真,还是本人。

注意看这个公式,它的i是从1到2的,代表的是分类网络的最后两层卷积层,

W 和H呢代表的是卷积后得到的feature map的维度。

绝对值符号里面的两项相减,说的是真实正脸和合成正脸走CNN前向传播得到的feature map。

它的物理意义是相对像素级的损失的,他的损失是高级语义损失,由于CNN的高层值代表更抽象的语义信息,因而这个损失能保证合成的人脸主体特征的正确性,进而保证了合成人脸的身份。

这个损失类似的经典损失函数是感知损失。大家可以自己搜下perceptual loss。

最后,把上面这几个损失加权求和就是最终的损失函数了。

文末习题:

文章解说完了,接下来搞个题目试试看如何?

输入这样一张人脸,用训练好的网络测试能输出合成的很好的正脸吗?

微信扫一扫
关注该公众号

转载于:https://www.cnblogs.com/whu-zeng/p/9519981.html

侧脸生成正脸概论与精析(一)Global and Local Perception GAN相关推荐

  1. 人脸生成:Beyond Face Rotation: Global and Local Perception GAN

    Beyond Face Rotation: Global and Local Perception GAN for Photorealistic and Identity Preserving Fro ...

  2. m基于LOC-PCA算法的人脸重建算法matlab仿真,给定人物侧脸实现正脸重建

    目录 1.算法仿真效果 2.MATLAB核心程序 3.算法涉及理论知识概要 4.完整MATLAB 1.算法仿真效果 matlab2022a仿真结果如下: 2.MATLAB核心程序 .......... ...

  3. TP-GAN 让图像生成再获突破,根据单一侧脸生成正面逼真人脸

    [新智元导读]中科院自动化所(CASIA),中科院大学和南昌大学的一项合作研究,提出了双路径 GAN(TP-GAN),通过单一侧面照片合成正面人脸图像,取得了当前最好的结果.研究人员提出了一个像人类一 ...

  4. OpenFace库(Tadas Baltrusaitis)中基于HOG进行正脸人脸检测的测试代码

    Tadas Baltrusaitis的OpenFace是一个开源的面部行为分析工具,它的源码可以从https://github.com/TadasBaltrusaitis/OpenFace下载.Ope ...

  5. Dlib库中实现正脸人脸关键点(landmark)检测的测试代码

    Dlib库中提供了正脸人脸关键点检测的接口,这里参考dlib/examples/face_landmark_detection_ex.cpp中的代码,通过调用Dlib中的接口,实现正脸人脸关键点检测的 ...

  6. Dlib库中实现正脸人脸检测的测试代码

    Dlib库中提供了正脸人脸检测的接口,这里参考dlib/examples/face_detection_ex.cpp中的代码,通过调用Dlib中的接口,实现正脸人脸检测的测试代码,测试代码如下: #i ...

  7. TensorFlow练习24: GANs-生成对抗网络 (生成明星脸)

    GANs是Generative Adversarial Networks的简写,中文翻译为生成对抗网络,它最早出现在2014年Goodfellow发表的论文中:Generative Adversari ...

  8. 领英1000多个假账户被曝光,用AI生成假脸冒充真人发推销信息,已形成相关产业链...

    明敏 发自 凹非寺 量子位 | 公众号 QbitAI Deepfake假头像又又又来了. 这一次扎堆"轰炸"的平台,换成了领英. 下面这个小姐姐,是不是乍看之下感觉普普通通,还很有 ...

  9. ERC721:全生命周期精析,妈妈再也不用担心我不会玩NFT合约啦

    ERC721:全生命周期精析,妈妈再也不用担心我不会玩NFT合约啦 由于篇幅有限,本博客将围绕ERC721核心展开介绍,文章内容尽量做到通俗易懂,但其中不可避免地可能涉及一些新手不友好的概念,您可以查 ...

  10. 为什么剩余数不能相加_公务员考试行测备考数学运算:剩余问题精析

    公务员考试行测备考数学运算:剩余问题精析 在我国古代算书<孙子算经>中有这样一个问题:"今有物不知其数,三三数之剩二,五五数之剩三,七七数之剩二,问物几何?"意思就是, ...

最新文章

  1. AWS — AWS 上的 5G 专网部署模式
  2. java如何获取一个double的小数位数
  3. Ubuntu中的密钥环密码与登陆密码不同
  4. 香港中文大学MMLab期待优秀同学加入~
  5. es6 Promise 的基本用法
  6. xp可以装java6不_XP系统XMind 6中缺失安装java环境
  7. Linux之ssh-copy-id命令
  8. 谁偷偷删了你的微信?别慌!一篇Python学习教程帮你都揪出来
  9. 3. PCRE 兼容正则表达式
  10. spring boot设置http https端口
  11. 所谓更牛,就是换个罪受!——《时间的朋友2016跨年演讲》深入笔记
  12. 【数据集】语义分割常用的数据集: Pascal VOC、Cityscape、MSCOCO
  13. Java 使用嵌套 for 循环打印皇冠
  14. LimeWire Basic 4.8.1 for Linux(转)
  15. 用大白话聊聊JavaSE
  16. 正阅读微信小说分销系统-视频教程-1.渠道商-公众号配置-基础信息
  17. 京东 京麦,京东商家后台自动登录,滑块验证selenium进入到from表单
  18. 网络流最大流----EK算法
  19. 2016年10月9日 星期日 --出埃及记 Exodus 18:20
  20. 图形编程概念—显卡/GPU是如何工作的?

热门文章

  1. Nginx nginx.conf配置文件详解
  2. apscheduler任务配置信息,实现100%数据库化
  3. 对Parcel的使用学习
  4. 残差分析(残差原理与标准化残差分析)
  5. ECS云服务器新手上路
  6. 设计的概念以及含义_什么是设计概念? 以及为什么您应该始终从一个开始
  7. 针对目前windows系统的所有勒索病毒补丁和安全工具
  8. vmware校园网虚拟机无法连接网络解决方法
  9. vc++datamatrix二维码识别
  10. 基于 Java 机器学习自学笔记 (第51-53天:kNN)