1.首先,输入进来的x是batchsize,64,256,256尺寸的。
他会用四个不同的conv组合,theta组合是由二维卷积+(batchnorm和relu的),得到两个值。
而,x_h和x_w都是通过一个简单的卷积得到的值。
2.
然后,通过sin,cos公式,将得到的64,256,256的值进行cat,因此得到batchsize,128,256,256的值。
3.
然后,利用一个竖着的卷积,一个横着的卷积,来聚合xh和xw。
4.
然后,得到一个x的卷积输出,c。看来前面的操作类似于通道注意力之类的,是在准备对x进行加权的值。
可以看到,x的输出c是1,64,256,256维度的。
5.可以看到,这个a是1,64,1,1维度的。
6.
然后,会对这个a进行操作。可以看到,他变成了三倍的通道,也就是说,值多了三倍。
因此,这个值a,变成了: 3,batchsize,64,1,1的维度的了。
7.
可以看到,这个a就是对h+w+c进行求和的适应性avg,类似于通道注意力的a,所以这个a就是一种不同的注意力机制。
可以看到,这个a是因为上面的通道调成了3倍,所以有三个值,也就是h,w和x进行加权,也就是对原本的x,和xh,xw进行加权。
8.
因此,最后的输出是(1,64,256,256)维度的。