表情分析计算机,利用深度学习和计算机视觉分析脸部表情

2023-12-16 03:10

本文主要是介绍表情分析计算机,利用深度学习和计算机视觉分析脸部表情,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

原标题:利用深度学习和计算机视觉分析脸部表情

587290548ab0bc40b495fd875801d190.png

辨别脸部表情和情绪是人类社会互动早期阶段中一项基本且非常重要的技能。人类可以观察一个人的脸部,并且快速辨识常见的情绪:怒、喜、惊、厌、悲、恐。将这一技能传达给机器是一项复杂的任务。研究人员经过几十年的工程设计,试图编写出能够准确辨识一项特征的电脑程序,但仍必须不断地反覆尝试,才能辨识出仅有细微差别的特征。

那么,如果不对机器进行编程,而是直接教机器精确地辨识情绪,这样是否可行呢?

深度学习(deep learning)技术对于降低计算机视觉(computer vision)辨识和分类的错误率展现出巨大的优势。在嵌入式系统中实施深度神经网络(见图1)有助于机器透过视觉解读脸部表情,并达到类似人类的准确度。

f0af2438c0601abd9329702907b11940.png

图1 深度神经网络的简单例子

神经网络可经由训练而辨识出模式,而且如果它拥有输入输出层以及至少一个隐藏的中间层,则被认为具有「深度」辨识能力。每个节点从上一层中多个节点的加权输入值而计算出来。这些加权值可经过调整而执行特别的图像辨识任务。这称为神经网络训练过程。

例如,为了训练深度神经网络辨识面带开心笑脸的照片,我们向其展示开心的图片作为输入层上的原始资料(图像画素)。由于知道结果是开心,网络就会辨识图片中的模式,并调整节点加权,尽可能地减少开心类别图片的错误。每个显示出开心表情并带有注解的新图片都有助于最佳化图片权重。借由充份的输入资讯与训练,网络可以摄入不带标记的图片,并且准确地分析和辨识与开心表情相对应的模式。

深度神经网络需要大量的运算能力,用于计算所有这些互连节点的加权值。此外,资料存储器和高效的资料移动也很重要。卷积神经网路(CNN)(见图2)是目前针对视觉实施深度神经网路中实现效率最高的先进技术。CNN之所以效率更高,原因是这些网络能够重复使用图片间的大量权重资料。它们利用资料的二维(2D)输入结构减少重复运算。

0c5430375fb0b98ec8b92bc784a5c54e.png

图2 用于脸部分析的卷积神经网路架构(示意图)

实施用于脸部分析的CNN需要两个独特且互相独立的阶段。第一个是训练阶段,第二个是部署阶段。

训练阶段(见图3)需要一种深度学习架构——例如,Caffe或TensorFlow——它采用中央处理器(CPU)和绘图处理器(GPU)进行训练计算,并提供架构使用知识。这些架构通常提供可用作起点的CNN图形范例。深度学习架构可对图形进行微调。为了实现尽可能最佳的精确度,可以增加、移除或修改分层。

49e7cba11cc5c5e182c9e8f715fbf93d.png

图3 CNN训练阶段

在训练阶段的一个最大挑战是寻找标记正确的资料集,以对网络进行训练。深度网络的精确度高度依赖于训练资料的分布和品质。脸部分析必须考虑的多个选项是来自「脸部表情识别挑战赛」(FREC)的情感标注资料集和来自VicarVision (VV)的多标注私有资料集。

针对即时嵌入式设计,部署阶段(见图4)可实施在嵌入式视觉处理器上,例如带有可编程CNN引擎的Synopsys DesignWare EV6x嵌入式视觉处理器。嵌入式视觉处理器是均衡性能和小面积以及更低功耗关系的最佳选择。

1142d0bdb7c6fcf86a5941da18bd7be1.png

图4 CNN部署阶段

虽然标量单元和向量单元都采用C和OpenCL C(用于实现向量化)进行编程设计,但CNN引擎不必手动编程设计。来自训练阶段的最终图形和权重(系数)可以传送到CNN映射工具中,而嵌入式视觉处理器的CNN引擎则可经由配置而随时用于执行脸部分析。

从摄影机和图像传感器获取的图像或视频画面被馈送至嵌入式视觉处理器。在照明条件或者脸部姿态有显着变化的辨识场景中,CNN比较难以处理,因此,图像的预处理可以使脸部更加统一。先进的嵌入式视觉处理器的异质架构和CNN能让CNN引擎对图像进行分类,而向量单元则会对下一个图像进行预处理——光线校正、图像缩放、平面旋转等,而标量单元则处理决策(即如何处理CNN检测结果)。

图像解析度、画面更新率、图层数和预期的精确度都要考虑所需的平行乘积累加数量和性能要求。Synopsys带有CNN的EV6x嵌入式视觉处理器采用28nm工艺技术,以800MHz的速率执行,同时提供高达880MAC的性能。

