风格迁移与人脸识别

完成卷积神经网络课程后仅以此文作为课程内容梳理及学习笔记.

风格迁移

风格迁移定义原始图画为C,风格画为S,输出为G.

风格迁移的损失函数为 J(G) :
J(G) = \alpha J_{content}(C,G) + \beta J_{style}(S,G)

它是 J_{content}(C,G) J_{style}(S,G) 的加权和, J_{content}(C,G) J_{style}(S,G) 分别代表输出与原始画的相似度,及风格与原始图画的相似度.这很容易理解,损失函数的目的是G与S和C都尽可能的相似.

风格迁移使用已经在大量数据上训练完的模型,比如说VGG,它在ImageNet上训练过,模型的每个层对不同形态的图像有一定的识别能力.卷积网络中浅层倾向于检测较低级别的特征,例如边缘和简单纹理,而深层倾向于检测更高级别的特征. J_{content}(C,G) 是C与G参数差.

J_{content}(C,G) = \frac{1}{4 \times n_H \times n_W \times n_C}\sum _{ \text{all entries}} (a^{(C)} - a^{(G)})^2

在计算S与G的相似度的时候我们不是直接比较参数的差,而是计算一个风格矩阵:
G_A = AA^T

接下来比较S的分割矩阵与G的风格矩阵的差:
J_{style}^{[l]}(S,G) = \frac{1}{4 \times {n_C}^2 \times (n_H \times n_W)^2} \sum _{i=1}^{n_C}\sum_{j=1}^{n_C}(G^{(S)}_{ij} - G^{(G)}_{ij})^2
J_{style}(S,G) = \sum_{l} \lambda^{[l]} J^{[l]}_{style}(S,G)

在模型训练的过程中,先生成C与S相对常数,所以 J(G) 中只有G是变量,每次迭代都会调整G的像素,最终达到风格迁移的效果.

人脸识别

人脸识别中神经网络会把人脸生成一个编码,我们只需要比较这个编码与数据库中的人脸编码差距的大小就可以得出结论.所以人脸识别的目的是同一个人照片编码的差距尽可能小,不同人照片编码的差距尽可能大.

训练模型是需要待识别照片A,同一个人的照片P,不同人的照片N,我们希望 f(A) - f(P) 尽可能小,而 f(A) - f(N) 尽可能大,即:

\mid \mid f(A^{(i)}) - f(P^{(i)}) \mid \mid_2^2 + \alpha < \mid \mid f(A^{(i)}) - f(N^{(i)}) \mid \mid_2^2

做下变换,可以得到最终的代价函数:

\mathcal{J} = \sum^{m}_{i=1} \large[ \small \mid \mid f(A^{(i)}) - f(P^{(i)}) \mid \mid_2^2 - \mid \mid f(A^{(i)}) - f(N^{(i)}) \mid \mid_2^2+ \alpha \large ] \small_+

posted @ 2018-11-20 11:45:05
评论加载中...
发表评论