日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

简单的机器学习程序_人体动作识别小程序【机器学习 人工智能】

發(fā)布時間:2023/12/20 编程问答 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 简单的机器学习程序_人体动作识别小程序【机器学习 人工智能】 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

人體動作識別(Human activity recognition)是健康領(lǐng)域一個熱點問題,它通過加速度計,陀螺儀等傳感器記錄人體運(yùn)動數(shù)據(jù),對人體動作進(jìn)行識別。最近用微信小程序做了一個動作識別的項目,同時嘗試部署了單片機(jī)。首先奉上b站的視頻鏈接,里面詳細(xì)介紹了項目的思路和代碼:https://b23.tv/4VRvff

下面我將這個過程分成以下幾部分給大家進(jìn)行講解:

1.數(shù)據(jù)收集

人體動作的數(shù)據(jù)是通過手機(jī)內(nèi)部自帶的六軸傳感器收集的,借助于微信小程序的API可以直接調(diào)用。

其中蹲起的數(shù)據(jù)采集頁面如下圖所示:

右手持手機(jī),點擊“開始讀取”后,開始做深蹲,加速度軸和陀螺儀的實時數(shù)據(jù)會在數(shù)據(jù)框內(nèi)顯示。做完動作后點擊存儲,會將采集的數(shù)據(jù)上傳到微信自帶的云數(shù)據(jù)庫,并且關(guān)閉加速度計和陀螺儀。

我們將每個動作分為不同的document,每個實驗者作為一個record,在數(shù)據(jù)庫中進(jìn)行存儲。每條record由六個軸的六個數(shù)組、時間戳數(shù)組和用戶的其他信息組成,數(shù)組長度約為采樣頻率f*采樣總時間,大約是700。

將數(shù)據(jù)導(dǎo)出成JSON或csv文件之后便可以開始信號處理了。

2.信號處理

2.1濾波

本部分中的信號處理是通過python中的signal包來完成。

將csv文件導(dǎo)入到python中,將數(shù)組長度統(tǒng)一為700。首先我們可以先直觀地感受一下數(shù)據(jù):

plt

展示出六個軸的數(shù)據(jù),可以看出某些軸的數(shù)據(jù)是有明顯的周期性的,但是噪聲較多,需要進(jìn)行濾波處理。

首先使用中值濾波器,這可以通過signal包中的medfilt函數(shù)來完成:

#中值濾波

然后是巴特沃斯濾波器,同樣是使用signal包中的函數(shù)來完成:

# butterworth濾波器

2.2數(shù)據(jù)切割

數(shù)據(jù)經(jīng)過濾波之后在圖像上的體現(xiàn)是變得更加平滑,濾掉了高頻的噪音,此時我們將數(shù)據(jù)進(jìn)行切割:設(shè)定一個時間窗口,以及一個overlap的比例,將數(shù)據(jù)切分成許多小段。這樣就增加了樣本的數(shù)量,滿足機(jī)器學(xué)習(xí)需要的數(shù)據(jù)量。

2.3特征提取

注意,通過微信小程序提取的數(shù)據(jù)為時間序列,本身不能作為輸入直接喂給機(jī)器學(xué)習(xí)模型,而是需要從中提取一些特征,作為輸入向量。此處我們首先將數(shù)據(jù)進(jìn)行了快速傅里葉變換,計算功率譜密度、自相關(guān)函數(shù),在此基礎(chǔ)上得到了時間序列的特征向量。將以上功能封裝到一個函數(shù)中:

def

當(dāng)我們將時域數(shù)據(jù)轉(zhuǎn)換到頻域數(shù)據(jù)上之后,便可以提取特征,使用分類器進(jìn)行建模。提取特征的常用方法可以是信號的頻率分量以及在此分量上的振幅。

3.模型構(gòu)建

數(shù)據(jù)的處理工作完成之后就要開始機(jī)器學(xué)習(xí)的核心部分:模型訓(xùn)練了。此處我們用python強(qiáng)大的機(jī)器學(xué)習(xí)第三方包:sklearn來完成這一部分的工作。

3.1模型選擇

機(jī)器學(xué)習(xí)模型眾多,如何選擇一個適合自己的呢?在此我們選擇了一些常用的機(jī)器學(xué)習(xí)模型,查看它們在此數(shù)據(jù)集上的表現(xiàn)。

首先構(gòu)建一個裝有模型的字典:

dict_classifiers

