期望最大化注意力网络 EMANet

news2024/11/15 23:05:09

论文:Expectation-Maximization Attention Networks for Semantic Segmentation

Github:https://github.com/XiaLiPKU/EMANet

ICCV2019 oral

论文提出的期望最大化注意力机制Expectation- Maximization Attention (EMA),摒弃了在全图上计算注意力图的流程,转而通过期望最大化(EM)算法迭代出一组紧凑的基,在这组基上运行注意力机制,从而大大降低了复杂度。其中,E步更新注意力图,M步更新这组基。E、M交替执行,收敛之后用来重建特征图。本文把这一机制嵌入网络中,构造出轻量且易实现的EMA Unit。其作为语义分割头,在多个数据集PASCAL VOC, PASCAL Context,COCO Stuff取得了较高的精度。

主要贡献:

  1. 本文首次提出使用期望最大化方法重新定义attention算法,通过该方法可以学习到更加紧致的基并且大大的减少了计算复杂度。
  2. 将整个期望最大化的迭代过程通过神经网络实现,并且提出了Expectation maximization Attention Unit (EMAU)模块,所有神经网络都可以很方便的复用该模块。
  3. 在PASCAL VOC, PASCAL Context,COCO Stuff3个数据集上取得了state-of-the-art的效果。

期望最大化算法:

期望最大化(EM)算法旨在为隐变量模型寻找最大似然解。

X表示观测数据,Z表示隐变量空间,每一个数据x都有相应的隐变量与其对应,{X,Z}称为完整的数据,其极大似然估计就是lnp(X,Z|q),q表示模型的参数。

期望最大化算法分为E步和M步两个步骤。E步根据qold计算隐变量Z的后验分布,并以之寻找完整数据的似然Q。M步通过最大化似然函数来更新参数得到qnew。

EM算法被证明会收敛到局部最大值处,且迭代过程完整数据似然值单调递增。

高斯混合模型:

 

高斯混合模型(GMM)是EM算法的一个范例,它把数据用多个高斯分布拟合。其qk即为第k个高斯分布的参数uk,åk,隐变量znk为第k个高斯分布对第n数据点的“责任”。E步更新“责任”,M步更新高斯参数。在实际应用中,åk经常被简化为I。

非局部网络:

非局部网络(Nonlocal)率先将自注意力机制使用在计算机视觉任务中。其核心算子是:

Xi表示位置i处的特征向量,f(Xi,Xj)表示广义的核函数,C(X) 是归一化系数, 它将第i个像素的特征Xi更新为其他所有像素特征经过g变换之后的加权平均yi。权重通过归一化后的核函数计算,表征两个像素之间的相关度。

非局部网络(Nonlocal)存在2个缺点,第一,基数目巨大,且存在大量信息冗余。第二,计算量大,内存消耗也大。

期望最大化注意力机制:

期望最大化注意力机制由Aer,Am,Ar三部分组成,前两者分别对应EM算法的E步和M步。

假定输入的特征图为X\inRN*C,基初始值为U\inRK*C ,Ae估计隐变量Z\inRN*K,即每个基对像素的权责。具体地,第k个基对第n个像素的权责可以计算为:

 在这里,内核K(a,b)可以有多种选择。我们选择exp(a⊤b)的形式。在实现中,可以用如下的方式实现:

其中,l作为超参数来控制Z的分布。

Am 步更新基u,为了保证u和X处在同一表征空间内,此处u被计算作X的加权平均。具体地,第k个基被更新为:

值得注意的是,如果\lambda\rightarrow∞,则公式(5)中{zn1,zn2,……znk}会变成一组one-hot编码。在这种情形下,每个像素仅由一个基负责,而基被更新为其所负责的像素的均值,这便是标准的K-means算法。

AE和AM交替执行T步。此后,近似收敛的u和Z便可以被用来对X进行重估计得X~。

 

X~相比于X,具有低秩的特性。从下图中可看出,其在保持类间差异的同时,类别内部差异得到缩小。从图像角度来看,起到了类似保边滤波的效果。

综上,EMA在获得低秩重构特性的同时,将复杂度从Nonlocal的O(N2)降低至O(NKT)。实验中,EMA仅需3步就可达到近似收敛,因此T作为一个小常数,可以被省去。至此,EMA复杂度仅为O(NK)。考虑到K<<N,其复杂度得到显著的降低。

期望最大注意力模块EMAU:

 

Expectation maximization Attention Unit (EMAU) 结构如上图所示。除了核心的EMA之外,两个1×1卷积分别放置于EMA前后。前者将输入的值域从R+映射到R;后者将X~映射到X的残差空间。囊括进两个卷积的额外负荷,EMAU的FLOPs仅相当于同样输入输出大小时3×3卷积的1/3,参数量仅为2C2+KC。

