https://neonleexiang.github.io/DLGSANet/
motivation:
Transformer的计算量较大;
Transformer的softmax需要利用所有的Q和K计算相似度,其中可能存入了消极的特征。
contribution:
设计了一个提取特征的模块:MHDLSA
设计了一个计算自注意力的模块:DLGSANet
设计的网络模型小于5M,达到了质量和速度的平衡。(如下图所示)
method:
网络整体图:
输入图像->3x3j卷积(提取浅层特征模块)->6个残差连接的RHDTG模块->3x3卷积->残差连接->3x3连接->亚像素卷积(pixelshuffle)
其中RHDTG模块由4个HDTB模块组成,HDTB由特征提取模块(MHDLSA)和 自注意力模块(SparseGSA)构成。
MHDLSA:
(Yin Yin.size()=BxCxHxW)
1.Yin 经过LayerNorm层
2.进入1x1卷积,此时通道数不变
3.进入1x1卷积,此时通道数由C->yC (y表示缩放因子,查看代码发现设置为4)
4.进入7x7DWConv 分组卷积 组数是G,G等于输入通道数, 卷积的维度为yCx1x7x7 ,相当于有yc个1x7x7卷积核对特征的每个通道进行并行卷积。
5.进入1x1卷积,此时通道数从yc->Gx7x7 得到Yout Yout.size()为HxWxGx7x7
6.提取权重W Gx7x7
1.Layernorm
2. 1x1conv
3. 3x3DwConv分组卷积,组数是C 卷积的维度为Cx1x3x3 ,得到输出后使用chunk函数,分成两个通道数相同的x1,x2
4.将x1激活后的结果与x2相乘
Sparse GSA:
右边和上个模块是一致的,不赘述了。
左边:
1.LayerNorm
2.3x3DwConv分组卷积,组数是C 卷积的维度为Cx1x3x3 ,得到输出后使用chunk函数,分成三个个通道数相同的x1,x2,x3,在图上分别表示为V,K,Q。 size为BxCxHxW
3.使用reshape函数 将V,K,Qsize转换为 BxCx(HxW)
4.对K和Q的最后一个维度进行归一化操作。size变成BxCx1
4.其中α是一个可学习的参数,如图公式,Q转置和K相乘 得到A,Asize为CxC.
5.使用ReLU函数而不是SoftMax函数,应为ReLU函数可以去除负数,从而去除无用的自关注。
(看了之后不理解的点:
Q和K相乘之后产生的负数多吗?
为什么去除负数就是可以去除无用的自关注呢?)
论文后面有个可视化的结果和实验数据比较:
可以从可视化结果中看出:使用SoftMax保留特征聚合的所有自关注值;使用ReLU函数可以看出保留了更多主要结构的自关注值,而删除了部分自关注值(比如黑色的部分)
(使用ReLU之后保留了更多自关注的值吗,看图感觉不太出来。
修改函数之后的增益感觉不太大。)
experience:
体现DLGSANet模型PSNR指标在常见数据集和其他网络的比较结果。
第一行表示:在HDTB中使用两个MHDLSA模块;
第二行表示:在HDTB中使用两个SparseGSA模块;
第三行表示:在HDTB中使用一个MHDLSA和一个Sparse模块。
感觉指标增加的都好少。
w/MHSA是普通的窗口卷积;
但是看结果感觉使用MHDLSA,SparseGSA的增益也比较小。
NVIDIA GeForce RTX 3090 gpu的运行时间评估。
总结:
1.ReLU函数能去除无用的消极特征,还是不太理解这是为什么?或许可以看一下A的结果负值是不是很多。
2.熟悉了一下分组卷积和动态卷积的操作。
3.提出一个多头动态局部自我注意(MHDLSA)模块,动态地提取局部特征;
4.提出了一个轻量级的SISR模型,称为DLGSANet,所提出的模型具有较少的网络参数(<5M),需要较低的计算成本,同时产生有竞争力的性能;
5.有效的稀疏的全局自我注意模块(SparseGSA),能提供最有效的相似度值。