注意力机制Attention、CA注意力机制

一、注意力机制

产生背景: 大数据时代,有很多数据提供给我们。对于人来说,可以利用重要的数据,过滤掉不重要的数据。那对于模型来说(CNN、LSTM),很难决定什么重要、什么不重要,因此,注意力机制产生了。
注意力机制——把焦点聚焦在比较重要的事物上。
原理:
看查询对象Q和被查询对象K的相似度。
一般使用点乘的方式。点乘其实就是求内积。
Q,K = k1,k2,k3 … …
通过点乘,计算Q和K里的每一个事物的相似度,拿到Q和k1的相似值s1,Q和k2的相似值s2 。。。
做一层softmax(s1,s2,...,sn) 就可以得到概率a1,a2,…,an
(进而就可以找出哪个对Q更重要)
那么a就代表数据的权重,v是数据本身,a*v就是处理之后的数据。
在这里插入图片描述注意力机制教程

二、CA注意力机制Coord Attention

产生背景: 现有的注意力机制其通道的处理一般是采用全局最大池化/平均池化,这样会损失掉物体的空间信息
优势: CA注意力机制可以把位置信息嵌入到通道注意力中。

注:图中第三行r是一个缩减系数,可以减少整个注意力机制的参数量。
请添加图片描述P2 在pytorch中如何实现
attention.py中的forward部分如下

def forward(self,x): 
	# x的参数有 batch_size, c, h, w
	_, _, h, w = x.size()
	
	# batch_size, c, h, w => batch_size, c, h, 1 => batch_size, c, 1, h 
	x_h = torch.mean(x, dim = 3, keepdim = True).permute(0,1,3,2) #提取高方向上的信息。
	# mean压缩,压缩第三个维度的值,也就是给w的值变成1。permute调换维度顺序。
	x_w = torch.mean(x, dim = 2, keepdim = True)
	
	# batch_size, c, 1, w cat batch_size, c, 1, h => batch_size , c, 1, w+h
	# batch_size , c, 1, w+h => batch_size, c/r, 1, w+h
	x_cat_conv_relu = self.relu(self.bn(self.conv_1x1(torch.cat((x_h, x_w), 3))))
	# batch_size, c/r, 1, w+h => batch_size, c/r, 1, h 和 batch_size, c/r, 1, w
	x_cat_conv_split_h, x_cat_conv_split_w = x_cat_conv_relu([h,w],3)
	
	# batch_size, c/r, 1, h =>batch_size, c/r, h, 1 => batch_size, c, h, 1
	s_h = self.sigmoid_h(self.F_h(x_cat_conv_split_h.permute(0,1,3,2)))
	s_w = self.sigmoid_h(self.F_h(x_cat_conv_split_w)
	
	#s_h 在宽方向上拓展回来,s_w同理
	out = x*s_h.expand_as(x)*s_w.expand_as(x)
	return out

P3 如何在网络中应用也还没学,挖坑
CA注意力机制教程

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值