文章

09 内容代价函数(Content Cost Function)

09 内容代价函数(Content Cost Function)

09 内容代价函数(Content Cost Function)

一、背景:风格迁移的总代价函数结构

神经风格迁移(Neural Style Transfer) 任务中,目标是生成一张既保留内容图像(content image)语义内容,又具有风格图像(style image)艺术风格的新图像。

为此,总代价函数由两部分组成:

\[J(G) = \alpha \cdot J_{\text{content}}(C, G) + \beta \cdot J_{\text{style}}(S, G)\]

其中:

  • $C$:内容图像(Content image)
  • $S$:风格图像(Style image)
  • $G$:生成图像(Generated image)
  • $\alpha, \beta$:超参数,控制内容与风格的相对权重

本节聚焦于 内容代价函数 $J_{\text{content}}(C, G)$ 的定义与原理。


二、内容代价函数的设计思想

1. 使用预训练 CNN 的中间层激活值衡量“内容相似度”

  • 利用一个预训练的卷积神经网络(如 VGG-19)作为特征提取器。
  • 选择某一层 $l$(通常为中间层,既不太浅也不太深)的激活值来表示图像的“内容”。

    • 若选浅层(如 conv1_1):激活值反映像素级细节 → 生成图会过于接近内容图的像素,缺乏风格自由度。
    • 若选深层(如 conv5_4):激活值反映高级语义(如“是否有狗”)→ 可能丢失局部结构。
    • 实践中常选中间层(如 conv4_2 in VGG-19),平衡语义与结构。

2. 核心假设:

如果两张图像在某 CNN 层 $l$ 的激活值相似,则它们在“内容”上相似。


三、内容代价函数的数学定义

设:

  • $a^{[l]!(C)}$:内容图像 $C$ 在第 $l$ 层的激活值(形状为 $n_H \times n_W \times n_C$)
  • $a^{[l]!(G)}$:生成图像 $G$ 在第 $l$ 层的激活值

将激活张量展平为向量(或直接按元素计算),定义内容代价为:

\[J_{\text{content}}^{[l]}(C, G) = \frac{1}{4 \cdot n_H \cdot n_W \cdot n_C} \left\| a^{[l]\!(C)} - a^{[l]\!(G)} \right\|_F^2\]

其中:

  • $|\cdot|_F$ 表示 Frobenius 范数(即所有元素差的平方和再开方,但这里取平方,故为平方 Frobenius 范数)
  • 分母中的 $4 n_H n_W n_C$ 是一种归一化因子(有时也写作 $2 n_H n_W n_C$,不同实现略有差异,但可通过超参数 $\alpha$ 吸收)

💡 注:有些资料省略归一化项,写作

\[J_{\text{content}} = \frac{1}{2} \sum_{i,j,k} \left( a^{[l]\!(C)}_{ijk} - a^{[l]\!(G)}_{ijk} \right)^2\]

这与上述形式等价,仅常数因子不同,不影响优化方向。


四、关键要点总结

要点说明
目的使生成图像 $G$ 在 CNN 某层的激活值接近内容图像 $C$,从而保留其内容
网络选择使用预训练 CNN(如 VGG-19),固定权重,仅用作特征提取器
层的选择通常选中间层(如 conv4_2),避免太浅(像素级)或太深(语义级)
数学本质计算两图像在某层激活值的均方误差(MSE)
优化方式对生成图像 $G$ 进行梯度下降,最小化 $J_{\text{content}}$

五、后续衔接

内容代价函数确保生成图“像内容图”,而风格代价函数(下一节)则通过Gram 矩阵捕捉纹理、颜色、笔触等风格特征。两者结合,即可实现高质量的风格迁移。


学习建议:在编程练习中,尝试不同层(如 conv2_2, conv4_2, conv5_2)对生成结果的影响,直观理解“层深度 vs 内容抽象程度”的关系。

本文由作者按照 CC BY 4.0 进行授权