4.4特殊应用:人脸识别和神经网络风格转换

觉得有用的话,欢迎一起讨论相互学习~Follow Me

4.6什么是神经网络风格转换neural style transfer

  • 将原图片作为内容图片Content,风格图片Style,生成的图片用Generated image 表示。


4.7深度卷积神经网络在学什么What are deep ConvNets learning

Zeiler, Matthew D., and Rob Fergus. "Visualizing and understanding convolutional networks." European conference on computer vision. Springer, Cham, 2014.

  • 假设你在学习的神经网络结构如图:
  • 将训练集中的所有图片都经过神经网络,然后弄明白哪一张图片最大限度的激活了神经网络中的特定单元。
    • 原文如下:

      • Pick a unit in layer 1.Find the nine image patches that maximize the unit's activation.
      • Repeat for other units.
    • 个人理解:
      • 对于第一层卷积层,将数据集中的所有图片都通过第一层卷积层。输出其通过第一层卷积层后的数值,挑选出最大的九个数值对应的九张图片块(个人理解为是一张图片经过感受野所得到的子图片)。将这个算法运用到第一个卷积层上的所有神经元上,输出一个缩略特征图。

  • 其中更深层次的神经元可以看见数据集原始图像中更大的区域,可以假设,每一个神经元都会影响神经网络更深层的输出

Layer1

Layer2

Layer3

Layer4

Layer5


4.8神经风格迁移系统Cost function

Gatys L A, Ecker A S, Bethge M. A Neural Algorithm of Artistic Style[J]. Computer Science, 2015.

  • 对于神经网络风格迁移系统,判断所生成的图片G的好坏很重要,需要有一个函数J作为损失函数(cost function)用来评价风格迁移的好坏。

    • 首先将J(G)风格迁移损失函数切分为两个部分一个是内容图片部分(Content),另一个是生成图片的部分(Generated image G).然后会把结果加上一个风格代价函数,一个关于(Style)S和(Generated image)G图片的函数--用来描述风格图片S和生成图片G的相似度。
    • 然后使用\(\alpha\)和\(\beta\)两个参数来权衡内容代价和风格代价之间的权重。
    • \[J(G)=\alpha J_{Content}(C,G)+\beta J_{style}(S,G)\]

算法流程

  1. 初始化生成图像G:

    • 尺寸为\(100*100*3\),或者是\(500*500*3\)或者是任何你想要的尺寸。
  2. 使用梯度下降最小化损失函数J(G)
    • 即 \[G=G-\frac{\alpha}{2G}J(G)\]

示例

  • 如果原始图像为如下左图,风格图片为如下右图:
  • 图片迭代改变过程如下图所示:

4.9神经网络风格迁移内容代价函数 Content cost function

图像内容代价函数

Gatys L A, Ecker A S, Bethge M. A Neural Algorithm of Artistic Style[J]. Computer Science, 2015.

\[J(G)=\alpha J_{Content}(C,G)+\beta J_{style}(S,G)\]

  • 使用第l个隐藏层上的值来计算内容代价函数

    • 如果l值很小,那么生成的图像在像素上很像内容图像
    • 如果使用的l很大,那么生成的图像会偏风格化,而模糊原始图像的内容
    • 所以一般l不会选的太深也不会太浅,会选择在网络中层数的中间位置
  • 使用\(a^{[l](C)}和a^{[l](G)}\)表示层数l的激活值。
    • 如果这两个值相似,则表示这两张图片上的内容相似
    • \(J_{content}(C,G)=(a^{[l](C)}-a^{[l](G)})^{2}\)

4.9神经网络风格迁移风格代价函数 Content cost function

Gatys L A, Ecker A S, Bethge M. A Neural Algorithm of Artistic Style[J]. Computer Science, 2015.

  • 假设使用神经网络模型中的深度l作为风格的深度测量

    • 则把第l层不同通道之间激活值的相关系数作为风格--Define style as correlation between activations across channels.
  • 对于一个具有5个通道的激活值特征图而言,不同通道对应位置可以组成激活函数值对。通过不同通道上下对应位置的激活函数值对可以计算不同通道之间的相关系数。
  • 不同的通道对应不同的特征子图,对应不同卷积核上神经元识别的特征结果
  • 两个通道的激活值具有很大的相关性,意思是:而。当两个神经元的激活值具有很大的

