论文阅读:LOGO-Former: Local-Global Spatio-Temporal Transformer for DFER(ICASSP2023)
文章目录
- 摘要
- 动机与贡献
- 具体方法
- 整体架构
- 输入嵌入生成
- LOGO-Former
- 多头局部注意力
- 多头全局注意力
- 紧凑损失正则化
- 实验
- 思考
- 总结
本篇论文 LOGO-Former: Local-Global Spatio-Temporal Transformer for Dynamic Facial Expression Recognition发表在ICASSP(声学顶会),代码暂未开源。
摘要
以前的动态面部表情识别(DFER)方法主要基于卷积神经网络(CNN),其局部操作忽略了视频中的长程依赖性。基于Transformer的DFER方法可以实现更好的性能,但会导致更高的FLOPs和计算成本。为了解决这些问题,局部-全局时空Transformer(LOGO-Former)被提出来捕获每个帧内的区别性特征,并在平衡复杂度的同时建模帧之间的上下文关系。基于面部肌肉局部运动和面部表情逐渐变化的先验知识,我们首先将空间注意力和时间注意力限制在一个局部窗口内,以捕获特征标记之间的局部交互。此外,我们执行的全局注意力,通过查询一个token的功能,从每个局部窗口迭代获得整个视频序列的长距离信息。此外,我们提出了紧凑的损失正则化项,以进一步鼓励学习的特征具有最小的类内距离和最大的类间距离。在两个野外动态面部表情数据集上的实验(即,DFEW和FERV 39 K)的结果表明,我们的方法提供了一种有效的方法来利用空间和时间的依赖性DFER。
动机与贡献
下面是几种不同时空自注意方案:
不同时空自我注意方案的可视化。为了更好地说明,我们用浅黄色表示query token,用玫瑰色表示key token,用浅蓝色表示非注意token。
(a)全局时空注意力: O ( T 2 S 2 ) O(T^2S^2) O(T2S2)
(b)仅空间注意力: O ( T S 2 ) O(TS^2) O(TS2)
(c)时空分割注意力 O ( T S 2 + T 2 S ) O(TS^2+T^2S) O(TS2+T2S)
(d)时空混合注意力: O ( T S 2 ) O(TS^2) O(TS2)
(e)(f)本文采用的局部和全局时空的注意力机制
不同的面部肌肉在局部面部区域内运动,并且面部表情在视频中的相邻帧内逐渐改变。我们的目标是利用视频中的时空信息,同时最大限度地减少tranformer的计算成本,以实现高效的动态面部表情识别。
- 为了实现这一点,本文提出了局部-全局时空Transformer(LOGO-Former)用于捕获短期和长期依赖关系,同时降低transformer的计算成本。我们计算非重叠窗口内的自我注意力,以捕捉token之间的局部交互。
- 这样的局部时空注意力无法捕捉全局信息。因此,利用全局时空注意力使query token关注窗口级的 key token,如上如(f)所示
- 为了进一步提高模型的鉴别能力,我们提出了紧凑损失正则化项来减少类内距离和增加类间距离。定量结果和可视化结果表明,我们的方法在野外动态面部表情识别的有效性。
具体方法
整体架构
从视频中采样的人脸帧被CNN主干处理以获得帧级别的特征序列。LOGO-FORM通过联合计算空间关注度和时间关注度来获取区分特征标记。
输入嵌入生成
给定一个图像序列 X ∈ R F × H 0 × W 0 × 3 X ∈ R^{F× H _0 × W _0 ×3} X∈RF×H0×W0×3,其中 F F F个RGB人脸帧大小为 H 0 × W 0 H _0 × W _0 H0×W0,从视频中采样,我们利用CNN骨干提取帧级特征。标准CNN主干(ResNet 18)用于为每帧生成大小为 H × W H ×W H×W的高级特征图。片段特征 f 0 ∈ R F × H × W × C f_0 ∈ R^{F×H×W×C} f0∈RF×H×W×C是通过连接所有帧级特征图来获得的。
随后,我们将片段特征 f 0 f_0 f0的空间维度平坦化,并通过1 × 1卷积将它们投影,从而产生新的特征序列 f 1 ∈ R F × ( H × W ) × d f1 ∈ R^{F×(H×W)×d} f1∈RF×(H×W)×d。
注意, f 1 f_1 f1的时间顺序与输入 X X X的时间顺序一致。为了补充特征序列的时空位置信息,我们将可学习的位置嵌入与 f 1 f_1 f1结合起来。我们还在时间维度上将分类标记 [ C L S ] [CLS] [CLS]前置到序列中,该标记对序列的全局状态进行建模,并进一步用于识别。类似地,还添加了时间位置嵌入。最后,获得时空Transformer的输入嵌入X0。
LOGO-Former
LOGO-Former由 N N N个分块组成,每个分块由多头局部注意力和多头全局注意力组成,迭代学习上下文和区分性时空特征表示。
多头局部注意力
以 F × H × W F ×H ×W F×H×W的输入特征图(为了简单起见,我们在这里省略了 [ C L S ] [CLS] [CLS]标记)作为输入,我们将其均匀地分成几个大小为 f × h w f × hw f×hw的窗口,从而得到 F f × H W h w \frac{F}{ f} × \frac{HW} {hw} fF×hwHW窗口,如上图所示。我们在一个窗口 ( i , j ) (i,j) (i,j)内将这些token平坦化,可以表示为 X i , j ∈ R ( f h w ) × d X_{i,j} ∈ R^{(fhw)×d} Xi,j∈R(fhw)×d。第 k k k个块的多头局部注意力公式化为:
时间复杂度如下:
多头全局注意力
我们应用卷积运算来分离和合并特征图,划分为非重叠区域,其中每个区域是特征图的时空抽象。每个区域用于将全局上下文信息传递给每个查询标记。多头全局注意力被公式化为:
不失一般性,假设我们将特征映射 Y k Y_k Yk池化成 F W H f w h \frac{FWH} {fwh} fwhFWH个token,我们的多头全局注意力的复杂度为:
因此,我们的LOGOFormer的整个注意力复杂度可以计算为:
最后,我们将单个全连接(FC)层应用于最后一个块的分类token X ( 0 , 0 ) N X^N_{(0,0)} X(0,0)N:
紧凑损失正则化
进阶详解KL散度:https://zhuanlan.zhihu.com/p/372835186
学习判别性的时空特征在野外DFER要求损失函数具有最大化不同类别之间的特征距离的能力。为了实现这一点,我们建议使用对称Kullback-Leibler(KL)散度 D ( u ) ∣ ∣ p ) + D ( p ∣ ∣ u ) {D(u)||p)+ D(p|| u)} D(u)∣∣p)+D(p∣∣u)来测量分布 u u u和 p p p之间的差异,并对预测分布 p p p施加约束,其中 u u u是 C − 1 C − 1 C−1上的均匀分布, p p p是预测分布,但不包括相应目标 y y y的概率。 u 由 u由 u由softmax函数计算:
实验
我们使用两个野外DFER数据集(即,DFEW和FERV 39 K)来评估我们提出的方法。对于DFEW和FERV 39 K,经处理的面部区域图像被正式检测、对齐并公开提供。我们的模型在DFEW和FERV 39 K上使用两个NVIDIA GTX 1080Ti GPU卡进行了100次训练,批量为32。初始学习率为0.001的SGD优化器和锐度感知最小化用于优化我们提出的模型。我们使用MSCeleb-1 M 上预训练的ResNet 18作为CNN骨干。时空Transformer层的数量N和头的数量分别经验地分配为4和8。未加权平均召回率(UAR)和加权平均召回率(WAR)作为评价指标。
从上表中可以发现加入正则项之后对模型的性能有显著的提升,我们提出的新方法在降低计算量的情况下,还能有较好的模型性能。
通过可视化也可以发现加入紧凑正则项之后使得学习到的特征具有更好的聚合效果,在不同表情之间表现出更清晰的类间边界。
思考
本篇文章设计的思路与MAE-DFER: Efficient Masked Autoencoder for Self-supervised Dynamic Facial Expression Recognition有一定的相似之处。
在MAE-DFER中LGI - Former是组成编码器的核心模块,LGI - Former的核心思想是在局部区域引入一组具有代表性的小标记。一方面,这些标记负责汇总局部区域的关键信息。另一方面,它们允许对不同区域之间的长距离依赖关系进行建模,并实现有效的局部-全局信息交换。
本文设计的 LOGO-Former和上文的LGI - Former有异曲同工之妙, LOGO-Former的多头局部注意力和LGI - Former中的Local Intra-Regin Self-Attention基本完全相同。
LOGO-Former的多头全局注意力模块应用卷积操作来分离和池化特征图,每个区域用于向每个query key传递全局上下文信息。这一操作对应着LGI - Former中的global inter-region self-attention和local-global interaction。
总结
在本文中,我们提出了一个简单而有效的局部-全局Transformer(LOGO-Former)和紧凑的损失正则化项在野生动态面部表情识别(DFER)。我们联合应用每个块内的局部注意力和全局注意力来迭代地学习时空表示。为了进一步提高模型的判别能力,我们通过紧凑的损失正则化项对预测分布施加约束,以增强类内相关性并增加类间距离。实验结果和可视化结果表明,我们的方法学习的歧视性时空特征表示,并提高了分类边缘。
相关文章:

