VOLO论文笔记
Outlook Attention
设给定输入为 \(X \in R^{H \times W \times C}\), 首先经过两个线性映射得到两个输出A 和 V,A叫做outlook weight \(A \in R^{H \times W \times K^4}\), V叫做value representation \(V \in R^{H \times W \times C}\). A对应下图绿色虚线框中左侧图形,直观上通道数由C变成了\(K^4\); V是图片中第二排中间那张图形。
outlook attention 模块是考虑\(K \times K\)区域内每个空间位置特征间关系。A经过reshape 得到尺寸为\(R^{H \times W \times K^2 \times K^2}\) ,其中每个空间位置值代表对应原始输入X对应空间位置点的局部\(K \times K\)区域内各个空间点特征之间两两相关性度量,由于区域有\(K^2\)个空间位置点,因此相关度量矩阵是\(R^{K^2 \times K^2}\)
attn = nn.Linear(C, k ** 4)
a = attn(x).reshape(H*W, K*K, K*K)
上述代码即表示绿色虚线框生成过程
v_pj = nn.Linear(C, C)
unfold = nn.Unfold(K, padding)
v = v_pj(x).permute(2, 1, 0)
v = unfold(v).reshape(C, K*K, H*W).permute(2, 1, 0)
上述代码块就是公式3 。是将特征V (value representation )使用\(K \times K\)在其上滑动时,同一平面内特征展开,不同平面特征依次拼接在其后;再将空间X-方向和Y-方向展开成一条。Unfold操作可以参考下面连接理解。可以理解为将原始特征X的局部区域\(K \times K\)内特征平铺开来。由于Unfold操作stride=1,因此unfold(v)的形状为\(R^{CK^2 \times HW}\)
a = a.softmax(dim=-1)
x = mul(a, v).permute(2, 1, 0).reshape(C*K*K, H*W)
此处的\(a \in R^{K^2 \times K^2}, v \in R^{K^2 \times C}\) ,忽略HW。\(a \in R^{K^2 \times K^2}\) 表示某个位置局部区域各个位置点与本区域内其它位置的特征相似性度量,而$v \in R{K2 \times C} $ 表示这个区域的特征,每个位置点的特征长度为C,有 \(K^2\) 个位置,因此二者相乘,每个位置点第i个通道处的特征值是该通道对应的\(K \times K\)区域内特征值的加权平均。
回到最开始关于Outlook Attention初衷/思考:
- 每个空间位置的特征具有足够的代表性,可以生成注意力权重,用于局部聚合其相邻的特征
- 密集和局部的空间聚合可以有效地编码更精细信息
参考
[1] Fold/Unfold 操作详解 https://blog.csdn.net/ViatorSun/article/details/119940759
最新文章
- Java命名规范基础
- logback logback.xml常用配置详解(三)
- htmlnav
- CallableAndFuture
- 编程书籍分享--pdf
- XJOI网上同步训练DAY3 T1
- 七牛整合 ueditor (拦住那头牛,七牛又如何)
- 基于iTextSharp的PDF文档操作
- python 函数返回多个参数的赋值方法
- nginx的负载均衡集群测试
- 异常-----freemarker.core.ParseException: Token manager error
- Python内置函数(50)——issubclass
- ndk编译libx264生成库
- 常用的CMD &; Linux命令
- 原来你离BAT只有一步之遥
- 第三节,TensorFlow 使用CNN实现手写数字识别(卷积函数tf.nn.convd介绍)
- unity3d连接Sqlite并打包发布Android
- UnicodeDecodeError: 'ascii' codec can't decode byte 0xe0 in position 0
- python基础_类型_tuple
- mysql8.0版本skip-grant-tables出现的新问题
热门文章
- Codeforces Round #842 (Div. 2) A-D
- 2022CSP-J线上游记
- day07-Vue04
- [WPF]程序随系统自启动
- 【问题解决】Tomcat启动服务时提示Filter初始化或销毁出现java.lang.AbstractMethodError错误
- BOM、DOM、两者查找标签的方式和操作标签的方式、操作class和css的方法、事件、jQuery类库
- 用Java写一个分布式缓存——RESP服务端
- 如何避免让线程摸鱼,请用异步技术 async await 拿捏他~
- allure环境搭建
- Django框架之drf:9、接口文档,coreapi的使用,JWT原理、介绍、快速使用、定制、认证