当前位置: 首页 > news >正文

嵌入注意力机制的多尺度深度可分离表情识别--2021.宋玉琴

  • 1、表情识别网络模型
    • 1.1 CBAM
    • 1.2 嵌入 CBAM 的多尺度深度可分离卷积残差块
    • 1.3 表情识别网络总体模型
  • 2、实验
    • 2.1 FER2013
    • 2.2 CK+
    • 2.3 消融实验
  • 3、结论

主要解决几个问题:1)深度网络带来的梯度爆炸或弥散问题;2)特征提取效果不好;3)数据存在冗余或噪声(多余和无用的数据)

本文的解决办法:1)残差链接;2)Inception式结构进行多尺度特征提取;3)CBAM注意力模块提升有效特征的表达,削弱噪音影响。

亮点在于:1)Inception中的多尺度卷积核使用多层深度可分离卷积卷积替换,保证感受野的同时降低参数量;2)将CBAM嵌入到Inception每个分支中去,提升每个尺度的特征权重。

1、表情识别网络模型

1.1 CBAM

在这里插入图片描述
在这里插入图片描述
需要注意的是,这里使用sigmoid(有些注意力使用的softmax)

1.2 嵌入 CBAM 的多尺度深度可分离卷积残差块

在这里插入图片描述
可以看出,不考虑通道,3x3DW的感受野=3x3Conv的感受野。所以上图四个分支就等效于普通卷积的3x3、5x5、7x7、9x9,实现了轻量级的多尺度特征提取结构。

除此之外还有CBAM加强每个尺度提取的特征图,剔除冗余特征,提升特征的有效性

1.3 表情识别网络总体模型

首先一个3x3x64的卷积作为stem layer。

后面跟上8个Basic Block(注意Basic Block-1实际上是两个Basic Block组成,其他类同),每层的输出通道数:64、64、128、128、512、512、256、256、512、512。随后跟上全局均值池化将512通道的特征图转换成512向量,然后通过一个FC层输出7分类数据。总体结构上就是[StemLayer, BasicBlocks, GAP, FC]

整体结构如表和图4所示(特征图经过Basic Block-n的运算,shape不变,但是在Basic Block-n之间可以看到特征图尺寸减半、通道加倍,这里的操作没有说明)。
在这里插入图片描述

2、实验

2.1 FER2013

在FER2013数据集上使用TenCrop精度。实验共迭代 300 次,初始学习率设为 0.01,批量
大小设为 32,50 次迭代后,每 8 轮迭代学习率的衰减为之前的 0.8 倍(感觉很多论文都是这个设置)。
最终得到73.89%的准确度,混淆矩阵如下图:
在这里插入图片描述

2.2 CK+

在 CK+数据集上训练时,因其数据较少,故采用十折交叉验证,实验以 9:1 的比例将数据集分为训练集和测试集,本文算法在 CK+数据集得到 94.47%的准确度。
在这里插入图片描述
在这里插入图片描述

2.3 消融实验

在这里插入图片描述
ABCD分别代表Inception结构中的4个分支,n-CBAM代表在n分支上添加CBAM模块。

可以看出添加了B分支(等同5x5卷积)提升最大,可能是FER2013数据集的图像尺寸比较小(48x48),3x3+5x5分支已经能表征需要的多尺度。CBAM也是在分支B上提升最大。

3、结论

利用残差结构和深度可分离卷积堆叠设计了一种类Inception的多分支结构,并且在每个分支上使用CBAM强化特征。实现了保证感受野的轻量级多分支结构,并获得了很好的效果。

从消融实验分支B的提升效果看出,多分支确实能够提高特征提取能力,这可能和表情识别需要局部和全局信息判断有关

相关文章:

  • 页面登录功能的思路
  • ShardingSphere 5.2.0:分片审计功能拦截多分片场景下的不合理请求
  • 毕业设计 单片机stm32智能大棚监控护理系统 - lora 远程通信
  • 关于QCefView的一些事
  • b站pink老师JavaScript的jQuery 案例代码——电梯导航案例
  • Python快速实现简易飞机大战小游戏
  • PowerWorld仿真与电力系统潮流计算(牛顿拉夫逊法和高斯赛德尔法)(Matlab实现)
  • VSCode自动更新后关闭,重新打开后版本自动降级
  • Google Earth Engine(GEE)——如何处理阈值筛选后的结果没发生变化,以青藏高原NDBI为例
  • 数字验证学习笔记——SystemVerilog芯片验证4 ——数据类型
  • 行为树BT设计与实现
  • 基于神经网络的指纹识别,指纹比对技术何时出现
  • 【图像分割】基于差分进化算法优化模糊熵实现多级图像阈值分割附matlab代码
  • LeetCode 0817. 链表组件
  • 27、Java——超市会员管理系统(对象+IO流)
  • “寒冬”下的金三银四跳槽季来了,帮你客观分析一下局面
  • 【391天】每日项目总结系列128(2018.03.03)
  • 【5+】跨webview多页面 触发事件(二)
  • angular组件开发
  • css属性的继承、初识值、计算值、当前值、应用值
  • IIS 10 PHP CGI 设置 PHP_INI_SCAN_DIR
  • Java 23种设计模式 之单例模式 7种实现方式
  • Nacos系列:Nacos的Java SDK使用
  • NSTimer学习笔记
  • Python 反序列化安全问题(二)
  • SpingCloudBus整合RabbitMQ
  • Vue2 SSR 的优化之旅
  • vue和cordova项目整合打包,并实现vue调用android的相机的demo
  • Work@Alibaba 阿里巴巴的企业应用构建之路
  • 表单中readonly的input等标签,禁止光标进入(focus)的几种方式
  • 区块链共识机制优缺点对比都是什么
  • 如何借助 NoSQL 提高 JPA 应用性能
  • 数据可视化之 Sankey 桑基图的实现
  • 数据库写操作弃用“SELECT ... FOR UPDATE”解决方案
  • 在Docker Swarm上部署Apache Storm:第1部分
  • 转载:[译] 内容加速黑科技趣谈
  • 自制字幕遮挡器
  • ​Z时代时尚SUV新宠:起亚赛图斯值不值得年轻人买?
  • #我与Java虚拟机的故事#连载14:挑战高薪面试必看
  • (02)vite环境变量配置
  • (9)目标检测_SSD的原理
  • (Bean工厂的后处理器入门)学习Spring的第七天
  • (done) NLP “bag-of-words“ 方法 (带有二元分类和多元分类两个例子)词袋模型、BoW
  • (草履虫都可以看懂的)PyQt子窗口向主窗口传递参数,主窗口接收子窗口信号、参数。
  • (排序详解之 堆排序)
  • (转)Scala的“=”符号简介
  • (转载)Google Chrome调试JS
  • **Java有哪些悲观锁的实现_乐观锁、悲观锁、Redis分布式锁和Zookeeper分布式锁的实现以及流程原理...
  • .net FrameWork简介,数组,枚举
  • .NET 同步与异步 之 原子操作和自旋锁(Interlocked、SpinLock)(九)
  • .net6Api后台+uniapp导出Excel
  • .NET设计模式(2):单件模式(Singleton Pattern)
  • /*在DataTable中更新、删除数据*/
  • /bin/rm: 参数列表过长"的解决办法
  • /var/spool/postfix/maildrop 下有大量文件