優點 * 有網站 * 有姿勢矯正輸出 * 是即時反饋(也有語音) * 是skeleton 缺點 * 2D * 資料集不是圖片而是已經被處理過的json檔案 * 姿勢正確度是用角度計算,所以我們換成3D的時候可能整個要打掉重練 * 我有去網站看過,大概開著兩三分鐘就會超當(感覺整個程式架構沒有到很好的感覺) 總體來說疑慮還蠻多的,我有在想要不要先跟助教開會過後再看要不要用,先不要給教授看的意思 # [Yoga Pose Classification and Correction using PoseNet ](https://ieeexplore.ieee.org/document/10503105/keywords#keywords) * 2024 * [github](https://github.com/adityapotdar23/Yoga-Pose-Correction) * skeleton * 2D * [網站](https://sarvyi.github.io/Yoga-Pose-Correction/)  ## 關於論文 ### 貢獻 1. **應用PoseNet進行瑜伽姿勢角度計算**:系統使用PoseNet模型來偵測和計算使用者各個關鍵點的角度,然後將這些角度與理想的姿勢角度進行比較,以判斷使用者的姿勢是否正確。 3. **以KNN演算法進行即時姿勢分類**:透過K-Nearest Neighbours(KNN)演算法,即時對影像中的瑜伽姿勢進行分類,並在不同光線和距離條件下進行測試,系統在實驗中取得了99.6%的高準確率,展現了KNN在簡化計算量的情況下依然能保有高準確性的優勢。 5. **即時且多模式的姿勢矯正反饋機制**:當使用者的瑜伽姿勢不符合理想角度時,系統會提供語音或文字的即時反饋,無需頻繁查看螢幕。 7. **跨裝置適應的網頁應用程式**:讓使用者可以通過電腦或平板來執行瑜伽動作並接受反饋。 9. **針對各種環境條件進行測試和調整**:系統在不同光線(低亮度、高亮度、正常亮度)和距離條件下進行了測試。  ### 資料集 - 資料收集:研究中使用了攝影機來捕捉使用者在執行不同瑜伽姿勢時的影像數據。資料收集過程考慮了不同光照條件(低亮度、高亮度、正常亮度)以及不同攝影距離,以提高系統在各種環境下的適應性。 - 標籤與格式:資料被存儲為JSON格式,並且根據不同的姿勢類別進行標記。這些數據作為KNN分類器的訓練資料,使用PoseNet偵測的關鍵點坐標作為分類特徵。 - (0 - Mountain Pose, 1- Goddess Pose, 2-Plank Pose, and 3-Garland Pose) ### 架構 1. PoseNet:PoseNet模型負責從影像中偵測使用者的17個關鍵點,包含鼻子、眼睛、肩膀、肘部、臀部、膝蓋等,生成人體的骨架結構。 2. KNN分類器:透過PoseNet輸出的關鍵點,K最近鄰(KNN)分類器被用於將姿勢分類為特定的瑜伽動作(如山式、女神式等)。 3. 姿勢矯正模組:該模組根據每個關鍵點的角度計算誤差,並透過語音或文字提示用戶調整姿勢,例如抬高手臂或調整腿部位置。 4. 即時反饋系統:用戶透過網頁應用介面進行互動,系統在偵測到不正確姿勢時,會即時顯示或播放矯正建議,提供動態的練習反饋。  ### Yoga Pose Classification 1. K-Nearest Neighbours(KNN)算法概述: - 用途:KNN 算法可用於回歸和分類任務。在分類中,它會根據某點附近的其他點來預測該點的類別,而在回歸中則會根據鄰近點來估計一個數值。 - 特點:KNN 是「非參數」的,這意味著它不會假設數據的分佈方式,因此它適合於不確定分佈或分佈多變的數據集。 - 工作原理:KNN 會根據訓練集中與目標數據點距離最近的 K 個點來進行預測。 2. KNN 與加權模型的差異: - 不同於一些帶有權重參數的模型(例如神經網絡中的權重),KNN 只根據距離來判斷「鄰居」的類別。 - 這裡的 KNN 可能被設計為與神經網絡的輸出結合使用,將 logits(最終層未經激活的預測值)用於進一步分類。 3. Logits 層與姿勢分類: - Logits 層:神經網絡中分類的最後一層稱為 logits 層,會產生未激活的預測輸出。這些輸出值是實數,通常會在進行分類決策前進行激活處理(例如使用 softmax 函數)。 - 姿勢分類:在這個應用中,KNN 利用「女神式、山式、花環式和平板支撐」等四個姿勢的 logits 來訓練 KNN 分類器。即時生成的關鍵點信息被轉化為 logits 值,以便分類器學習姿勢。 4. 即時學習與 KNN 結合: - 系統可以根據用戶的動作生成即時關鍵點,通過神經網絡輸出相應的 logits 值,並使用 KNN 分類器進行即時姿勢分類。 ### Yoga Pose Correction 1. 角度計算:acos() 函數是用於計算兩向量之間的角度(弧度),該角度反映了兩個向量之間的空間方向。通過使用 acos() 將計算出的角度轉換為一個可以比較的角度範圍,用戶可以確保姿勢的正確性。 2. 角度範圍判斷:系統依據關節角度的不同範圍,向用戶提供反饋。範圍內的值不需調整;小於範圍的值提示增加角度,大於範圍的值則提示減小角度。   在該瑜伽動作的每個關節處都設定了指定的角度範圍。根據以下規則判斷角度的正確性: * 如果角度低於指定範圍,函數返回1 * 如果角度在指定範圍內,則返回0 * 如果角度超出指定範圍,則返回-1 ## 一些疑慮可行性及可能問題 ### 疑慮 如果輸入的是3D骨架數據,這篇論文的方法可能需要進行一些調整才能完全支持3D的輸入,原因如下: 1. PoseNet的限制:原文中使用的PoseNet模型主要針對2D平面偵測,並不支持3D空間中的關鍵點偵測。要處理3D骨架,您需要改用支援3D關鍵點偵測的模型,例如MediaPipe Holistic、OpenPose 3D或使用Microsoft Kinect等設備來獲取3D關鍵點。 2. 角度計算調整:角度計算模組需要改為支援三維空間中的關節角度計算,而不僅僅是2D平面的角度。例如,在3D空間中,需要考慮Z軸的深度資訊來計算更精確的關節角度。 3. 資料庫的正確姿勢存儲:若切換到3D,資料庫中的正確姿勢資料也需要更新為3D坐標,並加入適合3D空間的角度範圍以進行比較。這樣能夠有效檢測到3D方向上的姿勢偏差,提供更精確的矯正。 4. 模型調整:KNN分類器可支援3D數據,但需要進行重新訓練,讓它學習3D姿勢數據的特徵。這樣可以使模型能夠基於3D數據進行準確的姿勢分類。 總結來說,若將輸入改為3D骨架數據,整體系統是可以調整後接起來的,但需要從骨架偵測模型到數據庫及分類器都進行相應的升級與調整。 ### 可行性  以下是與 Yoga Pose Correction 相關的檔案及其簡單解釋: 1. correct.js 這個檔案負責處理瑜伽姿勢的修正邏輯。它使用 PoseNet 模型來檢測用戶的姿勢,並計算關鍵點之間的角度。根據這些角度,系統會提供修正建議,幫助用戶調整姿勢以達到正確的瑜伽姿勢。 2. correct.html 這是瑜伽姿勢修正模組的前端界面。它包含一個下拉選單,讓用戶選擇要練習的姿勢,並顯示相應的提示信息。用戶可以通過這個界面與 correct.js 進行互動。 3. classify.js 雖然這個檔案主要用於姿勢分類,但它也與姿勢修正有關。它使用 KNN 分類器來識別用戶的姿勢,並在用戶選擇的姿勢與實際姿勢不符時提供反饋。 4. classify.html 這是姿勢分類模組的前端界面,提供用戶選擇姿勢的功能,並顯示相應的圖像和分類結果。 5. collectData.js 這個檔案用於收集姿勢數據,並將其存儲到 data.json 中。這些數據可以用於訓練 KNN 模型,以提高姿勢識別的準確性。 如果你想將瑜伽姿勢修正的部分單獨拉出來,並在前面放置 3D 的 skeleton 輸入,這是可行的。你可以考慮以下步驟: 1. 整合 3D Skeleton 輸入: 你需要將 3D skeleton 的數據格式與現有的 PoseNet 數據格式進行整合,確保可以正確提取關鍵點。 2. 修改 correct.js: 在 correct.js 中,將姿勢檢測的邏輯調整為使用 3D skeleton 數據。這可能需要修改計算角度的邏輯,以適應 3D 空間中的關鍵點。 3. 更新前端界面: 在 correct.html 中,確保用戶可以選擇姿勢並查看 3D skeleton 的輸入。 4. 測試和調整: 在整合完成後,進行測試以確保系統能夠正確識別和修正姿勢。 這樣的改動需要一定的編程和數據處理能力,但從技術上來說是可行的。 --- ## 補充解釋 ### 關於資料集  這段 JSON 資料代表一個資料集,包含了多個樣本的特徵和標籤。以下是這段資料的主要結構和功能: dataset: 包含多個樣本的詳細資訊,每個樣本都有以下屬性: kept: 表示該樣本是否被保留。 isDisposedInternal: 內部是否已被處理。 shape: 樣本的形狀,這裡是二維的(例如 [291, 51])。 dtype: 數據類型,這裡是 float32。 size: 樣本的大小。 strides: 用於計算數據在內存中存儲的步幅。 dataId: 數據的唯一標識符。 id: 樣本的 ID。 rankType: 樣本的秩類型。 scopeId: 範圍 ID。 label: 樣本的標籤(例如 "MOUNTAIN"、"GODDESS" 等)。 tensors: 包含一組數值,這些數值可能是與樣本相關的特徵或輸出。這些數值的索引(如 "0", "1" 等)對應於樣本的特徵。 這段資料通常用於機器學習或深度學習模型的訓練,幫助模型學習如何根據特徵預測標籤。 1. JSON是一種輕量的數據交換格式,適合儲存大量的結構化數據,比如瑜伽姿勢的關鍵點坐標,便於模型使用。 2. Logit與張量(Tensor): - JSON文件包含了logit格式的數據。Logit是一組尚未進行softmax處理的數值(或稱分數),它代表每個姿勢分類前的「分數」。這些logit數據組成了稱為「張量」的數字矩陣,張量是深度學習中常用的數據結構。 - 這些數據會輸入到KNN模型中進行處理,以根據這些logit數據(分數)來決定影像中是哪一個瑜伽姿勢。 3. 分類和訓練過程: - KNN模型(以ml5.js程式庫實現)會使用這些logit數據進行姿勢分類。在模型內,logit數據通過softmax激活函數進行處理,將分數轉換為概率,並判斷哪個瑜伽姿勢的概率最大。 - 這些數據在不同的光照條件下收集(例如,強光、弱光、正常光),以增加KNN模型的泛化能力,使其能夠在多種環境下穩定運行。 ### Posenet #### PoseNet 的技術架構 ### 概述 PoseNet 是一個深度學習模型,用於估計人體姿勢。它可以從圖像或影片中檢測人體的主要關鍵點(例如頭部、肩膀、肘部、手腕、臀部、膝蓋、腳踝等位置),並透過這些關鍵點推斷出身體的姿勢。PoseNet 在單人和多人檢測上都可以使用,而且因為它是預先訓練好的模型,所以在許多應用中可以直接使用,例如健身動作分析、互動應用程式、遊戲等。 PoseNet 的一個優點是它不需要特殊的深度攝像頭設備,只需普通的RGB相機或手機攝像頭就能運行。這使得它很適合用於各種實時應用,例如手機APP、瀏覽器應用或嵌入式系統中的姿勢估計。 ### 其技術特點的詳細解析: 1. 特徵提取:使用 CNN 網絡進行圖像處理 PoseNet 使用 CNN 網絡(通常是輕量的骨幹網絡,如 MobileNet 或 ResNet)作為特徵提取器。CNN 在圖像中掃描和學習多層特徵,從簡單的邊緣到複雜的形狀結構,逐步分解圖像內容。 特徵提取的輸出是一組「特徵圖」,這些特徵圖保留了圖像的空間結構信息,是識別人體姿勢的基礎。 2. 關鍵點的熱力圖(Heatmap)生成 熱力圖的概念:PoseNet 會生成多張「熱力圖」,每張熱力圖對應人體的一個關鍵點(如鼻子、肩膀等)。這些熱力圖的像素值反映了每個關鍵點在圖像中的可能位置。 估算關鍵點位置:通過對熱力圖中值最高的點進行定位,可以估計該關鍵點的坐標。這樣的熱力圖可以準確定位每個關鍵點的位置,使 PoseNet 獲得人體骨架的基本輪廓。 3. 偏移向量(Offset Vectors)提高精度 偏移向量的作用:熱力圖的像素格子可能較大,使定位精度受限。為了解決這個問題,PoseNet 引入偏移向量,該向量表示熱力圖格點到實際關鍵點的偏移量。 結合偏移向量進行精確定位:在估算每個關鍵點時,PoseNet 通過疊加偏移向量進行坐標微調,從而提高了關鍵點定位的精度。 4. 骨架重建:將關鍵點連接成完整姿勢 骨架模型的構建:對於多人姿勢估計,PoseNet 利用特定的算法將各個關鍵點連接成多個骨架模型,確保每個人有一個完整的關節結構。 基於部位親和場(Part Affinity Fields, PAFs):多人模式下的骨架連接,PoseNet 會產生部位親和場,這是一種可以表達連接兩個關鍵點的矢量場。通過 PAFs,PoseNet 可以區分不同個體的關鍵點並將其連接成各自的骨架。 #### PoseNet 的技術優勢 即時性和輕量化:PoseNet 設計為能在移動設備和瀏覽器上運行,特別適合即時應用,像是健身、互動遊戲等場景。 無需標記點或專用設備:PoseNet 只需攝像頭即可實現姿勢估計,不需要傳統的穿戴式設備或標記點,這樣大大降低了應用的門檻。 靈活性:PoseNet 可以適應不同的姿勢估計場景,從單人姿勢到多人姿勢均可應用,這讓它具有多樣化的用途。 #### PoseNet 在論文中的應用細節 在論文中,PoseNet 的技術可能應用於: 即時姿勢估計:PoseNet 能在用戶動作的同時生成骨架,讓系統能即時分析姿勢。 數據處理與分析:PoseNet 可以提供用戶各個關節的精確坐標,這些數據可進一步用於姿勢評估、動作糾正、動作分類等。 後續的 KNN 分類:如論文提到的,PoseNet 可以先生成姿勢的關鍵點或 logits 值,再將這些數據輸入 KNN 模型,用於姿勢分類或識別。 #### 總結 PoseNet 的技術重點在於其簡單但有效的關鍵點檢測方法。通過 CNN 特徵提取、熱力圖與偏移向量生成以及骨架連接技術,PoseNet 提供了一種高效、低資源消耗的姿勢估計方式,適用於許多即時交互應用。論文中若進一步結合 KNN 或其他模型,可提升 PoseNet 的姿勢分類精度並擴展其應用場景。
×
Sign in
Email
Password
Forgot password
or
By clicking below, you agree to our
terms of service
.
Sign in via Facebook
Sign in via Twitter
Sign in via GitHub
Sign in via Dropbox
Sign in with Wallet
Wallet (
)
Connect another wallet
New to HackMD?
Sign up