对于EM算法而言,参数的初始化会影响到最终收敛时的效果。对于深度网络训练过程中的大量图片,在逐个批次训练的同时,EM参数的迭代初值u(0)理应得到不断优化。本文中,迭代初值u(0)的维护参考BN中running_mean和running_std的滑动平均更新方式,即:

 

其中,α∈[0,1]表示动量;u¯(T)表示u(T)在一个mini-batch上的平均。

EMA的迭代过程可以展开为一个RNN,其反向传播也会面临梯度爆炸或消失等问题。此外,公式(8)也要求u(0)和u¯(T)的差异不宜过大,不然初值u(0)的更新也会出现不稳定。RNN中采取LayerNorm(LN)来进行归一化是一个合理的选择。但在EMA中,LN会改变基的方向,进而影响其语义。因为,本文选择L2Norm来对基进行归一化。这样,u(0)的更新轨迹便处在一个高维球面上。

A2 Net中提出的Double Attention Block可以看作EMAU的特殊例子,它只迭代一次EM,且u由反向传播来更新。而EMAU迭代T步,用滑动平均来更新u。其中sfm表示softmax函数。

实验结果:

 

EMANet具有参数量少,精度高的优点。

通过注意力可视化图,i,j,k,l表示四个随机选择的基的下标,右边四列绘出的是它们各自对应的注意力图。可以看到,不同的基会收敛到一些特定的语义概念。

总结:

论文首次基于期望最大化的思路提出期望最大化注意力模块expectation-maximization attention (EMA),同时将该模块实现为神经网络单元,实现了真正的即插即用,方便移植进任何网络结构。同时EMANet具有精度高,参数量少的优点。

参考:

https://zhuanlan.zhihu.com/p/78018142

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

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

相关文章

再述时序约束

再述时序约束 一、为什么要加时序约束&#xff1f;二、时序分析是什么&#xff1f;三、时序分析的一些基本概念三、 时序分析的一些基本公式 一、为什么要加时序约束&#xff1f; 一次笔者在调试HDMI输出彩条&#xff0c;出现彩条时有时无现象&#xff0c;笔者视频输出芯片的驱…

leecode-数组多数-摩尔投票法

题目 题目 分析 最开始思路&#xff1a;排序&#xff0c;然后取nums[n/2]&#xff0c;但是时间复杂度不过关。 摩尔投票法&#xff0c;学到了&#xff01; 代码 class Solution { public:int majorityElement(vector<int>& nums) {//摩尔投票int cnt0;int targ…

计算机二级c语言题库

计算机C语言二级考试&#xff08;60道程序设计&#xff09; 第1道 请编写一个函数fun,它的功能是:将ss所指字符串中所有下标为奇数位置上的字母转换成大写&#xff08;若该位置上不是字母&#xff0c;则不转换&#xff09;。 例如&#xff0c;若输入"abc4EFG"&…

OpenCV学习笔记 | ROI区域选择提取 | Python

摘要 ROI区域是指图像中我们感兴趣的特定区域&#xff0c;OpenCV提供了一些函数来选择和提取ROI区域&#xff0c;我们可以使用OpenCV的鼠标事件绑定函数&#xff0c;然后通过鼠标操作在图像上绘制一个矩形框&#xff0c;该矩形框即为ROI区域。本文将介绍代码的实现以及四个主要…

opencv编译

文章目录 一、编译前工作二、编译安装1、Windows2、Linux 一、编译前工作 进入下载页面https://github.com/opencv/opencv&#xff0c;下载指定.tar.gz源码包&#xff0c;例如&#xff1a;opencv-4.7.0.tar.gz。解压到指定目录。 二、编译安装 opencv构建时&#xff0c;需要…

使用docker搭建hadoop集群

1.下载安装docker 2.启动docker 3.配置docker镜像 4.获取hadoop镜像 5.拉取hadoop镜像 6.运行容器 7.进入容器 8.配置免密 9.格式化节点 10.启动节点 11.查看节点信息 (img-CBr9VbGk-1687962511910)] 11.查看节点信息

javascript原型、原型链、继承详解

一、原型和原型链的基本概念 在JavaScript中&#xff0c;每个对象都有一个原型对象&#xff08;prototype&#xff09;。原型对象就是一个普通的对象&#xff0c;在创建新对象时&#xff0c;可以将该对象作为新对象的原型。原型对象可以包含共享的属性和方法&#xff0c;这些属…

Appium自动化-ADB连接手机提示unauthorized

目录 开头&#xff1a; 问题&#xff1a; 调研&#xff1a; 重启大法 终极大法 总结&#xff1a; 开头&#xff1a; 当使用ADB&#xff08;Android Debug Bridge&#xff09;连接手机时&#xff0c;如果提示"unauthorized"&#xff08;未授权&#xff09;错误&a…