一旦CNN经过配置和训练而具备检测情感的能力,它就可以更轻松地进行重新配置,进而处理脸部分析任务,例如确定年龄范围、辨识性别或种族,并且分辨发型或是否戴眼镜。

总结

可在嵌入式视觉处理器上执行的CNN开辟了视觉处理的新领域。很快地,我们周围将会充斥着能够解读情感的电子产品,例如检测开心情绪的玩具,以及能经由辨识脸部表情而确定学生理解情况的电子教师。深度学习、嵌入式视觉处理和高性能CNN的结合将很快地让这一愿景成为现实。

责任编辑:

这篇关于表情分析计算机,利用深度学习和计算机视觉分析脸部表情的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/498888

相关文章

Java中Redisson 的原理深度解析

《Java中Redisson的原理深度解析》Redisson是一个高性能的Redis客户端,它通过将Redis数据结构映射为Java对象和分布式对象,实现了在Java应用中方便地使用Redis,本文... 目录前言一、核心设计理念二、核心架构与通信层1. 基于 Netty 的异步非阻塞通信2. 编解码器三、

Java HashMap的底层实现原理深度解析

《JavaHashMap的底层实现原理深度解析》HashMap基于数组+链表+红黑树结构,通过哈希算法和扩容机制优化性能,负载因子与树化阈值平衡效率,是Java开发必备的高效数据结构,本文给大家介绍... 目录一、概述:HashMap的宏观结构二、核心数据结构解析1. 数组(桶数组)2. 链表节点(Node

Java 虚拟线程的创建与使用深度解析

《Java虚拟线程的创建与使用深度解析》虚拟线程是Java19中以预览特性形式引入,Java21起正式发布的轻量级线程,本文给大家介绍Java虚拟线程的创建与使用,感兴趣的朋友一起看看吧... 目录一、虚拟线程简介1.1 什么是虚拟线程?1.2 为什么需要虚拟线程?二、虚拟线程与平台线程对比代码对比示例:三

Nginx分布式部署流程分析

《Nginx分布式部署流程分析》文章介绍Nginx在分布式部署中的反向代理和负载均衡作用,用于分发请求、减轻服务器压力及解决session共享问题,涵盖配置方法、策略及Java项目应用,并提及分布式事... 目录分布式部署NginxJava中的代理代理分为正向代理和反向代理正向代理反向代理Nginx应用场景

Python函数作用域与闭包举例深度解析

《Python函数作用域与闭包举例深度解析》Python函数的作用域规则和闭包是编程中的关键概念,它们决定了变量的访问和生命周期,:本文主要介绍Python函数作用域与闭包的相关资料,文中通过代码... 目录1. 基础作用域访问示例1:访问全局变量示例2:访问外层函数变量2. 闭包基础示例3:简单闭包示例4

Redis中的有序集合zset从使用到原理分析

《Redis中的有序集合zset从使用到原理分析》Redis有序集合(zset)是字符串与分值的有序映射,通过跳跃表和哈希表结合实现高效有序性管理,适用于排行榜、延迟队列等场景,其时间复杂度低,内存占... 目录开篇:排行榜背后的秘密一、zset的基本使用1.1 常用命令1.2 Java客户端示例二、zse

Redis中的AOF原理及分析

《Redis中的AOF原理及分析》Redis的AOF通过记录所有写操作命令实现持久化,支持always/everysec/no三种同步策略,重写机制优化文件体积,与RDB结合可平衡数据安全与恢复效率... 目录开篇:从日记本到AOF一、AOF的基本执行流程1. 命令执行与记录2. AOF重写机制二、AOF的

MyBatis Plus大数据量查询慢原因分析及解决

《MyBatisPlus大数据量查询慢原因分析及解决》大数据量查询慢常因全表扫描、分页不当、索引缺失、内存占用高及ORM开销,优化措施包括分页查询、流式读取、SQL优化、批处理、多数据源、结果集二次... 目录大数据量查询慢的常见原因优化方案高级方案配置调优监控与诊断总结大数据量查询慢的常见原因MyBAT

分析 Java Stream 的 peek使用实践与副作用处理方案

《分析JavaStream的peek使用实践与副作用处理方案》StreamAPI的peek操作是中间操作,用于观察元素但不终止流,其副作用风险包括线程安全、顺序混乱及性能问题,合理使用场景有限... 目录一、peek 操作的本质:有状态的中间操作二、副作用的定义与风险场景1. 并行流下的线程安全问题2. 顺

MyBatis/MyBatis-Plus同事务循环调用存储过程获取主键重复问题分析及解决

《MyBatis/MyBatis-Plus同事务循环调用存储过程获取主键重复问题分析及解决》MyBatis默认开启一级缓存,同一事务中循环调用查询方法时会重复使用缓存数据,导致获取的序列主键值均为1,... 目录问题原因解决办法如果是存储过程总结问题myBATis有如下代码获取序列作为主键IdMappe