然后,我們可以在此字典和每個分類器上迭代:

  • 訓(xùn)練分類器.fit(X_train, Y_train)
  • 評估分類器在訓(xùn)練集中的性能.score(X_train, Y_train)
  • 評估分類器在測試集上的性能.score(X_test, Y_test)
  • 記錄訓(xùn)練分類器所需的時間。
  • 將訓(xùn)練模型、訓(xùn)練分?jǐn)?shù)、測試分?jǐn)?shù)和訓(xùn)練時間保存到字典中。如有必要,此字典可以使用 Python 的pickle模塊保存。
def

最終結(jié)果如下所示:

可以發(fā)現(xiàn),Gradient Boosting算法效果是最好的,同時訓(xùn)練時間也最長,高達(dá)88秒;表現(xiàn)最不好的是SVM;訓(xùn)練時間最短的是Native Bayes。

通過模型的訓(xùn)練與對比,結(jié)合我們自身的需求,選擇最為合適的模型進(jìn)行參數(shù)調(diào)優(yōu)。考慮到本項目后期需要部署JS,因此需要在算法的復(fù)雜程度和準(zhǔn)確率之間取舍,此處我選擇MLP(多層神經(jīng)網(wǎng)絡(luò))作為最終的模型。

3.2超參數(shù)調(diào)優(yōu)

當(dāng)選擇好合適的模型之后,我們就需要調(diào)整模型的參數(shù),使其表現(xiàn)的最好,這就是超參數(shù)調(diào)優(yōu)。MLP模型的參數(shù)主要有:激活函數(shù)、學(xué)習(xí)率

、隱藏層數(shù)、隱藏層神經(jīng)元個數(shù)。通過循環(huán)遍歷的方式進(jìn)行超參數(shù)調(diào)優(yōu):MLP_params

可以看出,當(dāng)激活函數(shù)relu,alpha=1,隱藏層神經(jīng)元個數(shù)為100時,MLP模型表現(xiàn)是最好的;同時relu函數(shù)運(yùn)算較快,100個神經(jīng)元大小適中,用來部署JS較為合適。

模型訓(xùn)練好后,用sklearn自帶的函數(shù)輸出權(quán)重矩陣和偏置向量,保存到csv文件中,便于后續(xù)模型的部署。

對于大部分的機(jī)器學(xué)習(xí)教程而言,模型訓(xùn)練完之后就算是萬事大吉了,但我們的目標(biāo)是最終做出一個能用于實際生活的小程序,因此還需要進(jìn)行模型的部署。

4.模型部署

4.1小程序部署

我們將上面保存好的csv文件復(fù)制到小程序的js里,對六軸到的數(shù)據(jù)進(jìn)行計算。通過幾次實驗發(fā)現(xiàn),由于安卓系統(tǒng)傳感器采集數(shù)據(jù)的頻率較低,因此濾波對本數(shù)據(jù)集的影響不大。同時因為時間前后的相關(guān)性,不對序列進(jìn)行特征提取,直接將序列喂給模型也能達(dá)到同樣的準(zhǔn)確率。

每隔2秒鐘對數(shù)據(jù)進(jìn)行一次分類,js代碼就是根據(jù)MLP的原理進(jìn)行矩陣的乘法,此處不再贅述。

4.2單片機(jī)部署

由于近些年來手環(huán)的興起,因此我也嘗試部署了單片機(jī)。這里模型比較龐大,即便是功能強(qiáng)大的STC8A8K系列的單片機(jī)也只有64KB的內(nèi)存,是遠(yuǎn)遠(yuǎn)不夠的,需要進(jìn)行內(nèi)存擴(kuò)展。此處給出我的老師提供的一種方案:

按照上述方案,我使用了洞洞板+單片機(jī)的方式進(jìn)行了連接,洞洞板上是內(nèi)存擴(kuò)展芯片,另一塊板子是做其他項目時用到的,這里只用到了它的單片機(jī):

十分凌亂,大家實驗沒問題之后還是用PCB打樣吧。。。

最終我通過離線的方式,測試準(zhǔn)確率達(dá)到了70%,實現(xiàn)了單片機(jī)的部署。

寫在最后

本文從零開始實現(xiàn)了一個能夠落地的人工智能項目,同時部署到小程序端可以實現(xiàn)離線識別,擺脫了對網(wǎng)絡(luò)的依賴。

非常感謝大家的耐心閱讀,我也是一名正在學(xué)習(xí)中的大二學(xué)生,所寫內(nèi)容如有不當(dāng)之處歡迎大家批評指正。

創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎勵來咯,堅持創(chuàng)作打卡瓜分現(xiàn)金大獎

總結(jié)

以上是生活随笔為你收集整理的简单的机器学习程序_人体动作识别小程序【机器学习 人工智能】的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。