披着transformer皮的CNN:SwinTransformer

新一代backbone

源码https://github.com/microsoft/Swin-Transformer

ICCV 2021最佳论文

解决问题:

图像中像素太多,需要更多特征就需要很长的序列

血猎榷场注意力越慢

本质:

用窗口和分层的形式代替长序列

使用分层来代替CNN的感受野

摘要

提出一个Swin Transformer, 可以用作骨干网络,直接把transformer用在CV领域,有挑战:1.多尺度物体2.序列长度太长。基于挑战,提出了hierarchical transformer,使用一种一种窗口的方法,现在自注意力在窗口内算,seq很短,而且通过移动窗口,上下层之间会产生交互(cross-window connection),这个层级窗口可以提供各个尺度的信息,而且他的复杂度是随着分辨率提高线性增长(不是平方)

Intro

Vit把图片打成16*16的patch,也就是说每一层token看到的都是这个分辨率,对多尺寸的物体效果就不好,也就是low-resolution、单一尺度

FPN每一层的感受野不一样,可以处理不同尺寸的问题,检测

UNet提出Skip connection,下采样之后不光从bottom里拿特征,还从下采样的结果拿 分割

image-20230315194523411

方法

image-20230315204212060

patch partition

patchsize是4X4,48=4X4X3

linear embeding

对每个像素的channel做线性变换(前两步加起来和ViT中liear projection一样)(源码中直接卷积实现)

对于Swin-T版本,超参数C=96 > 56X56X96=3136X56 (token个数 X token向量维度)

swin transfomer

后面谈,维度不变

patch Merging

image-20230318172527501

主要是降维(下采样、类似池化)(类似pixel shuffle的反过程)。把每个小窗口中相同位置的值取出来,拼成新的patch,再把所有patch在cannel维度上concat起来。(此时通道数应该变成4C),然后为了和resNet等网络保持一致,再在cannel维度上做一个1X1的卷积,把维度降一半,变成2C

在Swin Transformer中,每个stage的降低分辨率的过程都是通过Patch Merging实现的。

重复进行三次

这个过程完全类似CNN,特征图降到7X7X768

分类头

如果做分类任务,在7X7X768的基础上添加一个“分类头”,做一个平均池化,变成1X768,再变成1X1000(如果在imageNet上做分类)

基于移动窗口的自注意力
窗口

问题:对于密集预测任务和大分辨率的图片,全局的自注意力有平方倍的复杂度

和标准的复杂度对比

image-20230317105911842

这楼里每个窗口有49个patch

移动窗口

问题:只基于窗口丢失了全局信息

image-20230318104622535

往右下移动窗口3个patch,带来的问题:窗口数增多了,而且窗口大小不一样

一种简单解决,在周围的窗口直接padding-0但是复杂度太高了

解决:一种掩码方式,做一次循环移位

image-20230318104721577

如此得到的窗口数量还是四个,对于左上角的窗口,做自注意力没问题

位置信息

放在了attention矩阵当中,可以学习,使用相对位置信息

对比

分为T、S、B、L四种,其中SwinT和Res50参数相当、SwinS和Res101相当,具体区别如下

image-20230318113032139

ref:

source code:https://github.com/SwinTransformer/Swin-Transformer-Object-Detection

使用:https://www.cnblogs.com/isLinXu/p/15880039.html

测试命令:

python demo/image_demo.py demo/demo.jpg configs/swin/mask_rcnn_swin_tiny_patch4_window7_mstrain_480-800_adamw_1x_coco.py mask_rcnn_swin_tiny_patch4_window7_1x.pth

知乎:https://zhuanlan.zhihu.com/p/468495919

知乎:https://zhuanlan.zhihu.com/p/443418635

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值