javaee HttpSessionListener监听器统计在线人数

先创建ServletContextListener 在全局对象application中设置count属性 package com.yyy.listener;import java.util.ArrayList;import javax.servlet.ServletContext; import javax.servlet.ServletContextEvent; import javax.servlet.ServletContextListener; import javax…

易基因|表观遗传学与脑卒中:DNA甲基化的作用及衰老对血脑屏障修复的影响

大家好&#xff0c;这里是专注表观组学十余年&#xff0c;领跑多组学科研服务的易基因。 脑卒中&#xff08;俗称中风&#xff09;是导致死亡和长期残疾的主要原因&#xff0c;尤其是对于老龄人来说。脑卒中的平均生存时间为6-7年&#xff0c;许多患者存在身体残疾和晚期认知功…

技术岗/算法岗面试如何准备?5000字长文、6个角度以2023秋招经历分享面试经验

技术岗/算法岗面试流程是什么样的&#xff1f;技术面都干什么&#xff1f;Coding 机试如何准备&#xff1f;技术面考察哪些知识&#xff0c;如何准备&#xff1f;项目八股如何准备&#xff1f;简历要注意什么&#xff1f;怎么做&#xff1f; 大家好&#xff0c;我是卷了又没卷…

uniapp 适配全面屏

1、manifest.json 文件修改 app-plus 下 添加 "safearea": {"background": "#00000000","bottom": {"offset": "auto"}},2、部分页面设置全屏&#xff08;登录页面&#xff09; methods: {//设置页面全屏onShow(…

SpringBoot(二)starter介绍

做Java后端的同学可能都知道&#xff0c;在SpringBoot诞生之前&#xff0c;还有传统的Spring。这种Spring项目想要运行&#xff0c;需要导入各种依赖&#xff0c;而且还要在 XML 配置文件中一顿配置&#xff0c;非常痛苦。但通过上篇博客我们可以看到&#xff0c;SpringBoot项目…

事务与隔离级别

事务四要素 原子性&#xff08;Atomicity&#xff09;&#xff1a;要么全部完成&#xff0c;要么全部不完成&#xff1b;一致性&#xff08;Consistency&#xff09;&#xff1a;一个事务单元需要提交之后才会被其他事务可见&#xff1b;隔离性&#xff08;Isolation&#xff…

azure databricks因为notebook 日志打多或者打印图片太多,往下拉卡死怎么处理

1、同事碰到个问题&#xff0c;databricks 页面卡死不动了 2、我。。。。。。。。测试了下搞不定&#xff0c;找azure的工程师&#xff0c;特此笔记如下图 !](https://img-blog.csdnimg.cn/5db9756d0e224d15a9a607561b47591f.png)

怎样自定义starter模块和使用

一、 自定义Starter模块 在实际开发中&#xff0c;经常会定义一些公共组件&#xff0c;提供给各个项目团队使用。而在SpringBoot的项目中&#xff0c;一般会将这些公共组件封装为SpringBoot的starter(起步依赖)。 1.1实例–阿里云OSS的配置 前言&#xff1a;我们在使用阿里云…

windows下MySQL 5.7.31的安装

文章目录 安装步骤检查是否安装成功配置环境变量 安装步骤 双击安装包mysql-installer-community-5.7.31.0.msi选择自定义安装“custom”&#xff0c;点击next “Developer Default”是开发者默认“Server only”仅作为服务器安装“Clientonly”仅作为客户端安装“Full”是完…

华为OD机试真题 Python 实现【红黑图】【2023Q1 200分】,附详细解题思路

一、题目描述 众所周知红黑树是一种平衡树&#xff0c;它最突出的特性就是不能有两个相邻的红色节点。 那我们定义一个红黑图&#xff0c;也就是一张无向图中&#xff0c;每个节点可能有红黑两种颜色&#xff0c;但我们必须保证没有两个相邻的红色节点。 现在给出一张未染色的…

晶振的作用,高速晶振优缺点

前言 &#xff08;1&#xff09;我们都知道晶振是一款MCU的心脏&#xff0c;因为长期用这种抽象的概念进行解释&#xff0c;导致很多人不知道这个心脏的实际作用。因此&#xff0c;我在这里详细的介绍一下晶振对于MCU的实际作用。 &#xff08;2&#xff09;接下来我将会在MCU处…

一零六一、Jupyter notebook文件默认路径修改方法

1 .打开 Anaconda Prompt&#xff0c;输入命令 jupyter notebook --generate-config 根据上面运行处的路径打开 C:\Users\WW.jupyter\jupyter_notebook_config.py文件&#xff0c;可以使用记事本打开。 2 .直接CtrlF 搜索 &#xff0c;找到 #c.NotebookApp.notebook_dir ‘’…