【CA】《Coordinate Attention for Efficient Mobile Network Design》

在这里插入图片描述

CVPR-2021

github:https://github.com/Andrew-Qibin/CoordAttention


文章目录

  • 1 Background and Motivation
  • 2 Related Work
  • 3 Advantages / Contributions
  • 4 Method
  • 5 Experiments
    • 5.1 Datasets and Metrics
    • 5.2 Ablation Studies
    • 5.3 Comparison with Other Methods
    • 5.4 Applications
  • 6 Conclusion


1 Background and Motivation

SENet(【SENet】《Squeeze-and-Excitation Networks》) 注意力忽视了 position information

作者 embedding positional information into channel attention,采用 two 1D feature encoding processes,提出 coordinate attention,direction-aware and position-sensitive

在这里插入图片描述

2 Related Work

  • Mobile Network Architecture
  • Attention Mechanisms

3 Advantages / Contributions

  • 设计提出轻量级 Coordinate Attention,兼顾 channel 和 spatial
  • 在分类 / 目标检测 / 分割 benchmarks 上验证了其有效性

在这里插入图片描述

4 Method

SE / CBAM / CA 结构对比

在这里插入图片描述
CBAM 虽然有 spatial attention,但是 fail in modeling long-range dependencies that are essential for vision tasks

下面看看 CA 的公式表达

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

结合代码看看