图像风格诠释

  • 红色框中的神经元识别的是具有竖直条纹的特征
  • 黄色框中的神经元识别的是具有橙色纹理的特征
  • 假如红色和黄色框中的激活值具有很大的相关性,表明具有竖直条纹的子图很可能是橙色纹理的
  • 如果相关性不大,表明竖直条纹的子图很大概率不是橙色的
  • 相关性即是表明两个特征同时出现的概率

图像风格矩阵

  • 为了研究风格图像或者生成图像的风格,使用第l层神经元的激活值来测量图片的风格。
  • i,j,k分别表示该位置的高度和宽度以及对应的通道数,则第l层,(i,j,k)位置处的激活函数值可被表示为:\(a^{[l]}_{(i,j,k)}\)
  • 用\(G^{[L](S)}_{K,K'}\)表示S代表风格图片风格计算,L表示在第L层上计算图像风格,K和K'是用来计算相关性的L层的两个通道。风格图片的风格计算公式可如下表示:
    \[G^{[L](S)}_{K,K'}=\sum^{n^{[l]}_{H}}_{i=1}\sum^{n^{[l]}_{W}}_{j=1}a^{[l](S)}_{i,j,k}a^{[l](S)}_{i,j,k'}\]
    生成图像的风格计算公式可如下表示:
    \[G^{[L](G)}_{K,K'}=\sum^{n^{[l]}_{H}}_{i=1}\sum^{n^{[l]}_{W}}_{j=1}a^{[l](G)}_{i,j,k}a^{[l](G)}_{i,j,k'}\]
  • 在线性代数中,图像风格矩阵(Style matrix)也被称为“Gram matrix”,\(G^{[l]}\)是最终计算出的图像风格,其大小为\(n^{[l]}_{c} * n^{[l]}_{c}\)正方形的矩阵,其中\(n^{[l]}_{c}\)表示第l层特征图的通道数。即\(G^{[l]}\)会由\(G^{[L](S)}_{K,K'}\)生成,其中参数k和k'会遍历\(n^{[l]}_{c}\),即L层上特征图中的所有通道。

图像风格代价函数

  • 当然如果对每一层都是用风格代价函数会让结果变得更好,此时表达式可表示为:
    \[J_{style}(S,G)=\sum_{l}\lambda^{[l]}J_{style}^{[l]}(S,G)\]
  • 其中,S表示风格图像,G表示生成图像,l表示遍历所有层,\(\lambda\)表示一些额外的超参数,这样能够在考虑风格切换的代价函数时同时考虑浅层的低级和更深层的高级特征。

风格迁移总体代价函数

  • 如果在所有层上都计算风格迁移的内容和风格代价函数,则其可表示为:
    \[J(G)=\alpha J_{content}(C,G)+\beta J_{style}(S,G)\]

[DeeplearningAI笔记]卷积神经网络4.6-4.10神经网络风格迁移的更多相关文章

  1. [DeeplearningAI笔记]卷积神经网络3.10候选区域region proposals与R-CNN

    4.3目标检测 觉得有用的话,欢迎一起讨论相互学习~Follow Me 3.10 region proposals候选区域与R-CNN 基于滑动窗口的目标检测算法将原始图片分割成小的样本图片,并传入分 ...

  2. [DeeplearningAI笔记]卷积神经网络2.9-2.10迁移学习与数据增强

    4.2深度卷积网络 觉得有用的话,欢迎一起讨论相互学习~Follow Me 2.9迁移学习 迁移学习的基础知识已经介绍过,本篇博文将介绍提高的部分. 提高迁移学习的速度 可以将迁移学习模型冻结的部分看 ...

  3. [DeeplearningAI笔记]卷积神经网络4.11一维和三维卷积

    4.4特殊应用:人脸识别和神经网络风格转换 觉得有用的话,欢迎一起讨论相互学习~Follow Me 4.11一维和三维卷积 二维和一维卷积 对于2D卷积来说,假设原始图像为\(14*14*3\)的三通 ...

  4. [DeeplearningAI笔记]卷积神经网络3.1-3.5目标定位/特征点检测/目标检测/滑动窗口的卷积神经网络实现/YOLO算法

    4.3目标检测 觉得有用的话,欢迎一起讨论相互学习~Follow Me 3.1目标定位 对象定位localization和目标检测detection 判断图像中的对象是不是汽车--Image clas ...

  5. [DeeplearningAI笔记]卷积神经网络1.9-1.11池化层/卷积神经网络示例/优点

    4.1卷积神经网络 觉得有用的话,欢迎一起讨论相互学习~Follow Me 1.9池化层 优点 池化层可以缩减模型的大小,提高计算速度,同时提高所提取特征的鲁棒性. 池化层操作 池化操作与卷积操作类似 ...

  6. [DeeplearningAI笔记]卷积神经网络1.6-1.7构造多通道卷积神经网络

    4.1卷积神经网络 觉得有用的话,欢迎一起讨论相互学习~Follow Me 1.6多通道卷积 原理 对于一个多通道的卷积操作,可以将卷积核设置为一个立方体,则其从左上角开始向右移动然后向下移动,这里设 ...

  7. [DeeplearningAI笔记]卷积神经网络4.1-4.5 人脸识别/one-shot learning/Siamase网络/Triplet损失/将面部识别转化为二分类问题

    4.4特殊应用:人脸识别和神经网络风格转换 觉得有用的话,欢迎一起讨论相互学习~Follow Me 4.1什么是人脸识别 Face verification人脸验证 VS face recogniti ...

  8. [DeeplearningAI笔记]卷积神经网络2.5-2.7 Network in Network/1*1卷积/Inception网络/GoogleNet

    4.2深度卷积网络 觉得有用的话,欢迎一起讨论相互学习~Follow Me 参考文献 Inception网络 --Szegedy C, Liu W, Jia Y, et al. Going deepe ...

  9. [DeeplearningAI笔记]卷积神经网络2.3-2.4深度残差网络

    4.2深度卷积网络 觉得有用的话,欢迎一起讨论相互学习~Follow Me 参考文献 [残差网络]--He K, Zhang X, Ren S, et al. Deep Residual Learni ...

随机推荐

  1. java运行时内存分类

    主要有java栈(虚拟机栈), 堆 ,方法区. 线程私有: 栈: 每个方法执行的时候 都会同时创建一个栈桢 Stack Frame 用于存储  局部变量表, 操作数栈,动态链接, 方法出口等信息 线程 ...

  2. Intense Heat(前缀和或尺取)

    The heat during the last few days has been really intense. Scientists from all over the Berland stud ...

  3. Opendarlight Carbon 安装

    写在前面 目前最轻松的一次安装过程,感谢大翔哥的帮助. 安装过程 1.Zip包下载 找到Opendaylight官网,进入下载界面找到Carbon版本并下载. 2.Zip包解压 把这个zip压缩包解压 ...

  4. t2

    测评项目 : 福大助手 组长博客链接:https://www.cnblogs.com/dawnduck/p/10093752.html 第一部分:调研,评测 评测 1. 第一次上手体验 安卓: 进入页 ...

  5. UVALive - 6893 The Big Painting 字符串哈希

    题目链接: http://acm.hust.edu.cn/vjudge/problem/129730 The Big Painting Time Limit: 5000MS 题意 给你一个模板串和待匹 ...

  6. C语言问卷调查表

    你对自己的未来有什么规划?做了哪些准备?    对未来比较迷茫,现在的主要任务是学好专业课 你认为什么是学习?学习有什么用?现在学习动力如何?为什么?   活到老学到老,学习是一辈子的事.在学习的过程 ...

  7. android入门 — ProgressDialog/DatePickerDialog/TimePickerDialog

    这三个Dialog都是AlertDialog的子类. ①DatePickerDialog 1.创建DatePickerDialog的实例: 2.通过Calendar类获得系统时间: 3.通过DateP ...

  8. c#程序的阅读

    1 .程序是为表示两个连续的整数不能被整除. 2 ,3 程序黑框得不出结果,所以不知道具体的结果和运行时间. 4 采用更好的专用电脑进行计算.

  9. Varnish是一款高性能的开源HTTP加速器

    如何衡量缓存系统的优劣性 1:缓存命中率: 在memcached服务器中,get_hits的值表示缓存命中的次数,get_misses的值表示没有命中的次数,那么命中率的计算公式就是:命中率=get_ ...

  10. 1st 结对编程:简易四则运算

    结对编程:简易四则运算 功能:进行简易的四则运算,并根据给出的结果判断正误. 实现:使用java的图形化界面实现. 导入包库 package six; import javax.swing.*; im ...