4.4特殊应用:人脸识别和神经网络风格转换
觉得有用的话,欢迎一起讨论相互学习~
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 ) = α J C o n t e n t ( C , G ) + β J s t y l e ( S , G ) J(G)=\alpha J_{Content}(C,G)+\beta J_{style}(S,G) J(G)=αJContent(C,G)+βJstyle(S,G)
算法流程
- 初始化生成图像G:
- 尺寸为 100 ∗ 100 ∗ 3 100*100*3 100∗100∗3,或者是 500 ∗ 500 ∗ 3 500*500*3 500∗500∗3或者是任何你想要的尺寸。
- 使用梯度下降最小化损失函数J(G)
- 即 G = G − α 2 G J ( G ) G=G-\frac{\alpha}{2G}J(G) G=G−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 ) = α J C o n t e n t ( C , G ) + β J s t y l e ( S , G ) J(G)=\alpha J_{Content}(C,G)+\beta J_{style}(S,G) J(G)=αJContent(C,G)+βJstyle(S,G)
- 使用第l个隐藏层上的值来计算内容代价函数
- 如果l值很小,那么生成的图像在像素上很像内容图像
- 如果使用的l很大,那么生成的图像会偏风格化,而模糊原始图像的内容
- 所以一般l不会选的太深也不会太浅,会选择在网络中层数的中间位置
- 使用
a
[
l
]
(
C
)
和
a
[
l
]
(
G
)
a^{[l](C)}和a^{[l](G)}
a[l](C)和a[l](G)表示层数l的激活值。
- 如果这两个值相似,则表示这两张图片上的内容相似
- J c o n t e n t ( C , G ) = ( a [ l ] ( C ) − a [ l ] ( G ) ) 2 J_{content}(C,G)=(a^{[l](C)}-a^{[l](G)})^{2} Jcontent(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 ( i , j , k ) [ l ] a^{[l]}_{(i,j,k)} a(i,j,k)[l]
- 用
G
K
,
K
′
[
L
]
(
S
)
G^{[L](S)}_{K,K'}
GK,K′[L](S)表示S代表风格图片风格计算,L表示在第L层上计算图像风格,K和K’是用来计算相关性的L层的两个通道。风格图片的风格计算公式可如下表示:
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^{[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'} GK,K′[L](S)=i=1∑nH[l]j=1∑nW[l]ai,j,k[l](S)ai,j,k′[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^{[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'} GK,K′[L](G)=i=1∑nH[l]j=1∑nW[l]ai,j,k[l](G)ai,j,k′[l](G) - 在线性代数中,图像风格矩阵(Style matrix)也被称为“Gram matrix”, G [ l ] G^{[l]} G[l]是最终计算出的图像风格,其大小为 n c [ l ] ∗ n c [ l ] n^{[l]}_{c} * n^{[l]}_{c} nc[l]∗nc[l]正方形的矩阵,其中 n c [ l ] n^{[l]}_{c} nc[l]表示第l层特征图的通道数。即 G [ l ] G^{[l]} G[l]会由 G K , K ′ [ L ] ( S ) G^{[L](S)}_{K,K'} GK,K′[L](S)生成,其中参数k和k’会遍历 n c [ l ] n^{[l]}_{c} nc[l],即L层上特征图中的所有通道。
图像风格代价函数
- 当然如果对每一层都是用风格代价函数会让结果变得更好,此时表达式可表示为:
J s t y l e ( S , G ) = ∑ l λ [ l ] J s t y l e [ l ] ( S , G ) J_{style}(S,G)=\sum_{l}\lambda^{[l]}J_{style}^{[l]}(S,G) Jstyle(S,G)=l∑λ[l]Jstyle[l](S,G) - 其中,S表示风格图像,G表示生成图像,l表示遍历所有层, λ \lambda λ表示一些额外的超参数,这样能够在考虑风格切换的代价函数时同时考虑浅层的低级和更深层的高级特征。
风格迁移总体代价函数
- 如果在所有层上都计算风格迁移的内容和风格代价函数,则其可表示为:
J ( G ) = α J c o n t e n t ( C , G ) + β J s t y l e ( S , G ) J(G)=\alpha J_{content}(C,G)+\beta J_{style}(S,G) J(G)=αJcontent(C,G)+βJstyle(S,G)