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