论文阅读:LOGO-Former: Local-Global Spatio-Temporal Transformer for DFER(ICASSP2023)
文章目录 摘要动机与贡献具体方法整体架构输入嵌入生成LOGO-Former多头局部注意力多头全局注意力 紧凑损失正则化 实验思考总结 本篇论文 LOGO-Former: Local-Global Spatio-Temporal Transformer for Dynamic Facial Expression Recognition发表在ICASSP(声学顶会…...

【GO】项目import第三方的依赖包
目录 一、导入第三方包 1.执行命令 2.查看go环境变量参数 3.查看go.mod文件的变化情况 二、程序里如何import 1. import依赖包 2. 程序编写 本次学习go如果依赖第三方的包,并根据第三方的包提供的接口进行编程,这里需要使用go get命令。下面将go…...

【Linux基础IO篇】用户缓冲区、文件系统、以及软硬链接
【Linux基础IO篇】用户缓冲区、文件系统、以及软硬链接 目录 【Linux基础IO篇】用户缓冲区、文件系统、以及软硬链接深入理解用户缓冲区缓冲区刷新问题缓冲区存在的意义 File模拟实现C语言中文件标准库 文件系统认识磁盘对目录的理解 软硬链接软硬链接的删除文件的三个时间 作者…...

电脑软件:推荐一款电脑多屏幕管理工具DisplayFusion
下载https://download.csdn.net/download/mo3408/88514558 一、软件简介 DisplayFusion是一款多屏幕管理工具,它可以让用户更轻松地管理连接到同一台计算机上的多个显示器。 二、软件功能 2.1 多个任务栏 通过在每个显示器上显示任务栏,让您的窗口管理更…...

免费好用的网页采集工具软件推荐
在众多各具特色的采集器软件中,真正好用的采集器软件有哪些? 自己一个个去查找和尝试无疑会耗费大量的时间和精力。 因此,在深入体验大多数采集器后,给大家推荐几款优秀且好用的免费网页采集器软件。 本文将对这几款采集器进行…...

6.ELK之Elasticsearch嵌套(Nested)类型
0、前言 在Elasticsearch实际应用中经常会遇到嵌套文档的情况,而且会有“对象数组彼此独立地进行索引和查询的诉求”。在ES中这种嵌套文档称为父子文档,父子文档“彼此独立地进行查询”至少有以下两种方式: 1)父子文档。在ES的5.…...

