利用CNN网络模型,图片的风格可以定义成第l层隐藏层不同通道间激活函数的乘积(相关性)
选取第l层隐藏层,各通道使用不同颜色标注。因为每个通道提取图片的特征不同,比如1通道(红色)提取的是图片的垂直纹理特征,2通道(黄色)提取的是图片的橙色背景特征。那么这两个通道的相关性越大,表示原始图片及既包含了垂直纹理也包含了该橙色背景;相关性越小,表示原始图片并没有同时包含这两个特征。即计算不同通道的相关性,反映了原始图片特征间的相互关系,从某种程度上刻画了图片的“风格”
接下来定义图片的风格矩阵(style matrix)为:
Gkk′[l]=i=1∑nH[l]j=1∑nW[l]ai,j,k[l]ai,j,k′[l] ai,j,k[l]为隐藏层l中(i,j,k)位置的激活项,i,j,k分别代表该位置的高度、宽度以及对应的通道数,k,k′分别表示不同通道。风格矩阵Gkk′[l]计算第l层隐藏层不同通道对应的所有激活函数输出和,l层风格图像的矩阵G[l]是一个nc×nc的矩阵:
若两个通道之间相似性高,则对应的Gkk′[l]较大;若两个通道之间相似性低,则对应的Gkk′[l]较小
风格矩阵Gkk′[l](S)表征了风格图片S第l层隐藏层的“风格”。生成图片G也有Gkk′[l](G),Gkk′[l](S)与Gkk′[l](G)越相近,则表示G的风格越接近S。即Jstyle[l](S,G)定义为:
Jstyle[l](S,G)=4×nC2×(nH×nW)21i=1∑nCj=1∑nC(Gij(S)−Gij(G))2 然后使用梯度下降算法,不断迭代修正G的像素值,使Jstyle[l](S,G)不断减小
为了提取更多的“风格”,可以使用多层隐藏层,然后相加,表达式为:
Jstyle(S,G)=l∑λ[l]⋅Jstyle[l](S,G) λ[l]表示累加过程中各层Jstyle[l](S,G)的权重系数,为超参数
最终的cost function为:
J(G)=α⋅Jcontent(C,G)+β⋅Jstyle(S,G) 之后用梯度下降法,或者更复杂的优化算法来找到一个合适的图像G,并计算J(G)的最小值,这样将能够得到非常好看的结果