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)
算法流程 初始化生成图像 G:100*100*3 ,或者是
500*500*3 或者是任何你想要的尺寸。
使用梯度下降最小化损失函数 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 "l")}和a^{[l](G "l")} 表示层数 l 的激活值。
J_{content}(C,G)=(a^{[l](C "l")}-a^{[l](G "l")})^{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 "L")}_{K,K'} 表示 S 代表风格图片风格计算,L 表示在第 L 层上计算图像风格,K 和 K'是用来计算相关性的 L 层的两个通道。风格图片的风格计算公式可如下表示:
G^{[L](S "L")}_{K,K'}=\sum^{n^{[l]}_{H}}_{i=1}\sum^{n^{[l]}_{W}}_{j=1}a^{[l](S "l]}_{H}}_{i=1}\sum^{n^{[l]}_{W}}_{j=1}a^{[l")}_{i,j,k}a^{[l](S "l")}_{i,j,k'}
生成图像的风格计算公式可如下表示:
G^{[L](G "L")}_{K,K'}=\sum^{n^{[l]}_{H}}_{i=1}\sum^{n^{[l]}_{W}}_{j=1}a^{[l](G "l]}_{H}}_{i=1}\sum^{n^{[l]}_{W}}_{j=1}a^{[l")}_{i,j,k}a^{[l](G "l")}_{i,j,k'}
在线性代数中,图像风格矩阵(Style matrix)也被称为“Gram matrix”, G^{[l]} 是最终计算出的图像风格,其大小为
n^{[l]}_{c} * n^{[l]}_{c} 正方形的矩阵,其中
n^{[l]}_{c} 表示第 l 层特征图的通道数。即
G^{[l]} 会由
G^{[L](S "l]} 是最终计算出的图像风格,其大小为
n^{[l]}_{c} * n^{[l]}_{c} 正方形的矩阵,其中
n^{[l]}_{c} 表示第 l 层特征图的通道数。即
G^{[l]} 会由
G^{[L")}_{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)
参考资料 [1]
吴恩达老师课程原地址: https://mooc.study.163.com/smartSpec/detail/1001319001.htm