目录
1.神经风格迁移
(1)解释
2.深层卷积网络的特征检测
3.成本函数
(1)成本函数
(2)内容代价函数
(3)风格代价函数
1.神经风格迁移
(1)解释
- 首先要知道三个图像,C来表示内容图像,S表示风格图像,G表示生成图像。
- 如上图,神经风格迁移就是将风格迁移到内容图像上。
2.深层卷积网络的特征检测
卷积网络一般是从浅到深检测到越来越复杂的特征。
如上图,一个AlexNet,假设一个隐藏单云有9个图片块最大化激活。
如上图,是Layer1-Layer5得到的图片块。在Layer1中,隐藏单元通常会找一些简单的特征,比如说边缘或者颜色阴影。
第二层似乎检测到更复杂的形状和模式,比如说这个隐藏单元(编号1),找到有很多垂线的垂直图案,隐藏单元(编号2)似乎在左侧有圆形图案(roundish shape)时会被高度激活。
第三层,正中间的隐藏单元似乎对图像左下角的圆形很敏感,所以检测到很多车。右下角的隐藏单元似乎开始检测到人类。总的来看第三层明显检测到更复杂的模式
依次递进,越深层越能检测到复杂的特征
3.成本函数
(1)成本函数
- 要构建一个神经风格迁移系统,需要为生成的图像定义一个成本函数,通过最小化成本函数,可以生成你想要的任何图像。
- 内容图像C,风格图片S,生成新图片G。为了实现神经风格迁移,定义一个关于G的成本函数J(G)来评判生成图像的好坏,然后使用梯度下降法最小化J(G)来生成新的图像G。定义成本函数的公式如下:J(G)=αJ(C, G) +βJ(S, G)
- 这个成本函数分为两部分,第一部分是内容代价函数,第二部分是风格代价函数
(2)内容代价函数
用隐含层l来计算内容代价函数,如果l是个很小的数,这个代价函数就会使生成图片像素上非常接近内容图片。如果用很深的层,那么如果问内容图片里是否有狗,然后它就会确保生成图片里有一个狗。所以在实际中,这个层l通常会选择在网络的中间层。
然后用一个预训练的卷积模型,衡量一个内容图片和一个生成图片他们在内容上的相似度,
a[l](C)和a[l](G)分别代表这两个图片C和G的l层的激活函数值,如果这两个激活值相似,那么就意味着两个图片的内容相似。衡量两个激活值不同或相似的程度用如下公式:
J(C, G) =1/2 ‖ a[l](C) - a[l](G) ‖²
(3)风格代价函数
- 和内容代价函数一样,也是选取某一层l,将图片的风格定义为l层中各个通道之间激活项的相关系数。
- 如上图,这个相关系数可以看成不同通道激活值之间的组合,比如两个通道的激活值组合成一对数字,来表示两种特征间的相关性。(因为有多个通道,多种组合,所以有多个数字对)
- 比如:这个红色的通道对应的第2个神经元,它能找出图片中的某些位置是否含有这些垂直的纹理,而第二个通道(黄色通道),对应第4个神经元,它可以粗略地找出橙色的区域,这两个通道的组合成的相关系数,代表了那么这幅图片中出现垂直纹理又是橙色地方的概率。如果说它们是不相关的,这意味着图片中有垂直纹理的地方很大概率不是橙色的。因此,相关系数提供了一种去测量这些不同的特征的方法。
- 如上图,对于S,G这两个图像,需要通过各自相关系数计算一个风格矩阵,最后通过两个矩阵计算风格代价函数(这里用的Frobenius范数)。
- 其中a[l]i,j,k 表示隐藏层l中(i,j,k)位置的激活值,i,j,k分别表示该位置的高度、宽度以及对应的通道数。计算关于l层和风格图像的一个矩阵,即
G[l][S],这是一个n_c * n_c的矩阵,高度和宽度都是l层的通道数。矩阵中的k和k'被用来描述k通道和