本文是根据Andrew Ng的深度学习视频学习,自己总结的。这一系列先只学习关键技术和设计,具体的实例等下一期进行。

一:神经风格转换处相识
这个是个非常激动人心的小领域,也是一个生成模型,能把一个图像的风格迁移到另一个图像上来,能创造出不一样的新数据来,如下图所示。

将S图像的绘画风格迁移到C图像上,既可以得到一个G图像,G图像是按照S图像的风格绘制的C图像,这很激动人心啊,人人都可以成为绘画师了啊简直,在图像处理特效领域完全可以产生新的滤镜。

内容就是图像的组成部分。可能是风景、海滩环境、花园里的猫、动物园里的长颈鹿等等……在典型的图像分类网络中,基本上是图像的标签。内容是图像组成的高级表征。

图像风格涉及更复杂的细节:笔触、颜色对比、整体纹理等等……

假设图像的内容是一只狗,不同人画这个“内容”的方式不一样,也就是说狗的模样会不尽相同。这种差异形成了图像风格。你的笔画可能会更粗更有活力,而我的笔画可能会更细更钝。

在深度卷积网络中,每一个隐含层都可能包含图像的部分内容和风格。

从第一个隐藏层开始可能只能识别简单的纹理特征,线条等信息,到了第二层能够识别比较大的一个曲线纹理特征,到了第三层甚至更高层,就能识别到更加复杂的内容和风格,甚至是更同一隐藏层的不同通道都可以存在不同的内容和风格。

在卷积网络中,图像的内容和风格信息就存在于隐藏层中,随着隐藏层的深入,就可以从最简单的纹理线条到复杂的物体检测。

二:代价函数以及训练过程
代价函数:

由两部分组成,一个是生成图像G和内容图像C的相似度损失值,一个是生成图像G和风格图像S的相似度损失值。

训练过程:
1:初始化一个随机噪声的图像数据G,它可能是 100×100×3,可能是 500×500×3。

2:使用一个训练好了的网络ConvNet,作为深度特征和风格内容的抽取器和计算器。这个网络模型你可以自己训练,或者是利用现有的网络直接拿来使用,毕竟目标不是为了训练这个网络,而是要训练出图像。

3:使用梯度下降来更新输入的图像G,将G的每个像素作为参数,去更新G,注意这里不是训练网络参数了,而是把输入数据作为参数。

这个梯度下降的过程中,就是在更新G的像素,使他能达到一个很小的代价值。
从这里我们也学习到了数据也可以是参数,参数也可以是数据,二者在数学概念上上可以相互转换的。

例如下图

内容图像C是1图,风格图像S是2图,给定一个随机噪声图像G,通过不断地梯度下降迭代后就会得到一个新的图像图6。

三:内容损失函数

四:风格损失函数
什么是风格,在数学上怎么解释这个风格?
图像的风格信息依然存在于深度网络的隐藏层的,因此我们还是和内容代价函数一样第一步挑选一个隐藏层L,用这个隐藏层作为风格的深度测量,假设我们挑选了某个隐藏层如下。

这个隐藏层的高度是NH,宽度是NW,通道数是NC,也就是可以看成是NC个子图像,或者可以说是得到了NC个二维矩阵。
我们现在需要计算各个通道图像之间的相关系数,用相关性来衡量图片的风格,这让我们想到了协方差矩阵,其实跟这个很类似。

如何理解呢?假如通道1图像对应某种纹理,通道2图像对应某种颜色,他们之间的相关性共同构成一个风格,就是此处用了这个纹理,同时也是这种颜色的相关程度。同样的,假设通道3代表是线条粗细的特征,此时计算通道1和通道3之间的相关程度,就可以形成在此纹理下,线条粗细的相关性程度。因此,利用相关性,共同来决定哪些特征(粗细,颜色,纹理等等等)的混合,以及混合比例(相关程度),这就是图像的风格就形成了。

不得不说啊,大神们的数学基础以及逻辑分析能力真是厉害,这些基本数学概念说出来了,我们都知道,但是就是想不出来这东西还能拿来被用作解决和分析高级问题,而大多数的时候我们都是用来考试,前路漫漫啊。

好了,既然我们要求每一个通道和其他通道的相关系数,那结果就是一个矩阵了,NC * NC的一个矩阵,这个矩阵叫做gram 矩阵。

这里我们就直接写计算式得了。首先将L层的(NC,NH,NW)的张量reshape到(NC,NH*NW)的二维向量上,这样做纯属是方便矩阵运算了。

于是分别得到图像S的在L层的二维矩阵N_S,以及得到图像G的在L层的二维矩阵N_G。

到目前为止,我们已经把神经网络转换的训练过程,以及计算过程全部讲解完了。
下一步就是亲自实践一个这样的功能。