import torch
import torch.nn as nn
import math
import torch.nn.functional as Fclass h_sigmoid(nn.Module):def __init__(self, inplace=True):super(h_sigmoid, self).__init__()self.relu = nn.ReLU6(inplace=inplace)def forward(self, x):return self.relu(x + 3) / 6class h_swish(nn.Module):def __init__(self, inplace=True):super(h_swish, self).__init__()self.sigmoid = h_sigmoid(inplace=inplace)def forward(self, x):return x * self.sigmoid(x)class CoordAtt(nn.Module):def __init__(self, inp, oup, reduction=32):super(CoordAtt, self).__init__()self.pool_h = nn.AdaptiveAvgPool2d((None, 1))self.pool_w = nn.AdaptiveAvgPool2d((1, None))mip = max(8, inp // reduction)self.conv1 = nn.Conv2d(inp, mip, kernel_size=1, stride=1, padding=0)self.bn1 = nn.BatchNorm2d(mip)self.act = h_swish()self.conv_h = nn.Conv2d(mip, oup, kernel_size=1, stride=1, padding=0)self.conv_w = nn.Conv2d(mip, oup, kernel_size=1, stride=1, padding=0)def forward(self, x):identity = xn,c,h,w = x.size()x_h = self.pool_h(x) #(n, c, h, 1)x_w = self.pool_w(x).permute(0, 1, 3, 2)  #(n, c, 1, w)-> (n, c, w, 1) 注意这里转化成和 x_h 一样的排列形式了y = torch.cat([x_h, x_w], dim=2)  # 方便拼一起,conv->bn->acty = self.conv1(y)y = self.bn1(y)y = self.act(y) x_h, x_w = torch.split(y, [h, w], dim=2)  # 再拆开x_w = x_w.permute(0, 1, 3, 2)  # 这里转化回去了a_h = self.conv_h(x_h).sigmoid()a_w = self.conv_w(x_w).sigmoid()out = identity * a_w * a_hreturn out

在网络中的插入位置,以 mobileNetV2(【MobileNet V2】《MobileNetV2:Inverted Residuals and Linear Bottlenecks》) 和 MobileNeXt 为例
在这里插入图片描述

5 Experiments

5.1 Datasets and Metrics

  • ImageNet:Top-1 Acc
  • COCO:mAP
  • Cityscapes:mIoU

5.2 Ablation Studies

(1)Importance of coordinate attention
在这里插入图片描述
相比于仅水平或者竖直方向的 spatial attention,合起来最猛

(2)Different weight multipliers
在这里插入图片描述
在这里插入图片描述
0.25,0.75,1.0 均有一致性的提升

比 NAS 出来的 MobileNeXt + SE 都猛

AutoML 时代,提点的方式之一,加新的原料,加 search space 中的素材

(3)The impact of reduction ratio r
在这里插入图片描述
猛,均有提升

5.3 Comparison with Other Methods

(1)Attention for Mobile Networks
在这里插入图片描述
capture long-range dependencies among spatial locations that are essential for vision tasks

(2)Stronger Baseline

在这里插入图片描述

5.4 Applications

(1) Object Detection
在这里插入图片描述
在这里插入图片描述

COCO 和 VOC 都有提升

(2) Semantic Segmentation
在这里插入图片描述
比 CBAM 猛

6 Conclusion

来自:注意力的理解心得

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/631899.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Python的流程控制语句,while循环和嵌套、for循环、break和continue、冒泡排序

流程控制语句是用于控制程序的执行顺序的语句。在Python中,主要有while循环和嵌套、for循环、break和continue语句、冒泡排序等。 while循环和嵌套: while循环用于多次执行一段代码,直到条件不再满足为止。嵌套是将一个while循环放在另一个wh…

【华为 ICT HCIA eNSP 习题汇总】——题目集2

1、交换机某个端口配置信息如下,则此端口的PVID为()。 A、100 B、2 C、4 D、1 # interface GigabitEthernet0/0/1 port hybrid tagged vlan 2 to 3 100 port hybrid unatgged vlan 4 6 #考点:VLAN(虚拟局域网&#xff…

josef约瑟 三相电压继电器 WY-35A4 100V DC220V 导轨安装

三相 WY-35A4电压继电器;WY-35B4电压继电器;WY-35C4电压继电器;WY-31A4电压继电器;WY-31B4电压继电器; WY-31C4电压继电器;JY-45A4电压继电器;JY-45B4电压继电器;JY-45C4电压继电器…

Tortoise-orm 使用 (一) 创建表

项目基于Vue3.0, FastAPI的模板管理系统,从网上找了各种资源去实践,现在将总结发出来,分享给大家,希望帮助大家少走些弯路。 准备工作 # tortoise-orm pip install tortoise-orm # MySQL pip install tortoise-orm[asyncmy] # 迁…

Python实现自动化办公(使用第三方库操作Excel)

1 使用 xlrd 读取Excel数据 1.1 获取具体单元格的数据 import xlrd# 1. 打开工作簿 workbook xlrd.open_workbook("D:/Python_study_projects/Python自动化办公/Excel/test1.xlsx") # 2. 打开工作表 sheet1 workbook.sheets()[0] # 选择所有工作表中的第一个 # …

多文件转二维码的两种方式,有兴趣的了解一下

多个文件能一键生成二维码吗?二维码是现在很多人用来展示文件内容的一种手段,在制作二维码图片之后,其他人扫码就可以查看文件或者下载文件,有效的提升文件获取的效率。一般情况下,文件二维码分为多个文件生成一个二维…

Flutter:跨平台移动应用开发的未来

Flutter:跨平台移动应用开发的未来 引言 Flutter的背景和概述 Flutter是由Google开发的一个开源UI工具包,用于构建漂亮、快速且高度可定制的移动应用程序。它于2017年首次发布,并迅速引起了开发者们的关注。Flutter采用了一种全新的方法来…

【vue3项目初始化配置】vue3 + element plus

项目初始化是开发过程中很重要的一个环节,本篇博客带大家从零开始创建并初始化一个vue3项目,文章详细介绍了每个步骤,希望能帮助刚接触开发的小伙伴。 目录 一.创建项目 二.安装插件 ​编辑 ​编辑三.安装依赖 ​编辑 ​编辑四.配置项目 …

【leetcode100-037】【二叉树/dfs/bfs】二叉树的最大深度

【题干】 给定一个二叉树 root ,返回其最大深度。 二叉树的 最大深度 是指从根节点到最远叶子节点的最长路径上的节点数。 【思路】 还是二叉树经典题,今天写两个解法。 dfs递归:对任意节点,其树高左右子树中更高的那个树高1…

如何安装配置VisualSVN服务并实现公网访问本地服务【内网穿透】

文章目录 前言1. VisualSVN安装与配置2. VisualSVN Server管理界面配置3. 安装cpolar内网穿透3.1 注册账号3.2 下载cpolar客户端3.3 登录cpolar web ui管理界面3.4 创建公网地址 4. 固定公网地址访问 前言 SVN 是 subversion 的缩写,是一个开放源代码的版本控制系统…

班主任在班级管理中的角色定位

你是否曾经想过,为什么有的班主任能够让学生如此敬爱,而有的班主任却让学生敬而远之?其实,这都与班主任在班级管理中的角色定位有关。 班主任应该是学生的良师益友。这意味着班主任不仅要传授知识,更要关心学生的成长…

提升线上会议效率,解决Teams会议中常见网络问题

在企业组网场景中,在线会议是混合办公、跨地区办公模式下很重要的协作沟通手段,而在线会议如Teams这类应用对网络的实时性和即时性要求非常高,网络频繁中断、接入速度慢、登不进去等问题分分钟加剧用户的不满,导致汇报失败或者是交…

GMT学习记录

我主要根据GMT中文手册一步一步学习的!!!!B站视频介绍的是5.0老版本仅仅建立基础理解这个软件。 好的,学了一点发现直接把gmt转为shp,就得到我想的文件 gmt数据转shape格式数据 - 简书 (jianshu.com) 命…

汽车用螺纹紧固件的拧紧力矩规范主要考虑哪些方面——SunTorque智能扭矩系统

在汽车制造过程中,螺纹紧固件是连接和固定各个零部件的重要元件。为了保证汽车的可靠性和安全性,对于螺纹紧固件的拧紧力矩有着严格的规定和规范。SunTorque智能扭矩系统和大家一起掌握这一重要知识点。 拧紧力矩是指将螺纹紧固件拧紧到预定位置所需的力…

mysql 生成数据(批量造数)

--创建表 set sql_modeONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,ALLOW_INVALID_DATES,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION CREATE TABLE vote_records_memory ( id int(10) unsigned NOT NULL AUTO_INCREMENT, user_id va…

Pytorch实战——2、初探张量

🍅 写在前面 👨‍🎓 博主介绍:大家好,这里是hyk写算法了吗,一枚致力于学习算法和人工智能领域的小菜鸟。 🔎个人主页:主页链接(欢迎各位大佬光临指导) ⭐️近…

二叉树的遍历 Java

二叉树的遍历 递归法前序遍历中序遍历后序遍历改进 迭代法前序、后序遍历中序遍历 二叉树的统一迭代法(未完成)Java 中 null、NULL、nullptr 区别 public class TreeNode {int val;TreeNode left;TreeNode right;TreeNode() {}TreeNode(int val) { this.val val; }TreeNode(in…

Go 语言中高效切片拼接和 GO 1.22 提供的新方法

Table Contents 切片拼接的必要性基本拼接方法及其局限性使用 append 函数高效拼接的策略控制容量和避免副作用利用 Go 1.22 的新特性切片动态扩容的深入理解内存重新分配与数据迁移性能优化策略结论在 Go 语言中,切片拼接是一项常见的操作,但如果处理不当,可能会导致性能问…

2.【Linux】(进程的状态||深入理解fork||底层剖析||task_struct||进程优先级||并行和并发||详解环境变量)

一.进程 1.进程调度 Linux把所有进程通过双向链表的方式连接起来组成任务队列,操作系统和cpu通过选择一个task_struct执行其代码来调度进程。 2.进程的状态 1.运行态:pcb结构体在运行或在运行队列中排队。 2.阻塞态:等待非cpu资源就绪&am…

Redis的key过期策略是怎么实现的

这是一道经典的Redis面试题,一个Redis中可能存在很多很多的key,这些key中可能有很大一部分都有过期时间,此时Redis服务器咋知道哪些key已经过期,哪些还没过期呢? 如果直接遍历所有的key,这显然是行不通的&…