RefConv: 重参数化的重新聚焦卷积(论文翻译)
文章目录 摘要1、简介2、相关研究2.1、用于更好性能的架构设计2.2、结构重参数化2.3、权重重参数化方法 3、重参数化的重聚焦卷积3.1、深度RefConv3.2、普通的RefConv3.3、重聚焦学习 4、实验4.1、在ImageNet上的性能评估4.2、与其他重参数化方法的比较4.3、目标检测和语义分割…...

指令重排序
指令重排序是现代处理器在执行指令时的一种优化技术,其目的是为了提高处理器执行指令的效率。这种优化手段会对指令进行重新排序,以提高并行度和性能。 为何会发生指令重排序: 处理器性能优化: 为了更好地利用现代处理器的流水线、…...

【Head First 设计模式】-- 观察者模式
背景 客户有一个WeatherData对象,负责追踪温度、湿度和气压等数据。现在客户给我们提了个需求,让我们利用WeatherData对象取得数据,并更新三个布告板:目前状况、气象统计和天气预报。 WeatherData对象提供了4个接口: …...

JavaWeb篇_01——JavaEE简介【面试常问】
JavaEE简介 什么是JavaEE JavaEE(Java Enterprise Edition),Java企业版,是一个用于企业级web开发平台,它是一组Specification。最早由Sun公司定制并发布,后由Oracle负责维护。在JavaEE平台规范了在开发企业级web应用…...

