吴恩达教授卷积神经网络的课程中,有一部分是关于风格迁移的内容。组合内容图片,风格图片生成新的图片

主体思路是:

  1. 随机生成一张图片(可以基于原内容图片生成,从而加速训练)
  2. 计算其与内容图片之间的内容损失 J c o n t e n t J_{content} Jcontent​
  3. 计算其与风格图片之间的风格损失 J s t y l e J_{style} Jstyle​
  4. 最小化损失函数 J = α J c o n t e n t + β J s t y l e J=αJ_{content}+βJ_{style} J=αJcontent​+βJstyle​(其中α,β为超参数)

对于内容损失函数,比较容易理解。

内容损失函数是比较容易理解的(比较生成的图片与内容图片在预训练好的网络中某一层的特征图的相似度

(计算两个特征图的L2距离))

风格损失函数
  1. 公式

    a i j k [ l ] S a_{ijk}^{[l]S} aijk[l]S​是风格图片在CNN第 l l l层第 ( i , j , k ) (i,j,k) (i,j,k)位置的输出,其中 ( i , j , k ) (i,j,k) (i,j,k)对应高,宽,通道

    G k k ′ [ l ] S = ∑ i = 1 n H [ l ] ∑ j = 1 n W [ l ] a i j k [ l ] S a i j k ′ [ l ] S G_{kk'}^{[l]S}=\sum_{i=1}^{n_H^{[l]}}\sum_{j=1}^{n_W^{[l]}}a_{ijk}^{[l]S}a_{ijk'}^{[l]S} Gkk′[l]S​=∑i=1nH[l]​​∑j=1nW[l]​​aijk[l]S​aijk′[l]S​

    G k k ′ [ l ] G = ∑ i = 1 n H [ l ] ∑ j = 1 n W [ l ] a i j k [ l ] G a i j k ′ [ l ] G G_{kk'}^{[l]G}=\sum_{i=1}^{n_H^{[l]}}\sum_{j=1}^{n_W^{[l]}}a_{ijk}^{[l]G}a_{ijk'}^{[l]G} Gkk′[l]G​=∑i=1nH[l]​​∑j=1nW[l]​​aijk[l]G​aijk′[l]G​

    J s t y l e ( S , G ) = ∣ ∣ G [ l ] S − G [ l ] G ∣ ∣ F 2 / ( 2 n W [ l ] n H [ l ] n c [ l ] ) = ∑ k ∑ k ′ ( G k k ′ [ l ] S − G k k ′ [ l ] G ) 2 / ( 2 n W [ l ] n H [ l ] n c [ l ] ) J_{style}(S,G)=||G^{[l]S}-G^{[l]G}||_{F}^{2}/(2n_{W}^{[l]}n_{H}^{[l]}n_{c}^{[l]})=\sum_k\sum_{k'}(G_{kk'}^{[l]S}-G_{kk'}^{[l]G})^2/(2n_{W}^{[l]}n_{H}^{[l]}n_{c}^{[l]}) Jstyle​(S,G)=∣∣G[l]S−G[l]G∣∣F2​/(2nW[l]​nH[l]​nc[l]​)=∑k​∑k′​(Gkk′[l]S​−Gkk′[l]G​)2/(2nW[l]​nH[l]​nc[l]​)

  2. 详解

    • 首先我们要知道CNN中第l层的每一个通道以及每一个通道中的值( a i j k [ l ] a_{ijk}^{[l]} aijk[l]​)代表什么

      在feature map中,每个数字都来自于一个特定滤波器在特定位置的卷积,因此每个数字代表一个特征的强度(https://blog.csdn.net/wangyang20170901/article/details/79037867)

    • 对于 G k k ′ [ l ] = ∑ i = 1 n H [ l ] ∑ j = 1 n W [ l ] a i j k [ l ] a i j k ′ [ l ] G_{kk'}^{[l]}=\sum_{i=1}^{n_H^{[l]}}\sum_{j=1}^{n_W^{[l]}}a_{ijk}^{[l]}a_{ijk'}^{[l]} Gkk′[l]​=∑i=1nH[l]​​∑j=1nW[l]​​aijk[l]​aijk′[l]​,中的 G G G被称为 g r a m gram gram矩阵

      G G G是一个 k ∗ k k*k k∗k 大小的矩阵,k为通道数。

      G k k ′ [ l ] = ∑ i = 1 n H [ l ] ∑ j = 1 n W [ l ] a i j k [ l ] a i j k ′ [ l ] G_{kk'}^{[l]}=\sum_{i=1}^{n_H^{[l]}}\sum_{j=1}^{n_W^{[l]}}a_{ijk}^{[l]}a_{ijk'}^{[l]} Gkk′[l]​=∑i=1nH[l]​​∑j=1nW[l]​​aijk[l]​aijk′[l]​

      G k k ′ G_{kk'} Gkk′​则是gram矩阵中(k,k’)位置的值,由累加第k与第k‘个通道的相应位置的值的乘积得到

      gram矩阵可以看做feature之间的偏心协方差矩阵(即没有减去均值的协方差矩阵),Gram计算的实际上是两两特征之间的相关性,哪两个特征是同时出现的,哪两个是此消彼长的等等,同时,Gram的对角线元素,还体现了每个特征在图像中出现的量(https://blog.csdn.net/wangyang20170901/article/details/79037867)

    • 当我们获取了gram矩阵,实际上就是把握住了这幅作品,不同特征之间的关系与联系,比如哪一种特征的量比较多,哪些特征和出现比较多的这个特征正相关or负相关,从而得出了这个作品的风格, 而进一步通过style图片和generate图片的gram矩阵之间的计算出相应的风格损失函数,就可以比较出两者在风格之间的差异。

  3. 关键点

    理解feature map的含义以及将feature map不同通道之间的关系转换到风格上。

风格迁移-风格损失函数(Gram矩阵)理解相关推荐

  1. Stanford CS230深度学习(六)目标检测、人脸识别和神经风格迁移

    在CS230的lecture 6中主要吴恩达老师讲述了一些关于机器学习和深度学习的tips,用一个触发词台灯的例子教我们如何快速的解决实际中遇到的问题,这节课主要是偏思维上的了解,还是要实际问题实际分 ...

  2. 动手深度学习13:计算机视觉——语义分割、风格迁移

    文章目录 一.语义分割 1.1 语义分割简介 1.2 Pascal VOC2012 语义分割数据集 1.2.1下载.读取数据集 1.2.2 构建字典(RGB颜色值和类名互相映射) 1.2.3 数据预处 ...

  3. 风格迁移相关论文阅读笔记

    <图像和视频油画风格化研究> 西安交通大学 2011年 论文网址: http://kns.cnki.net/KCMS/detail/detail.aspx?dbcode=CJFQ& ...

  4. TensorFlow练手项目三:使用VGG19迁移学习实现图像风格迁移

    使用VGG19迁移学习实现图像风格迁移 2020.3.15 更新: 使用Python 3.7 + TensorFlow 2.0的实现: 有趣的深度学习--使用TensorFlow 2.0实现图片神经风 ...

  5. 深度学习项目二: 图像的风格迁移和图像的快速风格迁移 (含数据和所需源码)

    图像风格迁移是指,将一幅内容图的内容,和一幅或多幅风格图的风格融合在一起,从而生成一些有意思的图片 一:传统的图像风格迁移 为了让我们生成的迁移图在风格上与风格图片尽可能相似,在内容上尽可能与内容图相 ...

  6. Pytorch实现图像风格迁移(一)

    图像风格迁移是图像纹理迁移研究的进一步拓展,可以理解为针对一张风格图像和一张内容图像,通过将风格图像的风格添加到内容图像上,从而对内容图像进行进一步创作,获得具有不同风格的目标图像.基于深度学习网络的 ...

  7. 计算机也能成为艺术家?(基于论文A Neural Algorithm of Artistic Style的图像风格迁移)

    文章目录 引言 可解释性 一种途径:特征可视化 特征和风格,两者或许是一种东西 图像纹理生成 格拉姆矩阵 纹理生成网络 纹理损失函数 从纹理合成到风格迁移 内容损失函数 总损失函数 Torch代码实战 ...

  8. python神经结构二层_《python深度学习》笔记---8.3、神经风格迁移

    <python深度学习>笔记---8.3.神经风格迁移 一.总结 一句话总结: 神经风格迁移是指将参考图像的风格应用于目标图像,同时保留目标图像的内容. 1."神经风格迁移是指将 ...

  9. 深度有趣 | 30 快速图像风格迁移

    简介 使用TensorFlow实现快速图像风格迁移(Fast Neural Style Transfer) 原理 在之前介绍的图像风格迁移中,我们根据内容图片和风格图片优化输入图片,使得内容损失函数和 ...

最新文章

  1. Java 发送QQ邮箱邮件
  2. linux date时间戳互相转换
  3. 一致性哈希算法——算法解决的核心问题是当slot数发生变化时,能够尽量少的移动数据...
  4. android sdk 源码解析
  5. java队列转集合_Java集合 使用Queue
  6. c++Error:c++调用python文件提示由于找不到python3.8.dll,无法继续运行。。。
  7. Android SDK打包
  8. URAL - 1732 Ministry of Truth--kmp算法的应用(kmp模板)
  9. 一文详解 Java 的几把 JVM 级锁
  10. 《『若水新闻』客户端开发教程》——03.设计新闻分类UI(1)
  11. HP380 G9服务器RAID划分
  12. OpenCV学习笔记__特征检测与匹配之 SURF算法(转)
  13. C4认证Java基础Excel练习题
  14. Git:Terminal is dumb, but EDITOR unset
  15. (18) 基于时空多图卷积网络的网约车需求预测
  16. (转)execute、executeQuery和executeUpdate之间的区别
  17. DVD-ROM区域码巧破解[转]
  18. vue 使用quill-editor富文本编辑框
  19. Android X86
  20. 77种网络经济创新模式

热门文章

  1. 实例比较单精度浮点型,双精度浮点型运算结果精度
  2. project Structure中的Artifacts是什么
  3. python中sep的用法:逗号的去除
  4. what is pathon?(脚本语言pathon简介)
  5. 红外光谱曲线的基线调整
  6. 互联网日报 | 1月12日 星期二 | 百度宣布组建智能汽车公司;京东成立京东科技子集团;QQ兴趣部落即将全面停运下线...
  7. 中国没有乔布斯,美国没有史玉柱
  8. 电脑蓝屏了,错误代码:0x000000CE: DRIVER_UNLOADED_WITHOUT_CANCELLING_PENDING_OPERATIONS
  9. 【word】word表格不自动跨页,文字显示不全
  10. BETWEEN AND 操作符