王清波,虞 成,陳國雄,顧偉新,吳 亮,袁 杰
(杭州市第一人民醫(yī)院,浙江杭州 310006)
在老年相關疾病中,腦卒中是一種致殘率很高的疾病。我國患者數(shù)量已經突破1500 萬,并以每年新增近250 萬人的速度上升。由腦卒中引起的神經損傷功能恢復很大程度上是由神經可塑性驅動的,神經可塑性是中樞神經系統(tǒng)對患者經歷做出反應,神經結構和功能發(fā)生變化的適應能力[1]。為了促進經驗依賴的神經可塑性和功能恢復,康復訓練者應使用密集、重復和突出的任務進行特異性練習。虛擬現(xiàn)實結合自適應神經調控已成為康復訓練應用的重要研究方向。在患者康復訓練中,提供適合訓練人員運動、感知的訓練難度,保持訓練人員主動參與,對取得良好的康復效果至關重要[2]。
在康復訓練中保持注意力集中對于腦損傷后的神經修復和大腦重組非常重要[3-5]。提高患者的投入狀態(tài)已成為提高康復訓練效果非常重要的因素[6]??祻陀柧氈?,康復處方設置的重要目標之一就是喚起康復訓練者積極參與的情緒。相比于單一的抗阻力等僅基于物理的康復訓練,結合豐富的聲音、觸覺等多模態(tài)反饋的康復訓練對患者的認知提高更為有效[7]。在這個過程中,音樂作為一種系統(tǒng)的干預過程直接作用于能夠影響情緒的中樞,雙向調節(jié)患者的情緒[8]。
在康復訓練中,參與者的情緒變化是一個相對動態(tài)的過程,基于數(shù)據(jù)庫的靜態(tài)音樂搜尋比較難滿足實時情緒調節(jié)的作用,基于人工智能的動態(tài)音樂生成提供了一個解決方案。本文設計一種基于OpenVINO(Open Visual&Neural Network Optimization)工具套件情緒識別和基于Magenta 平臺音樂生成的康復訓練系統(tǒng)。該康復訓練系統(tǒng)可提供根據(jù)情緒識別進行反饋調整難度的康復訓練場景,通過攝像頭進行康復人員情緒檢測的情況下,對康復訓練游戲難度進行動態(tài)調整,并且可以根據(jù)情緒識別狀態(tài)動態(tài)生成音樂,從視覺和聽覺多模態(tài)感官上進行動態(tài)反饋,以便于患者能更長時間地參與康復訓練過程。
建立基于OpenVINO 推理工具及Magenta 平臺的康復訓練系統(tǒng)架構:利用Python 的OpenVINO 引擎進行情緒識別系統(tǒng)設計,利用Magenta 平臺構建音樂生成,利用Python 的Pygame 程序模塊構建游戲場景。
OpenVINO 為美國英特爾公司推出的一款全面的工具套件,包含推斷庫,模型優(yōu)化等一系列與深度學習模型部署相關的功能[9]。本康復訓練系統(tǒng)使用OpenVINO 工具套件進行情緒狀態(tài)識別,并利用情緒狀態(tài)的識別結果反饋控制訓練難度和音樂狀態(tài)。訓練系統(tǒng)使用搭建在Python 的Magenta 平臺進行音樂生成的模型訓練和數(shù)據(jù)生成,基于情緒識別狀態(tài)來控制生成平靜或歡樂的音樂。谷歌的Magenta 是一款基于TensorFlow 機器學習引擎的人工智能平臺[10]。
本系統(tǒng)包括游戲系統(tǒng)設計、情緒識別及音樂生成3 個單元。其中,游戲系統(tǒng)設計單元包括了可視化的游戲界面設計、基于手柄的交互控制和游戲難度控制3 個子模塊:①游戲動畫界面設計模塊展示游戲,用于參與者視覺呈現(xiàn)和反饋;②面向手柄的控制單元實現(xiàn)訓練者控制游戲中的虛擬映射;③游戲難度控制模塊一方面接收按鍵信息,用于難度控制,另一方面接收情緒識別單元輸入的情緒狀態(tài),調整游戲難度。情緒識別單元用于基于視頻信息進行情緒狀態(tài)識別,輸入游戲系統(tǒng)設計單元以調整游戲模式控制難度,并輸入音樂生成單元數(shù)據(jù)以動態(tài)生成音樂。音樂生成單元用于根據(jù)情緒狀態(tài)動態(tài)生成平靜或歡樂的音樂。通過游戲難度調整進行視覺反饋,通過音樂生成進行聽覺反饋,以控制情緒平穩(wěn)(圖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 基于手柄的交互控制
本系統(tǒng)應用了萊仕達品牌,型號為PXN-2113 的訓練手柄。使用Python 的Joystick 類用于程序中控制手柄。下述程序代表了系統(tǒng)利用手柄的左右移動來控制訓練場景中虛擬對象的位置。
# 控制訓練場景中虛擬對象的位置
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 訓練難度控制
訓練難度控制包含兩種途徑,一種為按下鍵盤左右按鍵調整訓練難度,另一種為根據(jù)人工智能程序識別的情緒狀態(tài)來動態(tài)調整訓練難度。
(1)按鍵控制:通過鍵盤按鍵改變訓練難度,按鍵為向右,游戲難度加1,最高級別為5;按鍵向左,游戲難度減1,最低級別為0。
(2)情緒反饋控制:如果情緒識別單元判斷情緒為高興,游戲難度加1,最高級別為5;如果情緒識別單元判斷情緒為傷心,游戲難度減1,最低級別為0;如果情緒識別單元判斷情緒為平靜,游戲難度不變,級別不變。
通過OpenVINO 工具套件實現(xiàn)基于攝像頭圖像獲取的情緒狀態(tài)識別。OpenVINO 工具套件主要包括用于加速推理計算的軟件包推理引擎(Inference Engine)和用于優(yōu)化神經網(wǎng)絡模型的工具模型優(yōu)化器(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 準備輸入數(shù)據(jù)
# 人臉識別
exec_net_Reha.start_async (request_id=cur_request_id,inputs={input_blob: in_face_frame})
# 獲取人臉識別網(wǎng)絡輸出
res_Reha=exec_net_Reha.requests[cur_request_id].outputs[out_blob]
2.2.4 執(zhí)行推理計算
emotion_exec_net_Reha.infer({'data':face_roi})
2.2.5 獲取情緒識別狀態(tài)
# 從識別情緒值中獲取得分最高的
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]
Magenta 使用谷歌開發(fā)的TensorFlow 機器學習引擎,然后通過機器學習訓練制作原創(chuàng)的音樂、視頻或者繪畫。
2.3.1 數(shù)據(jù)轉換
首先,將網(wǎng)上下載的MIDI(樂器數(shù)字接口)音樂打標簽,將其分為安靜和歡樂兩類;然后,對音樂數(shù)據(jù)分別進行預處理。在Magenta 中,原始數(shù)據(jù)(MIDI 數(shù)據(jù))被轉換成基于緩存協(xié)議的注釋序列,根據(jù)模型的不同,程序將注釋序列轉換成該模型需要的輸入。Magenta 支持MusicXML(.xml、.mxl)、MIDI(.mid、.midi)等格式的原始數(shù)據(jù)文件做訓練數(shù)據(jù)。并轉換為注釋序列,以TFRecord 格式(Tensorflow 支持的一種數(shù)據(jù)格式)存儲。這里使用的是MIDI 格式轉換[13]。
將MIDI 文件全部存儲為TFReocrd 文件之后,用polyphony模型進行訓練,得到音樂數(shù)據(jù)集。
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 數(shù)據(jù)生成
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)
運行程序后,系統(tǒng)顯示兩個圖形窗口,一個為視頻顯示窗口進行人臉區(qū)域現(xiàn)實和情緒識別狀態(tài)顯示,一個為用戶可以操作的游戲動畫界面。
訓練界面上,訓練者操作手柄控制虛擬對象的上下移動躲避火彈。如火彈擊中虛擬對象,虛擬對象向虛擬龍方向移動,直到虛擬對象移動到虛擬龍位置為止,當前訓練階段失敗。如躲避成功,火彈未擊中虛擬龍,虛擬龍向虛擬對象反方向移動,直到虛擬龍移出訓練界面為止,當前訓練階段成功。
火彈速度級別可通過兩個方式進行設置,一個是訓練難度即火彈的攻擊速度通過鍵盤按鍵進行設置,第二個是通過識別的情緒狀態(tài)來進行動態(tài)調整訓練難度。如識別到訓練者悲傷,訓練難度動下降;識別到訓練者喜悅,訓練難度自動上升;識別到訓練者情緒平穩(wěn),訓練難度維持不變(圖2)。
同時,系統(tǒng)動態(tài)生成音樂,如果檢測到人員悲傷,生成平靜的音樂;檢測到人員高興,生成平靜的音樂;檢測到人員平靜,生成歡樂的音樂。
健康是指一個人在身體、精神和社會等方面都處于良好的狀態(tài),已成為人們生活的基本目標。研究表明,康復訓練中如果要求患者主動參與,機器人輔助康復訓練會表現(xiàn)出患者Fugl-Meyer 評分顯著提高[14]。但是,訓練過程一般情況下比較長,訓練人員容易出現(xiàn)惰性,并且訓練人員的康復訓練過程具有動態(tài)變化的特點,這已經成為影響訓練病人康復效果的重要因素[15]。
情緒綜合了人的感覺、行為及思想的狀態(tài),情緒具有外部表現(xiàn)、主觀體驗、生理喚醒3 種成分。音樂對多巴胺產生影響,多巴胺參與了情緒情感等生理活動,其相關腦區(qū)組成獎賞系統(tǒng),共同參與情緒反應。適合的音樂促進患者情緒穩(wěn)定,有利于長時間的主動參與[16]。
本研究設計一種基于情緒識別的多模態(tài)反饋康復訓練系統(tǒng),以情緒識別為基礎,構建難度調整和音樂生成的多模態(tài)反饋康復訓練系統(tǒng),幫助患者實現(xiàn)通過電子化方式進行康復訓練。本研究僅在系統(tǒng)層面進行了設計,并在健康人身上進行了測試,尚未在真實的腦卒中病人上進行實驗,后期將擴大樣本量和研究范圍,對腦卒中患者在多模態(tài)反饋下的康復訓練效果做進一步研究。