QtC++与QRadioButton详解
介绍 QRadioButton 是 Qt 中的一个重要部件,用于创建单选按钮,它有以下几个主要作用和特点: 单选功能: QRadioButton 用于创建单选按钮,用户可以从一组互斥的选项中选择一个。这在用户界面设计中常用于需要用户从多个…...

移远EC600U-CN开发板 day01
1.官方文档快速上手,安装驱动,下载QPYcom QuecPython 快速入门 - QuecPython (quectel.com)https://python.quectel.com/doc/Getting_started/zh/index.html 注意: (1)打开开发板步骤 成功打开之后就可以连接开发板…...

【C/C++】什么是POD(Plain Old Data)类型
2023年11月6日,周一下午 目录 POD类型的定义标量类型POD类型的特点POD类型的例子整数类型:C 风格的结构体:数组:C 风格的字符串:std::array:使用 memcpy 对 POD 类型进行复制把POD类型存储到文件中,并从文…...

注册虾皮买家号需要哪些资料?
注册虾皮买家号其实是很简单的,使用相应国家的手机号及对应的环境就可以注册了的,如果想要账号更方便使用,也可以绑定邮箱进行认证。 而如果想要使用shopee买家通系统进行自动化的注册,那么对于资料就有一定的要求了。 1、手机号…...

小腿筋膜炎怎么治疗最有效
小腿筋膜炎症状主要有疼痛、肌肉紧张、活动受限等。 1.疼痛:小腿筋膜炎主要会导致炎症性疼痛,没有固定的压痛点,通常以踝关节、膝关节活动时疼痛为主。疼痛呈持续性,或者反复发作,尤其是在晨起或者天气变化、劳累、受…...

After Effects 2024 v24.0.2(AE2024)
After Effects 2024是视频特效和动态图形设计软件。以下是After Effects 2024的主要功能和特点: 支持创建各种令人惊叹的视觉效果,例如粒子系统、合成特效、绿屏抠像等。支持动画制作,包括关键帧动画、形状动画、运动跟踪等工具,…...

自己实现一个自动检测网卡状态,并设置ip地址
阅读本文前,请先学习下面几篇文章 《搞懂进程组、会话、控制终端关系,才能明白守护进程干嘛的?》 《简简单单教你如何用C语言列举当前所有网口!》 《Linux下C语言操作网卡的几个代码实例!特别实用》 《安卓如何设置…...

【Linux】进程程序替换
文章目录 替换原理站在进程的角度站在程序的角度初体验及理解原理 替换函数函数解释命名理解exec系列函数与main函数之间的关系在一个程序中调用我们自己写的程序 替换原理 创建子进程的目的是什么? ->想让子进程执行父进程代码的一部分 执行父进程对应的磁盘代码…...