CV《神经风格转换》相关推荐

  1. 吴恩达深度学习笔记13-Course4-Week4【人脸识别和神经风格转换】

    人脸识别(Face Recognition) 一.人脸识别简介(What is face recognition?) 人脸验证:输入一张带人名/ID的人脸图片,验证是不是那个人.一对一问题. 人脸识别 ...

  2. 深度学习笔记 第四门课 卷积神经网络 第四周 特殊应用:人脸识别和神经风格转换...

    本文是吴恩达老师的深度学习课程[1]笔记部分. 作者:黄海广[2] 主要编写人员:黄海广.林兴木(第四所有底稿,第五课第一二周,第三周前三节).祝彦森:(第三课所有底稿).贺志尧(第五课第三周底稿). ...

  3. 4.4)深度卷积网络:人脸识别和神经风格转换

    目录 1)What is face recognition? 2)One-shot learning 3)Siamese network 4)Triplet Loss(重点) 5)Face Verif ...

  4. 04.卷积神经网络 W4.特殊应用:人脸识别和神经风格转换(作业:快乐屋人脸识别+图片风格转换)

    文章目录 作业1:快乐房子 - 人脸识别 0. 朴素人脸验证 1. 编码人脸图片 1.1 使用卷积网络编码 1.2 Triplet 损失 2. 加载训练过的模型 3. 使用模型 3.1 人脸验证 3. ...

  5. 吴恩达【深度学习工程师】 04.卷积神经网络 第四周特殊应用(2)神经风格转换...

    该笔记介绍的是<卷积神经网络>系列第四周:特殊应用(2)神经风格转换 主要内容有: 1.神经风格转换 2.卷积网络隐藏单元可视化显示 3.神经风格转换代价函数 4.内容代价函数 5.风格代 ...

  6. 《Pytorch - 神经风格转换》

    上一篇我们学习了神经风格转换的详细内容,现在我们找了个网上的例子,一起运行分析下,具体实现过程是如何操作的. 一:代码细节步骤解析 第一步:获取当前可用的设备信息,CPU还是GPU # 获得当前的设备 ...

  7. 吴恩达Coursera深度学习课程 deeplearning.ai (4-4) 神经风格转换--编程作业

    吴恩达Coursera深度学习课程 deeplearning.ai (4-4) 神经风格转换–编程作业 注:由于这个作业目前未找到完整的中文版的,所以楼主综合了几篇不完整的,自己完整运行了一遍(pyt ...

  8. 【吴恩达深度学习编程作业】4.4特殊应用——人脸识别和神经风格转换(问题未解决)

    参考文章:1.人脸识别与神经风格转换 2.神经风格转换编程作业 神经网络风格中遇到的问题已经解决了并将解决方案写在了备注里面,但是人脸识别那里运行到database就出错了,目前仍没有找到解决方案.我 ...

  9. 人脸识别与神经风格转换

    文章参考参考,在此基础上对人脸识别和神经风格转换的内容做一个简述. 人生苦短,我学torch 人脸识别 模型构建 人脸识别仅仅用的表层特征做对比是远远不够的,这里用到的就是FaceNet的特征提取.由 ...

最新文章

  1. 【译】SQL Server误区30日谈-Day1-正在运行的事务在服务器故障转移后继续执行
  2. 一文理解 DDD 领域驱动设计!
  3. spring 配置文件 数据库引入
  4. ***“出更”---获取源码的***
  5. Scrapy 扩展中间件: 同步/异步提交批量 item 到 MySQL
  6. spring融合activitymq-all启动报错的解决办法
  7. Java并发编程-原子性变量
  8. Spring / Hibernate使用log4jdbc改进了SQL日志记录
  9. Android官方开发文档Training系列课程中文版:手势处理之记录手指移动的轨迹
  10. 操作系统 非连续分配_操作系统中的连续和非连续内存分配
  11. 动手学深度学习(PyTorch实现)(十三)--ResNet模型
  12. 删除排除链表中的重复元素
  13. JavaScript第三章forEach循环第四课
  14. Unity 性能优化方法总结
  15. 计算n阶行列式的C语言实现
  16. C# 自定义鼠标光标
  17. 全球首次!32岁青年科学今天发现!道翰天琼认知智能机器人平台API接口大脑为您揭秘。
  18. 宏观经济学gdp计算方法_宏观经济学答疑总结
  19. echarts实现中国地图和各省市地图
  20. 苹果+android+扫码支付,苹果iOS12捷径扫码付款怎么设置 微信支付宝扫码二合一支付捷径...

热门文章

  1. 在团800运维工作总结之couchbase使用
  2. 《高质量c++/c编程指南》学习摘要
  3. 2013.3.9学习日记
  4. 命令行shell 用于SQLite
  5. Android美工坊--一个QQ登录验证的小例子
  6. Android开发中的logcat工具使用方法
  7. Swagger3、SpringBoot学习、使用复盘
  8. 【Python】字符串(String)
  9. C#LeetCode刷题之#63-不同路径 II​​​​​​​(Unique Paths II)
  10. C#LeetCode刷题之#26-删除排序数组中的重复项(Remove Duplicates from Sorted Array)