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