元智大學資管系第二十六屆實習成果展-ZS
學習
Learn
技術面
Technical side
PYTHON
在專題之中,所有事情都是以python為主,包括資料處理、深度學習,學習到各類型檔案的處理方式、讀檔的技巧,例如高爾夫揮桿骨架檔案(json檔案類型),利用python繪圖、製作影片的方式,包括在圖片上寫上文字、將揮桿影片依據每一幀儲存成圖片以及將圖片還完成影片。
Deep Learning
是機器學習的分支,一種以人工神經網路為架構,對資料進行表徵學習的演算法。主要分為監督式、非監督式、半監督式。至今已有數種深度學習框架,如深度神經網路(DNN)、卷積神經網路(CNN)和迴圈神經網路(RNN)等等已被應用在電腦視覺、語音辨識、自然語言處理、音訊辨識與生物資訊學等。
這方面主要是老師提供影片、書籍來自行學習,有問題都可以隨時問老師,老師也會隨時關心我們的學習進度。
Deep Learning-卷積神經網路(CNN)
是一種前饋神經網路,它的人工神經元可以回應一部分覆蓋範圍內的周圍單元, 由一個或多個卷積層和頂端的全連通層(對應經典的神經網路)組成,同時也包括關聯權重和池化層(pooling layer)。
一開始我們會先學習卷積神經網路,因為它的結構相對簡單,需要考量的參數更少,對於初學者來說非常好,可以建立深度學習的觀念,學習模型的基本建立方式,有助於往後實驗的進行。
Dynamic Time Warping(DTW)動態時間規整演算法
DTW是一種衡量兩個時間序列之間的相似度的方法,主要應用在語音識別領域來識別兩段語音是否表示同一個單詞,在時間序列中,需要比較相似性的兩段時間序列的長度可能並不相等。
在揮桿的過程中,每個人揮的速度可能不相同,拍攝的幀數也不相同,所以再算分數的時候要先讓時間序列長度一致。
餘弦相似度
通過測量兩個向量的夾角的餘弦值來度量它們之間的相似性,兩個向量有相同的指向時,餘弦相似度的值為1;兩個向量夾角為90°時,餘弦相似度的值為0;兩個向量指向完全相反的方向時,餘弦相似度的值為-1。這結果是與向量的長度無關的,僅僅與向量的指向方向相關。
我們利用骨架的點,並選定一個標準揮桿影片,來與其他高爾夫選手比較,並透過一些演算法來完成評分。
Long Short-Term Memory(LSTM)
長短期記憶(LSTM)是一種特殊的RNN,主要是為了解決長序列訓練過程中的梯度消失和梯度爆炸問題。相比普通的RNN,LSTM能夠在更長的序列中有更好的表現,改善了以前RNN的一些問題 (例如Memory的設計問題),而LSTM由四個單位組成: Input Gate、Output Gate、Memory Cell以及Forget Gate。
此技術用在我們高爾夫姿勢揮桿判斷上,因為揮桿是有時序存在的,並且我們還有加入Bidirectional LSTM,用來判斷有時間序列的揮桿動作。
PoseNet
PoseNet是一個基於TensorFlow.js的ML Model,可以在瀏覽器中進行即時人體姿態估算(pose estimation)。估算單個姿勢,也可估算多個姿勢。只要分為兩個階段,第一階段為輸入圖片並通過卷積神經網路解析,第二階段為使用姿勢解碼算法,輸出解碼後的姿勢(decode poses)、姿勢置信度得分(pose confidence scores)、關鍵點位置(keypoint positions)和關鍵點置信度得分(keypoint confidence scores)。
起初在訓練模型時是用AlphaPose,但因為要移植到瀏覽器上,所以改用PoseNet來進行骨架抓取,兩者並無太多的差異,只有在X軸上起始為相反。
Tensorflow JS
TensorFlow.js是TensorFlow的JavaScript版本,支持GPU硬體加速,可以執行在Node.js或瀏覽器環境中。不但支援完全基於JavaScript 從頭開發、訓練和部署模型,也可以用來運行已有的Python版TensorFlow模型,或者基於現有的模型進行繼續訓練。將之前的高爾夫揮桿模型轉換為TensorFlow.js。
非技術面
Non-technical side