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. 20162328蔡文琛 week06 大二

    20162328 2017-2018-1 <程序设计与数据结构>第6周学习总结 教材学习内容总结 队列元素按FIFO的方式处理----最先进入的元素最先离开. 队列是保存重复编码k值得一种 ...

  2. 简评搜狗输入法(ios端)

    首先说说为什么不使用iPhone自带的输入法呢,首先是词库不够丰富,好多简单的词语需要逐个字逐个字的选择,记忆功能不太好,其次是全键盘式的输入我不太习惯,还是九宫格的输入法比较简单,更方便快捷. 搜狗 ...

  3. 在html中怎么格式化输出json字符串

    #今天的项目用到,看俊哥找到,特此记录下来 步骤: 1.在html页面中输入下面的标签,必须是在pre标签内输出格式才会生效: <pre id="songReqJson"&g ...

  4. spring框架(3)— spring集合类的注入

    1.Car.java package com.eniac.beans; public class Car { private String type; private String factory; ...

  5. android入门 — Activity启动模式

    1.standard模式 standard模式是系统的默认启动方式,每次激活Activity都会创建Activity,并放在任务栈中. 系统不会在乎活动是否已经存在于返回栈中,每次启动都会创建该活动的 ...

  6. QMap使用

    版权声明:若无来源注明,Techie亮博客文章均为原创. 转载请以链接形式标明本文标题和地址: 本文标题:QMap使用     本文地址:https://www.techieliang.com/201 ...

  7. 有一个集合,判断集合里有没有“world”这个元素,如果有,添加“javaee”

    // 有一个集合,判断集合里有没有“world”这个元素,如果有,添加“javaee” List list = new ArrayList(); list.add("world") ...

  8. mysql有索引和无索引的查询速度对比

    演示100万级数据有索引和无索引的情况下的查找速度:

  9. DataTable Excel 导出:

    public static class CSVFileHelper { public static string ToHtmlTable(this DataTable target) { return ...

  10. 转换成json字符串,与json字符串转换成java类型都要先转换成json对象

    转换成json字符串,与json字符串转换成java类型都要先转换成json对象