1.网络模型
1.1 组成部分
网络模型总体分为两部分:Image Transform Net和VGG-16
- Image Transform Net是参数W待训练的网络
- VGG-16是已经预训练好参数的网络
1.2 工作原理
(1) 输入为 :
- 原始图像 x x x
- 风格目标图 y s y_s ys
- 内容目标图 y c y_c yc
(2) Image Transform Net作用:
- 将原始图像 x x x经过Image Transform Net得到输出图像 y ^ \hat{y} y^
- 映射关系为: y ^ = f W ( x ) \hat{y} = f_W(x) y^=fW(x)
- 其中W是Images Transform Net的参数 , x是网络输入,y是网络输出。
(3) VGG-16作用:
-
内容层面
将 y ^ \hat{y} y^ 与 y c y_c yc在VGG中间层的欧式距离作为Loss训练图像转换网络
使得Image Transform Net输出的 y ^ \hat{y} y^与目标内容图 y c y_c yc越来越接近
-
风格层面
将 y ^ \hat{y} y^ 与 y s y_s ys在VGG多个中间层得到的feature map生成的Gram矩阵的欧式距离加权和作为Loss训练图像转换网络
使得Image Transform Net输出的 y ^ \hat{y} y^与目标风格图 y s y_s ys越来越接近
2.损失函数
2.1特征内容损失(Feature Reconstruction Loss)
ℓ f e a t ∅ , j ( y ^ , y ) = 1 C j H j W j ∥ ∅ j ( y ^ ) − ∅ j ( y ) ∥ 2 \ell_{feat}^{\empty , j}(\hat{y},y) = \frac{1}{C_jH_jW_j}\Vert \empty_j(\hat{y})-\empty_j(y)\Vert_2 ℓfeat∅,j(y^,y)=CjHjWj1∥∅j(y^)−∅j(y)∥2
- j 表示VGG-16中间层代号
- y表示特征目标图像
- y ^ \hat{y} y^表示image transform net 输出的图像
- ∅ j ( y ) \empty_{j}(y) ∅j(y) 表示图像y在VGG-16中间层j时的输出
- ∅ j ( y ^ ) \empty_{j}(\hat{y}) ∅j(y^) 表示图像 y ^ \hat{y} y^在VGG-16中间层j时的输出
- C j H j W j C_jH_jW_j CjHjWj分别表示在VGG-16中间层j时的通道数、高度、宽度
Feature Reconstruction Loss 这数学公式就可以理解为两个图像在VGG-16中间层j的欧氏距离
越小说明VGG-16网络认为这两张图越接近
2.2风格损失(Style Reconstruction Loss)
- Gram特征矩阵中的元素
G j ∅ ( x ) c , c ′ = 1 C j H j W j ∑ h = 1 H j ∑ w = 1 W j ∅ j ( x ) h , w , c ∅ j ( x ) h , w , c ′ G_{j}^{\empty}(x)_{c,c^{'}} = \frac{1}{C_jH_jW_j} \sum_{h=1}^{H_j} \sum_{w=1}^{W_j}\empty_j(x)_{h,w,c}\empty_{j}(x)_{h,w,c^{'}} Gj∅(x)c,c′=CjHjWj1h=1∑Hjw=1∑Wj∅j(x)h,w,c∅j(x)h,w,c′
VGG中间层j的feature map大小为[ C j C_j Cj, H j H_j Hj, W j W_j Wj]
我们经过flatten和矩阵转置操作可以变形为[ C j C_j Cj , H j ∗ W j H_j*W_j Hj∗Wj]和的[ H j ∗ W j H_j*W_j Hj∗Wj , C j C_j Cj]矩阵
再对两个作内积得到Gram Matrices大小为[ C j , C j C_j,C_j Cj,Cj]
- 中间层j的风格损失
ℓ s t y l e ∅ , j ( y ^ , y ) = ∥ G j ∅ ( y ^ ) − G j ∅ ( y ) ∥ F 2 \ell_{style}^{\empty,j}(\hat{y},y) =\Vert G_j^{\empty}(\hat{y}) - G_j^{\empty}(y)\Vert_{F}^{2} ℓstyle∅,j(y^,y)=∥Gj∅(y^)−Gj∅(y)∥F2
计算图像 y y y和图像 y ^ \hat{y} y^两者VGG-16中间层j中gram矩阵距离的平方和
2.3简单损失函数
-
像素损失
像素损失是输出图和目标图之间标准化的差距
ℓ p i x e l ( y ^ , y ) = 1 C H W ∥ y ^ − y ∥ 2 2 \ell_{pixel}({\hat{y},y}) = \frac{1}{CHW}\Vert \hat{y}-y\Vert_2^2 ℓpixel(y^,y)=CHW1∥y^−y∥22 -
全变差正则化
为使得输出图像比较平滑,遵循了前人在特征反演上的研究,在超分辨率重建上使用了全变差正则化 ℓ T V ( y ^ ) \ell_{TV}(\hat{y}) ℓTV(y^)
3.Image Transform Net细节
3.1 风格迁移
Layer |
---|
9x9 conv , stride=2 |
3x3 conv , stride=2 |
Residual blocks |
Residual blocks |
… |
Residual blocks |
3x3 conv , stride= 1 2 \frac{1}{2} 21 |
9x9 conv , stride= 1 2 \frac{1}{2} 21 |
具体解释
1.输入 x x x 大小为3x256x256
2.使用2层 stride=2 的卷积层进行下采样
3.使用5个残差模块
4.使用2层stride= 1 2 \frac{1}{2} 21的卷积层进行上采样
5.输出 y ^ \hat{y} y^ 大小为3x256x256
输入图像与输出图像大小相同 先下采样再上采样的好处
- 可计算复杂性
- 比较
- 3x3的C个卷积核 在CxHxW的图像上 需要 9 C 2 H W 9C^2HW 9C2HW
- 3x3的DC个卷积核 在DC x H D \frac{H}{D} DHx W D \frac{W}{D} DW 的图像上 也需要 9 C 2 H W 9C^2HW 9C2HW
- 在下采样之后,我们可以使用一个更大的网络来获得相同的计算成本
- 有效的感受野大小
- 优势就在于在输出中的每个像素都有输入中的大面积有效的感受野
- 一个附加的3x3卷积层都能把感受野的大小增加2倍
- 在用因子D进行下采样后,每个3x3的卷积增加感受野的大小到2D
- 下采样使得相同数量的层给出了更大的感受野大小
3.2超分辨率
假设上采样因子为 f f f
Layer |
---|
Residual blocks |
Residual blocks |
… |
Residual blocks |
3x3 conv , stride= 1 2 \frac{1}{2} 21 |
3x3 conv , stride= 1 2 \frac{1}{2} 21 |
( 一 共 使 用 log 2 f 个 c o n v 一共使用\log_2{f}个conv 一共使用log2f个conv) |
9x9 conv , stride= 1 2 \frac{1}{2} 21 |
具体解释
1.输入 x x x 大小为3 x 288 f \frac{288}{f} f288 x 288 f \frac{288}{f} f288
2.使用 5个残差模块
3.使用\log_2{f}个stride= 1 2 \frac{1}{2} 21的卷积层进行上采样
5.输出 y ^ \hat{y} y^ 大小为3x288x288
3.3 残差连接
3.4其他细节
- 除开第一个和最后一个层用9x9的kernel 其他所有卷积层都用3x3的kernels
- 优化方法选的是SGD(随机梯度下降法)
- 除去最后一层卷积层后连接Tanh激活层,其他非残差卷积层都连接Batch Norm归一层和ReLu激活层
- 上面的做法可以使得输出图像的像素值在 [0*,* 255]这个范围