项目构建工具maven的基本配置+idea 中配置 maven
👑 博主简介:知名开发工程师 👣 出没地点:北京 💊 2023年目标:成为一个大佬 ——————————————————————————————————————————— 版权声明:本文为原创文…...

【解密ChatGPT】:从过去到未来,揭示其发展与变革
🎊专栏【ChatGPT】 🌺每日一句:天行健,君子以自强不息,地势坤,君子以厚德载物 ⭐欢迎并且感谢大家指出我的问题 文章目录 一、ChatGPT的发展历程 二、ChatGPT的技术原理 三、ChatGPT的应用场景 四、ChatGPT的未来趋势 五、总结 引言:随着…...

系统架构设计】计算机公共基础知识: 5 数学与经济管理
一 运筹方法 1 线性规划 线性规划问题的数学模型通常由线性目标函数、线性约束条件、变量非负条件组成,特点如下: (1)线性规划的可行解域是由一组线性约束条件形成的。 (2)如果存在两个最优解,则连接这两点的线段内所有的点都是最优解,而线段两端延长线上可能会超出…...

Visual Studio 2019光标变成灰色方块问题
文章目录 Visual Studio 2019光标变成灰色方块问题问题描述解决方案 Visual Studio 2019光标变成灰色方块问题 问题描述 单击和双击都无法选中单词,总是选择整行或者是当前光标处的前几个字符一起选中,没有规则,貌似选择单词复制࿰…...

C++ http协议POST body raw 字段向服务器发送请求
环境:ubuntu系统c使用http协议不是很方便,通过curl库我们可以很方便使用http协议,由于我的请求方式比较特殊,在网上没有找到相关的资料,之前使用python实现过一版,但是当设备数量超过100台时,程…...

通过migrate命令实现两个redis实例之间的数据迁移
本文适用于将源服务器的redis实例的key的数据迁移到其他服务器的redis实例 一、migrate简介: migrate用于在Redis实例间进行数据迁移,实际上migrate命令是将dump、restore、del三个命令进行组合,从而简化了操作流程。migrate命令具有原子性&…...

Unity 判断两个UI是否相交
今天碰到要判断两个UI是否相交的交互。 尝试了下,发现有两个方法都成功了。 1、使用Collider2D组件 分别创建两个Image组件,并且添加Collider2D组件,其中一个还要添加Rigidbody2D组件,如下图: 然后创建个判断脚本“…...

swoole process 消息通信
swoole文档:Swoole 文档 process子进程和父进程之间通信,依靠监听。子进程和父进程分别做监听。父进程写入信息,子进程监听接收。子进程向父进程写入,调用父进程监听。 子进程向父进程写入信息有两种方式,一种调用wr…...

uniapp跳转方式
UniApp 是一个基于 Vue.js 的跨平台开发框架,可以同时构建 iOS、Android、H5 和小程序等多个平台的应用。在 UniApp 中,我们可以使用以下几种方式进行页面之间的跳转: 使用 uni.navigateTo 方法:该方法可以在当前页面打开新的页面…...

六大排序算法:插入、选择、冒泡、快排、希尔、归并
1、插入排序 解析:第一个元素设定为已经排好序,依次选择后续的元素插入到已经排好序的组内进行排序。 图示: 代码: public static void insertionSort(int[] arr) {int n arr.length;for (int i 1; i < n; i) {int key a…...

短信登录实现(黑马点评为例)
文章目录 前言一、隐藏用户敏感信息二、短信验证登录、注册1.流程2.代码3.使用redis优化解决代码 二、登录拦截(校验)1.流程2.代码 总结 前言 短信登录核心知识 首先黑马点评这个短信登录是一伪验证,即后台调用工具类随机生成六位数字。 1.R…...

【uniapp】签名组件,兼容vue2vue3
网上找了个源码改吧改吧,清除了没用的功能和兼容性,基于uniapp开发的 样子 vue2 使用方法,具体的可以根据业务自行修改 <signature ref"signature" width"100%" height"410rpx"></signature>confi…...