《私立中原大学医学工程学系》由会员分享,可在线阅读,更多相关《私立中原大学医学工程学系(92页珍藏版)》请在金锄头文库上搜索。
1、 私中原大學 醫學工程學系 碩士學位文 以 FPGA 開發手部動作辨系統 之經網晶片 Develop an Artificial Neural Network Chip Using FPGA for Hand Motion Identification System 指導教授:徐育 博士 研 究 生:吳靜宜 中華民國九十三八月二日 I摘要 本研究之長程目標為利用表面肌電訊號(SEMG)之特徵值發展出一套可辨識手部動作之系統,並選擇倒傳遞類神經網路演算做為手部動作辨識之核心。本研究之先期研究已完成七通道主動電極 SEMG擷取系統,當取得 SEMG 並計算其特徵值後,即可提供網路輸入之用。由於目標
2、之系統必須為可攜式,利用數位訊號處理晶片(DSP)以軟體實現複雜之類神經網路運算將佔據太多 DSP 的資源,也無法達到即時(real time)之快速要求。設計特殊晶片雖能加速運算,減少軟體的複雜度,但是所需的發展時間較長。另一方面,場效式可程式閘陣列(FPGA)在硬體實現中提供一個過渡且易於除錯的方案,因此本研究採用 FPGA 硬體實現的方式,實現一具有學習功能之類神經網路晶片,利用主從式架構以減少 DSP 的運算負擔。 本研究先以 Matlab 軟體模擬類神經網路之運算,以驗證演算流程之正確性,降低日後晶片設計除錯之難度,待軟體測試無誤後,再邁入硬體開發與測試流程。軟體測試利用 Matla
3、b toolbox 內建之類神經網路與 Matlab 類神經程式對照,用以驗證演算流程是否正確,另外為了配合 FPGA 之定點運算,亦做了幾項定點數測試,最後選擇Q19 作為小數點解析度之格式,並以成對 t-test 檢定三者之辨識率以檢測定點數所造成的影響,結果顯示 toolbox 與 Matlab 類神經程式並沒有差異(P = 0.574 0.05);而 toolbox 與 Q19 定點運算以及 Matlab類神經程式與 Q19 定點運算則均有明顯差異(P 值分別為 0.00944 及 0.04137)。FPGA 完成後,以 9 位受測者之手部表面肌電訊號進行FPGA 效能測試,同時利用成
4、對 t-test 比較 toolbox、Matlab 神經網路與 FPGA 之辨識結果是否有差異,Matlab 類神經程式與 FPGA 晶片之辨識結果具有明顯差異,P 為 0.002 (P0.05). However, there were significant differences between IVMatlab toolbox and Q19 format and Matlab program and Q19 format. The p values were 0.00944 and 0.04137, respectively. The SEMGs from nine subject
5、s were used to test the performance of FPGA. The results of t-test showed that there was difference between Matlab program and FPGA chip (p = 0.002 =+otherwisexifxxxandxxZCNikkkk,00,1)sgn(02. 0)sgn(111(式3-3) 4. Slope-sign change,可求得訊號上下震盪次數,即找出頻率的參數,如式3-4 Nkforxxxxkkkk,.,103. 0)()(11=+(式3-4) 5. Wave
6、form length,類似差分 (difference) 的訊號處理,可凸顯變化較大之訊號,如式3-5 =NkkxWL1(式3-5) 6. Willison amplitude,可求得訊號受刺激次數的參數,如式3-6 =+otherwisexifxfxxfWAMPNikk, 03 . 0, 1)()(11(式3-6) 3.2 實驗設計實驗設計 本研究設計流程,首先以軟體實現的方式進行,目的是方便熟悉整個類神經網路的演算法架構,故以Mathwork公司所開發的Matlab軟體撰寫類神經網路。另一方面,利用該軟體toolbox中類神經網路函式庫作為對照,以驗證演算流程是否無誤。待軟體驗證演算流程
7、無誤之後,才邁入硬體開發流程。硬體開發採用VHDL為程式撰寫工具,並依據軟體演算流程實現VHDL描述之電路行為,逐步模擬驗證成功之後,再載入FPGA中實際測試。整個實驗設計流程如下圖3.3。 26圖3.3 實驗設計流程圖 3.3 軟體部分軟體部分 3.3.1 軟體實現方式軟體實現方式 在軟體實現倒傳遞類神經網路部分,採用標準三層的神經網路,具有輸入層、隱藏層和輸出層。整個倒傳遞類神經網路的學習過程,可分為兩部分,一為前向網路,另一為倒傳遞網路(圖3.4),以下分別說明。 前向網路(feed-forward),如圖3.4(a)。神經網路處於實際應用模式時,當每筆特徵值(即Xi)輸入後,經過前向運
8、算可得輸出值Yk。若在神經網路處於訓練模式時,輸出值將與期望值比對,若有誤差則進入倒圖3.4 倒傳遞類神經網路架構27傳遞運算調整權值。前向網路各層演算如式3-7、3-8及3-9。Xi為輸入網路之特徵值;Wji為隱藏層權值;f(.)為活化函數,是一雙彎曲函數(sigmoid function);f(nethj)與Oj為隱藏層輸出;隱藏層輸出與輸出層權值(Wkj)相乘累加之值,經過活化函數轉換得到輸出Yk )(jjnethfO = (式3-8) 倒傳遞網路(back-propagation),如圖3.4(b)。於訓練模式時,前向網路的輸出值Yk與期望值tk相減比對後,產生誤差值Ek(式3-10)
9、,同時並利用負梯度下降法修正權值以降低輸出值與期望輸出之差異,因此網路的學習過程,就是使誤差值最小化,直到誤差值達到一可容忍範圍內,便停止倒傳遞修正權值之機制。 權值調整量kjW,如式3-11所示 )(0 jkkjnethfW= (式3-11) 其中為學習率,0 k為輸出層神經元之梯度是誤差量對其輸入總和做偏微分運算,如式3-12 kk knetyE =0 另外,可利用連鎖律(chain rule),將0 k的運算簡化 kk kk kkkkjk knetynetyfYtnetyY YE netyE = =)()(20 2)(kkkYtE=(式3-10) = 0iijijxwneth(式3-7)
10、( 0 = jjkjkOwfY(式3-9)(式3-13) (式3-12) 28若f(x)為雙曲線函數,則其一階導數經簡化可得 )(1)()( xfxfxf= 所以式3-13最後可以推導得到式3-15 )(1)()(20 kkkkknetyfnetyfYt= 在隱藏層部分,因為沒有期望輸出,所以梯度h j是利用輸出層計算出之0 k求得,利用連鎖律推導得到式3-16 = = =kkkjjjk jkjjjjjkkkkkjkh jWnethfnethfnethfnety nethnethfnethnethfnethfnety netyY YE nethE00)(1)( )()()()(式3-16) 結
11、合式3-15與3-16,可求得修正權值之數學函式為 +=+=layeridden .h layer ).(0ih jjijijkkjkjxWWoutputnethfWW(式3-17) 在本研究中,根據上述演算法先用Matlab模擬倒傳遞類神經網路。 3.3.2 軟體驗證軟體驗證 本研究初期,先以軟體的方式實現倒傳遞神經網路,為了驗證類神經演算軟體是否無誤,先以辨識英文字母作為驗證,比較撰寫之Matlab類神經網路程式與Matlab toolbox兩者之辨識結果是否相符。選擇辨識字母的原因,是因肌電訊號的多樣性與複雜性,可能導致兩者之辨識結果差異太大而無法比較,故先以辨識字母作為初步軟體驗證。另
12、一方面,由於FPGA硬體是以定點運算(fixed point),本研究也將針對此點進行測試,決定合適之定點(式3-15) (式3-14) 29數表示解析度與資料長度。 在製作字母樣本方面,將26個英文字母分別表示於七乘七矩陣中。圖3.5為英文字母A 。 因此在倒傳遞類神經網路設計部分,輸入層神經元個數為49,輸出層神經元個數則為所要辨識之26個字母,隱藏層神經元個數可參考3-18式,即輸入神經元個數加上輸出神經元個數除二,或是依據設計者之經驗而定。 2nodes) output_ es(input_nodnodes _+=hidden (式3-18) 本研究利用式3-18計算得到隱藏層神經元個
13、數為37。 並且各層神經元之活化函數皆採用雙彎曲曲線。 本研究比較兩種訓練方式,一.以一組26個標準英文字母為訓練樣本,並利用相同的字母進行測試。二.以一組標準字母摻入10組雜訊產生10組含雜訊之字母(圖3.6),合併原有標準字母共11組作為訓練樣本,並隨機選出一組字母進行測試。兩種方式皆以5次辨識結果做為最後總辨識率。為了防止網路無法收斂而陷入無窮迴圈中,最大訓練次數設定為60000次。而當誤差值低於圖3.5 以七乘七矩陣大小表示的英文字母A300.0005即訓練達到要求,此時停止網路訓練網路,並可利用這組權值,對網路進行測試。 3.3.3 軟體測試軟體測試 在軟體測試倒傳遞類神經網路部分,
14、輸入實際擷取的肌電訊號特徵值,採用標準三層的神經網路。輸入層的神經元個數由特徵值多寡決定,本研究採用7通道電極取得訊號,每個通道之訊號都擷取6種特徵值,故輸入層神經元為42個,而輸出層神經元個數則是依手部動作多寡決定,本研究需判斷11種不同手部動作,故輸出層神經元個數定為11個。在隱藏層神經元個數方面,通常利用式3-18或是憑藉著經驗值產生,本研究將隱藏層個數定為32個。測試的肌電訊號方面,利用本研究室先前研發之肌電訊號擷取系統取得,受測者男女共5位,平均年齡243歲。每位受測者錄製18組肌電訊號,每組訊號皆包含11種手部動作,其中包含幾個簡單的手語動作,實際動作如圖3.7所示。 (a) 手語
15、 (二) (b) 手語 (五)圖3.6 含有雜訊之英文字母A31(c) 手語 (七) (d) 手語 (一) (f) 放鬆上勾 (e) 手語 (四) (h) 握拳上勾 (g) 放鬆下勾 (j) 手語 (六) 圖3.7 本研究所使用之十一種手部動作17 (k) 握拳 (i) 握拳下勾 32每位受測者錄製的18組訊號,分成13組訓練樣本與5筆測試樣本,為了防止網路無法收斂而陷入無窮迴圈中,最大訓練次數設定為60000次,而當誤差值低於0.0005即訓練達到要求,並停止訓練。 3.3.4 定點數測試定點數測試 在小數點解析度部分,如果小數之位元數不夠多,將會影響到運算之解析度,造成辨識率下降;另一方面如果小數位元數太多,雖然可以提高運算解析度,但運算量增加,同時記憶體面積也會因此增加,消耗的晶片資源也相對增多,所以決定小數之位元數,是一個重要的步驟。因此本研究將測試Q12、Q13、Q14、Q15、Q19、Q20等定點數表示法,以評估其對辨識率之影響性,其中Q12定點數表示法也就是小數點後保留12個小數位元數,其解析度為2-12,Q13定點數表示法保留13個小數位元數,其解析度為2-13,其他依此類推。 3.4 硬體部分硬體部分 3.4.1 VHDL 設計環境設計環境 本研究以VHDL高階硬體描述語言,實現數位電