CCNet: Criss-Cross Attention for Semantic Segmentation
PDF: https://arxiv.org/pdf/1811.11721.pdf
PyTorch代码: https://github.com/shanglianlm0525/CvPytorch
PyTorch代码: https://github.com/shanglianlm0525/PyTorch-Networks

DANet中,attention map计算的是所有像素与所有像素之间的相似性,空间复杂度为(HxW)x(HxW),而本文采用了criss-cross思想,只计算每个像素与其同行同列即十字上的像素的相似性,通过进行循环(两次相同操作),间接计算到每个像素与每个像素的相似性,将空间复杂度降为(HxW)x(H+W-1)

具有以下优点

  • 1)较少的GPU内存使用;
  • 2)计算效率高;
  • 3)最先进的性能。

1 Criss-Cross Attention

2 Recurrent Criss-Cross Attention

在计算矩阵相乘时每个像素只抽取特征图中对应十字位置的像素进行点乘,计算相似度。和non-local的方法相比极大的降低了计算量,同时采用二阶注意力,能够从所有像素中获取全图像的上下文信息,以生成具有密集且丰富的上下文信息的新特征图。在计算矩阵相乘时,每个像素只抽取特征图中对应十字位置的像素进行点乘,计算相似度。

3 CCNet

4 实验结果

PyTorch代码:

import torch
import torch.nn as nndef INF(B, H, W):return -torch.diag(torch.tensor(float("inf")).repeat(H), 0).unsqueeze(0).repeat(B * W, 1, 1)class CrissCrossAttention(nn.Module):""" Criss-Cross Attention Module"""def __init__(self, in_dim):super(CrissCrossAttention, self).__init__()self.query_conv = nn.Conv2d(in_channels=in_dim, out_channels=in_dim // 8, kernel_size=1)self.key_conv = nn.Conv2d(in_channels=in_dim, out_channels=in_dim // 8, kernel_size=1)self.value_conv = nn.Conv2d(in_channels=in_dim, out_channels=in_dim, kernel_size=1)self.softmax = nn.Softmax(dim=3)self.INF = INFself.gamma = nn.Parameter(torch.zeros(1))def forward(self, x):m_batchsize, _, height, width = x.size()proj_query = self.query_conv(x)proj_query_H = proj_query.permute(0, 3, 1, 2).contiguous().view(m_batchsize * width, -1, height).permute(0, 2, 1)proj_query_W = proj_query.permute(0, 2, 1, 3).contiguous().view(m_batchsize * height, -1, width).permute(0, 2, 1)proj_key = self.key_conv(x)proj_key_H = proj_key.permute(0, 3, 1, 2).contiguous().view(m_batchsize * width, -1, height)proj_key_W = proj_key.permute(0, 2, 1, 3).contiguous().view(m_batchsize * height, -1, width)proj_value = self.value_conv(x)proj_value_H = proj_value.permute(0, 3, 1, 2).contiguous().view(m_batchsize * width, -1, height)proj_value_W = proj_value.permute(0, 2, 1, 3).contiguous().view(m_batchsize * height, -1, width)energy_H = (torch.bmm(proj_query_H, proj_key_H) + self.INF(m_batchsize, height, width)).view(m_batchsize, width,height, height).permute(0, 2, 1, 3)energy_W = torch.bmm(proj_query_W, proj_key_W).view(m_batchsize, height, width, width)concate = self.softmax(torch.cat([energy_H, energy_W], 3))att_H = concate[:, :, :, 0:height].permute(0, 2, 1, 3).contiguous().view(m_batchsize * width, height, height)# print(concate)# print(att_H)att_W = concate[:, :, :, height:height + width].contiguous().view(m_batchsize * height, width, width)out_H = torch.bmm(proj_value_H, att_H.permute(0, 2, 1)).view(m_batchsize, width, -1, height).permute(0, 2, 3, 1)out_W = torch.bmm(proj_value_W, att_W.permute(0, 2, 1)).view(m_batchsize, height, -1, width).permute(0, 2, 1, 3)# print(out_H.size(),out_W.size())return self.gamma * (out_H + out_W) + xif __name__=='__main__':model = CrissCrossAttention(16)print(model)input = torch.randn(1, 16, 64, 64)out = model(input)print(out.shape)

注意力机制论文:CCNet: Criss-Cross Attention for Semantic Segmentation及其PyTorch实现相关推荐

  1. 深度学习论文: Rethink Dilated Convolution for Real-time Semantic Segmentation及其PyTorch实现

    深度学习论文: Rethink Dilated Convolution for Real-time Semantic Segmentation及其PyTorch实现 Rethink Dilated C ...

  2. 深度学习论文: Lightweight and Progressively-Scalable Networks for Semantic Segmentation及其PyTorch实现

    深度学习论文: Lightweight and Progressively-Scalable Networks for Semantic Segmentation及其PyTorch实现 Lightwe ...

  3. 图片的描述生成任务、使用迁移学习实现图片的描述生成过程、CNN编码器+RNN解码器(GRU)的模型架构、BahdanauAttention注意力机制、解码器端的Attention注意力机制

    日萌社 人工智能AI:Keras PyTorch MXNet TensorFlow PaddlePaddle 深度学习实战(不定时更新) Encoder编码器-Decoder解码器框架 + Atten ...

  4. CCNet: Criss-Cross Attention for Semantic Segmentation论文读书笔记

    CCNet: Criss-Cross Attention for Semantic Segmentation读书笔记 Criss-Cross Network(CCNet): 作用: 用来获得上下文信息 ...

  5. 【论文阅读】Squeeze-and-Attention Networks for Semantic Segmentation(CVPR2020)

    论文题目:Squeeze-and-Attention Networks for Semantic Segmentation(用于语义分割的挤压-注意网络) 下载链接:https://arxiv.org ...

  6. 深度学习论文: LRNnet: a light-weighted network for real-time semantic segmentation及其PyTorch实现

    深度学习论文: LRNnet: a light-weighted network with efficient reduced non-local operation for real-time se ...

  7. 通道注意力机制_即插即用,Triplet Attention机制让Channel和Spatial交互更加丰富(附开源代码)...

    ↑ 点击蓝字 关注极市平台作者丨ChaucerG来源丨AI人工智能初学者编辑丨极市平台 极市导读 本文介绍了一种新的注意力机制--Triplet Attention,它通过使用Triplet Bran ...

  8. 注意力机制(SE、Coordinate Attention、CBAM、ECA)、即插即用的模块整理

    总结曾经使用过的一些即插即用的模块以及一些注意力机制 ** 注意力模块:SE ** 代码源自这位大佬的仓库:https://github.com/moskomule/senet.pytorch cla ...

  9. 什么是注意力机制及其应用(self attention)?

    一.引言 注意力机制是自深度学习快速发展后广泛应用于自然语言处理.统计学习.图像检测.语音识别等领域的核心技术,例如将注意力机制与RNN结合进行图像分类,将注意力机制运用在自然语言处理中提高翻译精度, ...

  10. 注意力机制——ECANet(Efficient Channel Attention Network)

    ECANet(Efficient Channel Attention Network)是一种新颖的注意力机制,用于深度神经网络中的特征提取,它可以有效地减少模型参数量和计算量,提高模型的性能. ECA ...

最新文章

  1. linux更改文件夹权限_Linux 一些重点知识,整理的很全面,有必要收藏
  2. 2021-03-13
  3. Tomcat配置https访问SSL证书(pfx文件)
  4. 苹果电脑删除软件_软件自动开启很烦人?如何彻底关掉开机自动开启的应用程序...
  5. 推荐算法---FM,协同过滤
  6. (None resource)-Binary system
  7. 编写自定义的字符串一致性匹配方法,只要两个字符串包含同样的字符, 不管字符的顺序如何,都认为两个字符串一致,如:”aabbcc”和”abcabc”被认为是一致的...
  8. 大数据-实验2 熟悉常用的HDFS操作
  9. **JAVA实习周记(第二周):喔**
  10. HFSS - WLAN双频单极子天线设计与仿真
  11. 重庆北大青鸟【学员心声】任何一次的考试,都是一次珍贵的蜕变机会
  12. 服务器CPU与家用个人电脑CPU的区别详解
  13. Android虚拟机和类加载机制
  14. 为什么别人可以年薪百万?
  15. net-java-php-python-班级信息管理系统计算机毕业设计程序
  16. 《Java编程思想》读书笔记
  17. 计算机图形设计论文 真实图形生成技术的发展,计算机图形设计论文真实图形生成技术的发展.docx...
  18. Ubuntu 环境变量设置
  19. 只需一步,永久白嫖!请低调使用!
  20. HTTP Status 404错误解析

热门文章

  1. 针对Win10 Tensorflow-2.x 训练 线程冻结(假死、卡住、几个epoch后、中途停滞、CPU占用0%) 等问题的排查总结
  2. 启用计算机的fn键,联想电脑怎么设置fn键
  3. rk356x-Android 刷机
  4. 主板android刷机,安卓主板刷机步骤
  5. vue 解决跨域问题(开发环境)
  6. [Trie树] BZOJ3689: 异或之
  7. 队列同步器(AbstractQueuedSynchronizer)源码简析
  8. html求相关系数,关于pearson相关系数的意义
  9. 不用计算机做客户画像,描绘客户画像(有电脑的同学可做,完成加平时分2分)...
  10. Java简答题整理(一)