基于情绪识别的多模态反馈康复训练系统设计
2022-12-06王清波陈国雄顾伟新
王清波,虞 成,陈国雄,顾伟新,吴 亮,袁 杰
(杭州市第一人民医院,浙江杭州 310006)
0 引言
在老年相关疾病中,脑卒中是一种致残率很高的疾病。我国患者数量已经突破1500 万,并以每年新增近250 万人的速度上升。由脑卒中引起的神经损伤功能恢复很大程度上是由神经可塑性驱动的,神经可塑性是中枢神经系统对患者经历做出反应,神经结构和功能发生变化的适应能力[1]。为了促进经验依赖的神经可塑性和功能恢复,康复训练者应使用密集、重复和突出的任务进行特异性练习。虚拟现实结合自适应神经调控已成为康复训练应用的重要研究方向。在患者康复训练中,提供适合训练人员运动、感知的训练难度,保持训练人员主动参与,对取得良好的康复效果至关重要[2]。
在康复训练中保持注意力集中对于脑损伤后的神经修复和大脑重组非常重要[3-5]。提高患者的投入状态已成为提高康复训练效果非常重要的因素[6]。康复训练中,康复处方设置的重要目标之一就是唤起康复训练者积极参与的情绪。相比于单一的抗阻力等仅基于物理的康复训练,结合丰富的声音、触觉等多模态反馈的康复训练对患者的认知提高更为有效[7]。在这个过程中,音乐作为一种系统的干预过程直接作用于能够影响情绪的中枢,双向调节患者的情绪[8]。
在康复训练中,参与者的情绪变化是一个相对动态的过程,基于数据库的静态音乐搜寻比较难满足实时情绪调节的作用,基于人工智能的动态音乐生成提供了一个解决方案。本文设计一种基于OpenVINO(Open Visual&Neural Network Optimization)工具套件情绪识别和基于Magenta 平台音乐生成的康复训练系统。该康复训练系统可提供根据情绪识别进行反馈调整难度的康复训练场景,通过摄像头进行康复人员情绪检测的情况下,对康复训练游戏难度进行动态调整,并且可以根据情绪识别状态动态生成音乐,从视觉和听觉多模态感官上进行动态反馈,以便于患者能更长时间地参与康复训练过程。
1 OpenVINO 系统设计架构
建立基于OpenVINO 推理工具及Magenta 平台的康复训练系统架构:利用Python 的OpenVINO 引擎进行情绪识别系统设计,利用Magenta 平台构建音乐生成,利用Python 的Pygame 程序模块构建游戏场景。
OpenVINO 为美国英特尔公司推出的一款全面的工具套件,包含推断库,模型优化等一系列与深度学习模型部署相关的功能[9]。本康复训练系统使用OpenVINO 工具套件进行情绪状态识别,并利用情绪状态的识别结果反馈控制训练难度和音乐状态。训练系统使用搭建在Python 的Magenta 平台进行音乐生成的模型训练和数据生成,基于情绪识别状态来控制生成平静或欢乐的音乐。谷歌的Magenta 是一款基于TensorFlow 机器学习引擎的人工智能平台[10]。
2 系统设计与实现
本系统包括游戏系统设计、情绪识别及音乐生成3 个单元。其中,游戏系统设计单元包括了可视化的游戏界面设计、基于手柄的交互控制和游戏难度控制3 个子模块:①游戏动画界面设计模块展示游戏,用于参与者视觉呈现和反馈;②面向手柄的控制单元实现训练者控制游戏中的虚拟映射;③游戏难度控制模块一方面接收按键信息,用于难度控制,另一方面接收情绪识别单元输入的情绪状态,调整游戏难度。情绪识别单元用于基于视频信息进行情绪状态识别,输入游戏系统设计单元以调整游戏模式控制难度,并输入音乐生成单元数据以动态生成音乐。音乐生成单元用于根据情绪状态动态生成平静或欢乐的音乐。通过游戏难度调整进行视觉反馈,通过音乐生成进行听觉反馈,以控制情绪平稳(图1)。
2.1 游戏系统设计单元
2.1.1 训练场景设计
使用Pygame 作为训练场景设计的基础类[11]。训练场景的类如下,用于加载训练场景中虚拟训练对象。
# 加载场景中虚拟训练对象
def load(self,filename,width,height,columns):
self.master_image_ reha=pygame.image.load(filename).convert_alpha()
self.rect_ reha=Rect(0,0,width,height)
self.columns_ reha=columns
2.1.2 基于手柄的交互控制
本系统应用了莱仕达品牌,型号为PXN-2113 的训练手柄。使用Python 的Joystick 类用于程序中控制手柄。下述程序代表了系统利用手柄的左右移动来控制训练场景中虚拟对象的位置。
# 控制训练场景中虚拟对象的位置
axes_Reha=joystick_ Reha.get_numaxes()
for i in range(axes_Reha):
axis_Reha=joystick_ Reha.get_axis(i)
if i==0 &operate_mode_ Reha==0:
player.Y=player_start_y -40+axis_ Reha * 50 #player 为场景中可操作虚拟人
elif i==1 &operate_mode_Reha==1:
player.Y=player_start_y -40+axis_ Reha * 50
2.1.3 训练难度控制
训练难度控制包含两种途径,一种为按下键盘左右按键调整训练难度,另一种为根据人工智能程序识别的情绪状态来动态调整训练难度。
(1)按键控制:通过键盘按键改变训练难度,按键为向右,游戏难度加1,最高级别为5;按键向左,游戏难度减1,最低级别为0。
(2)情绪反馈控制:如果情绪识别单元判断情绪为高兴,游戏难度加1,最高级别为5;如果情绪识别单元判断情绪为伤心,游戏难度减1,最低级别为0;如果情绪识别单元判断情绪为平静,游戏难度不变,级别不变。
2.2 情绪识别设计
通过OpenVINO 工具套件实现基于摄像头图像获取的情绪状态识别。OpenVINO 工具套件主要包括用于加速推理计算的软件包推理引擎(Inference Engine)和用于优化神经网络模型的工具模型优化器(Model Optimizer)[12]。具体流程如下。
2.2.1 载入硬件插件
plugin_Reha=IEPlugin(device="CPU",plugin_reha_dirs=plugin_reha_dir)
2.2.2 载入模型
emotion_exec_net_Reha=plugin_Reha.load (network=emotion_net)
2.2.3 准备输入数据
# 人脸识别
exec_net_Reha.start_async (request_id=cur_request_id,inputs={input_blob: in_face_frame})
# 获取人脸识别网络输出
res_Reha=exec_net_Reha.requests[cur_request_id].outputs[out_blob]
2.2.4 执行推理计算
emotion_exec_net_Reha.infer({'data':face_roi})
2.2.5 获取情绪识别状态
# 从识别情绪值中获取得分最高的
emotion_mask_Reha=np.argmax(np.reshape(emotion_res_Reha,(5,1)))
# 情绪识别会输出5 种结果,分别对应下述的5 种情绪
Reha_label=["neutral","anger","sad","surprise","happy"]
emotion_lable_Reha=Reha_label [emotion_mask_Reha]
2.3 音乐生成
Magenta 使用谷歌开发的TensorFlow 机器学习引擎,然后通过机器学习训练制作原创的音乐、视频或者绘画。
2.3.1 数据转换
首先,将网上下载的MIDI(乐器数字接口)音乐打标签,将其分为安静和欢乐两类;然后,对音乐数据分别进行预处理。在Magenta 中,原始数据(MIDI 数据)被转换成基于缓存协议的注释序列,根据模型的不同,程序将注释序列转换成该模型需要的输入。Magenta 支持MusicXML(.xml、.mxl)、MIDI(.mid、.midi)等格式的原始数据文件做训练数据。并转换为注释序列,以TFRecord 格式(Tensorflow 支持的一种数据格式)存储。这里使用的是MIDI 格式转换[13]。
将MIDI 文件全部存储为TFReocrd 文件之后,用polyphony模型进行训练,得到音乐数据集。
pipline_instance=polyphony_rnn_pipline.get_pipline(
Reha_min_steps=80,
Reha_max_steps=512,
Reha_eval_ratio=FLAGS.eval.ratio,
Reha_Config=polyphony_model.default_configs['polyphony']
)
pipline.run_pipline_serial(
pipeline_instance,
Pipeline.tf_record_iterator (input_dir,pipeline_instance.input_type,output_dir)
)
2.3.2 模型训练
# 配置复调音乐模型
config=polyphony_model.default_configs[FLAGS.config]
config.hparams.parse(FLAGS.haprams)
mode='eval' if FLAGS.eval else 'train'
Build_graph_fn=events_rnn_graph.get_build_graph_fn(
mode,config,sequence_example_file_paths)
# 训练模型
events_rnn_train.run_training(build_graph_fn,train_dir,
FLAGS.num_training_steps,
FLAGS.summary_frequency,
Checkpoints_to_keep=FLAGS.num_checkpoints)
2.3.3 数据生成
generator=melody_rnn_sequence_generator.MelodyRnnSe-quenceGenerator(
model=melody_rnn_model.MelodyRnnModel(config),
details=config.details,
steps_per_quarter=config.steps_per_quarter,
checkpoint=get_checkpoint(),
bundle=bundle)
generator.create_bundle_file (bundle_filename,FLAGS.bundle_description)
3 康复训练系统应用
运行程序后,系统显示两个图形窗口,一个为视频显示窗口进行人脸区域现实和情绪识别状态显示,一个为用户可以操作的游戏动画界面。
训练界面上,训练者操作手柄控制虚拟对象的上下移动躲避火弹。如火弹击中虚拟对象,虚拟对象向虚拟龙方向移动,直到虚拟对象移动到虚拟龙位置为止,当前训练阶段失败。如躲避成功,火弹未击中虚拟龙,虚拟龙向虚拟对象反方向移动,直到虚拟龙移出训练界面为止,当前训练阶段成功。
火弹速度级别可通过两个方式进行设置,一个是训练难度即火弹的攻击速度通过键盘按键进行设置,第二个是通过识别的情绪状态来进行动态调整训练难度。如识别到训练者悲伤,训练难度动下降;识别到训练者喜悦,训练难度自动上升;识别到训练者情绪平稳,训练难度维持不变(图2)。
同时,系统动态生成音乐,如果检测到人员悲伤,生成平静的音乐;检测到人员高兴,生成平静的音乐;检测到人员平静,生成欢乐的音乐。
4 结论
健康是指一个人在身体、精神和社会等方面都处于良好的状态,已成为人们生活的基本目标。研究表明,康复训练中如果要求患者主动参与,机器人辅助康复训练会表现出患者Fugl-Meyer 评分显著提高[14]。但是,训练过程一般情况下比较长,训练人员容易出现惰性,并且训练人员的康复训练过程具有动态变化的特点,这已经成为影响训练病人康复效果的重要因素[15]。
情绪综合了人的感觉、行为及思想的状态,情绪具有外部表现、主观体验、生理唤醒3 种成分。音乐对多巴胺产生影响,多巴胺参与了情绪情感等生理活动,其相关脑区组成奖赏系统,共同参与情绪反应。适合的音乐促进患者情绪稳定,有利于长时间的主动参与[16]。
本研究设计一种基于情绪识别的多模态反馈康复训练系统,以情绪识别为基础,构建难度调整和音乐生成的多模态反馈康复训练系统,帮助患者实现通过电子化方式进行康复训练。本研究仅在系统层面进行了设计,并在健康人身上进行了测试,尚未在真实的脑卒中病人上进行实验,后期将扩大样本量和研究范围,对脑卒中患者在多模态反馈下的康复训练效果做进一步研究。