风格转化及其Loss

风格转换及其Loss的问题来源于自己之前对于CVPR2019论文的分享,牵扯到风格转换的相关知识,在此进行相关总结。

1、风格转换问题常见Loss

content loss: 使用逐像素计算差值,又称pixel-wise loss,追求生成的图片和原始的图片逐像素的差值尽可能的小;很多时候会使用mse(mean square error)来作为损失函数。

style loss:经常借助于Gram矩阵定义,常见的做法是:两张图片,在loss网络的每一层都求出Gram矩阵,然后对应层之间计算欧式距离,最后将不同层的欧氏距离相加,得到最后的风格损失。

content loss与style loss对应着图像的content reconstruction 和 style reconstruction,content loss是生成图与content image进行的计算;style loss是生成图与style image进行的比较计算。

perceptual loss:将卷积神经网络提取出的feature,作为目标函数的一部分,通过比较待生成的图片经过CNN的feature值与目标图片经过CNN的feature值,使得待生成的图片与目标图片在语义上更加相似(相对于Pixel级别的损失函数,即相比于content loss更为关注语义层面的内容)。
adversarial losses:GAN中常见的Loss形式,多写作为:

2、从Style的角度理解Instance Normalization

本部分转载自https://zhuanlan.zhihu.com/p/57875010,写的很好很明白。
分享一种理解Instance Normalization (IN) 的新视角:在计算机视觉中,IN本质上是一种Style Normalization,它的作用相当于把不同的图片统一成一种风格。这个视角是在黄勋和Serge Belongie的《Arbitrary Style Transfer in Real-time with Adaptive Instance Normalization》中看到的。

黄勋等人提出,图像的风格(artistic style)就是特征图各个feature channel跨空间的统计信息,比如mean和variance。迁移各个channel的mean和variance就可以实现风格迁移,为此他们提出了Adaptive Instance Normalization。

其中Gatys等人是关于风格转换方面的祖师爷,其在论文中提出关于Gram矩阵使用的论点论据,有空可以拜读下相关论文 Image style transfer using convolutional neural networks. CVPR, 2016,该文章也写作:A Neural Algorithm of Artistic Style

3、夹带关于神经网络输入size的讨论

典型的CNN架构如下:

经典的网络结构包括:卷积层(卷积+非线性激活)+池化层+全连接层+分类层。其中,卷积层、池化层、分类层其实都不在意图像大小,但是全连接层有问题。一般而言,全连接层的一个神经元对应一个输入。换句话说,全连接层要求固定的输入维度。而不同大小的图像,经过卷积模块(卷积+非线性激活+池化)之后输出的特征映射维度是不一样的。也就是说:某种意义上因为有全连接层的存在,输入图像的大小必须固定。

这正是Jonathan Long提出的FCN(Fully Convolutional Networks,全卷积网络)背后的思路,用卷积层替换全连接层。

除了卷积层这一种方法之外,还可以用别的层替换全连接层。比如用全局平均池化(Global Average Pooling)层替换全连接层: 关于global average pooling的解释我在个人笔记中有记载,是一种形式非常简单粗暴的下采样方式,与max pooling合为两种典型的pooling用法。

不过,也不是说只要有全连接层,输入的图像大小就一定要固定。之前提到过,固定输入图像大小的原因是:全连接层要求固定的输入维度。那么除了像上面这样干脆用卷积层替换全连接层,还有一种思路,就是在卷积模块和全连接层之间加一个中间层,整理一下卷积模块的输出,保证不管输入图像大小怎么变,传给全连接层的始终是固定维数的输入。
Kaiming He等提出的SPP(Spatial Pyramid Pooling,空间金字塔池化)就是这种处理思路:

上图示意了引入SPP前后的不同流程。上流程为传统的CNN架构,图像(image)经过裁剪或拉伸(crop/warp)统一尺寸,再传给卷积层(conv layers);下流程为应用了SPP层后的架构,图像直接传给卷积层,然后经过SPP处理,统一维度再传给全连接层(fc layers)。

### AIGC风格迁移技术的实现方法 #### 背景介绍 风格迁移是一种将图像的内容与另一种图像的艺术风格相结合的技术,广泛应用于艺术创作和图像处理领域。通过AIGC(人工智能生成内容),可以利用深度学习模型来完成这一过程。 #### 基本原理 风格迁移的核心在于分离并重组图像的两个主要特征:**风格**和**内容**。具体来说,可以通过神经网络提取输入图像的内容信息以及参考图像的风格信息,并将其组合生成新图像[^2]。 #### 技术实现方式 以下是几种常见的风格迁移技术及其实现方法: #### 1. 使用条件生成对抗网络(cGAN) 条件生成对抗网络(Conditional GAN)是实现风格迁移的一种有效工具。它由生成器和判别器组成,其中生成器负责根据给定的条件生成目标图像,而判别器则用于判断生成的图像是否真实[^1]。 生成器通常会接收两种输入:原始图像的内容表示和期望的目标风格向量。经过训练后,生成器能够输出融合了指定风格的新图像。 #### 2. 图像分解与重建 一种更基础的方式是定义两个函数 `f` 和 `g`: - **函数 f**: 将一张图片拆解为其对应的风格和内容部分,即 \( f(\text{image}) \to (\text{style}, \text{content}) \)[^4]。 - **函数 g**: 接收风格和内容作为参数,重新构建出完整的图片,即 \( g(\text{style}, \text{content}) \to \text{image} \)。 这种方法的关键在于如何设计合适的损失函数以优化这两个映射关系。常用的策略包括感知损失(Perceptual Loss)、样式损失(Style Loss)等内容相似度衡量指标。 #### 3. 序列到序列模型(Seq2Seq)在文本上的扩展 对于文本数据而言,也可以采用类似的思路来进行风格迁移。例如,在自然语言处理中,基于 Seq2Seq 的框架被用来改变句子的语言风格或语气,同时保持语义不变[^3]。此类方法依赖于编码器-解码器结构,先将源句转化为隐状态表达形式,再依据目标域特性调整该表征最后译回对应的话语片段。 #### 示例代码 下面给出一段简单的 PyTorch 实现示例,展示如何使用预训练 VGG 网络计算风格损失和内容损失从而执行基本的视觉风格转移任务: ```python import torch from torchvision import models def get_features(image, model, layers=None): """ 提取VGG各层激活值 """ if layers is None: layers = {'0': 'conv1_1', '5': 'conv2_1', '10': 'conv3_1', '19': 'conv4_1'} features = {} x = image for name, layer in model._modules.items(): x = layer(x) if name in layers: features[layers[name]] = x return features vgg = models.vgg19(pretrained=True).features.eval() # 定义损失函数... ``` 上述代码仅展示了获取中间特征的部分逻辑;完整版还需加入梯度下降更新机制以便最小化总误差直至收敛为止。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值