StyTr^2:Image Style Transfer with Transformers

StyTr2是一个使用Transformer的图像风格迁移框架,解决了基于CNN方法的有偏问题。它包含两个特定域的Transformer编码器,以内容和样式生成序列,并通过内容感知位置编码(CAPE)解决分辨率变化导致的位置偏差。Transformer解码器采用非自回归方法,以提高生成图像的质量。实验表明,StyTr2能有效保留结构和内容细节。
摘要由CSDN通过智能技术生成

2022CVPR Yingying Deng StyTr2 :Image Style Transfer with Transformers

主要工作

消除基于CNN的风格迁移方法的有偏问题,并提出新的使用transformer的风格迁移框架。

介绍

该基于transformer的框架( S t y T r 2 StyTr^2 StyTr2)包含两个不同的transformer的encoder,以分别为内容和样式生成特定域的序列。encoder之后,decoder分别地逐步生成图像patches的输出序列。可以看作是图像patches的sequence-to-sequence的生成。

面临的困难

  1. 与基于逻辑排序的句子不同,图像patches的序列与图像内容的语义信息相关联。
  2. 图像分辨率的指数级增长将导致位置编码的显著变化,导致位置偏差较大,输出质量较差。

主要贡献

  • 提出基于transformer👍的图像风格迁移框架 S t y T r 2 StyTr^2 StyTr2,生成具有良好保存的结构和输入内容图像细节(防止内容有偏的风格迁移)的样式化结果。
  • 提出一种尺度不变(针对不同分辨率大小的图像)的内容感知位置编码(CAPE👍,content-aware positional encoding)方案。

相关工作

图像风格迁移

总而言之,言而总之,与全卷积网络相比,基于transformer的网络可以利用自注意机制捕获输入图像的长期依赖性。在本文中,我们引入基于transformer的样式迁移任务的结构,将图像风格迁移任务看作是图像patches的sequence-to-sequence的生成。

transformer架构

在这里插入图片描述

位置编码

Functional positional encoding

通过预定义的函数来计算,如 Attention Is All You Need \text {Attention Is All You Need} Attention Is All You Need中:

  • P E ( p o s , 2 i ) = s i n ( p o s / 1000 0 2 i / d m o d e l ) \color{black}PE_{(pos,2i)}=sin(pos/10000^{2i/d_{model}}) PE(pos,2i)=sin(pos/100002i/dmodel),偶数位置
  • P E ( p o s , 2 i + 1 ) = c o s ( p o s / 1000 0 2 i / d m o d e l ) \color{black}PE_{(pos,2i+1)}=cos(pos/10000^{2i/d_{model}}) PE(pos,2i+1)=cos(pos/100002i/dmodel),奇数位置

其中,pos是一句话中某个字的位置, d m o d e l d_{model} dmodel​表示将一个词表示为一个向量的长度,2i表示这个向量的每个维度。代码实现,见:

E:\pycharm\learn_pytorch\src\position_encoding_transformer.py

Parametric positional encoding

通过网络训练得到,如:BERT

模型架构

在这里插入图片描述

方法

CAPE:Content-Aware Positional Encoding

1.生成patches的embed

给定输入图像,首先对图像做transform,变成256*256大小:

def train_transform():
    transform_list = [
        transforms.Resize(size=(512, 512)),
        transforms.RandomCrop(256),
        transforms.ToTensor()
    ]
    return transforms.Compose(transform_list)

然后把输入图像分成L个8*8大小的patches,每个patch的维度是C,即,每个patch由3维变为C维,然后经过一个线性投影层。其实就是经过一个 c o n v ( i n d i m : 3 , o u t d i m : 512 , k e r n e l s i z e : 8 , s t r i d e : 8 ) \color{black}conv(in_dim:3, out_dim:512, kernel_size:8, stride:8) conv(i

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值