資料介紹
描述
在這個項目中,我使用Edge Impulse Studio創建了一個深度學習模型來檢測大象的活動。訓練使用 3 軸加速度計和 3 軸陀螺儀數據。最終模型部署到 Arduino Nano 33 BLE Sense,并使用移動應用程序通過 BLE 連接顯示推理結果。
數據采集
我找不到任何可在公共領域自由使用的大象活動/運動/方向數據。我使用了一個Goat Sheep Dataset來訓練一個模型,該模型可以免費下載,并且可以與引用以下論文一起使用:
Jacob W. Kamminga、Helena C. Bisby、Duv V. Le、Nirvana Meratnia 和 Paul JM Havea。項圈標簽上的通用在線動物活動識別。在2017 年 ACM 普適和普適計算國際聯合會議 (UbiComp/ISWC'17) 論文集上。2017年 9 月
有關數據集鏈接,請參閱上面的論文。
他們收集了這個數據集,其中包含來自四只山羊和兩只綿羊的多個傳感器數據。這些動物的體型、體重和年齡各不相同,但屬于同一個山羊亞科。他們在每只動物身上隨機放置不同方向的傳感器。傳感器總是放在脖子上。白天,項圈容易繞著動物的脖子旋轉。所有傳感器均以 200 個樣本/秒的速度進行采樣。他們收集了以下運動傳感器:3 軸加速度計、3 軸高強度加速度計、3 軸陀螺儀、3 軸磁力計、溫度、氣壓。
我只使用了 3 軸加速度計和 3 軸陀螺儀數據。由于我計劃將模型部署到 Arduino Nano 33 BLE Sense(加速度計和陀螺儀的默認采樣率為 119 Hz),因此我必須刪除交替行以將數據保持在 100 個樣本/秒。
白天觀察到的活動是:躺著、站立、放牧、打架、搖晃、抓撓、走路、小跑和跑步。
我只選擇了以下 5 項與大象相關的活動。
躺著:動物躺在地上。
站立: 動物靜止不動,偶爾移動頭部或非常緩慢地邁步。
放牧:動物正在吃新鮮的草、一堆干草或地上的樹枝。
行走:動物在行走。
奔跑:動物在奔跑。
數據樣本
與其他活動相比,跑步活動的數據非常少。它出現了訓練數據集不平衡的問題。我將小跑(走得非常快)活動與跑步相結合來克服這個問題。
我創建了一個 Jupyter Notebook 來清理、過濾和生成數據采集格式的 json 文件,以將數據上傳到 Edge Impulse Studio。
示例 Json 文件(文件:running.S2_605.json)
生成文件名以制作示例的標簽,在本例中為運行.
{
"protected": {
"ver": "v1",
"alg": "HS256",
"iat": 1603881609.210776
},
"signature": "13b115654acabe82e12872097c66cbdaf46a3acce4c5eb863a0c50b171fa5a80",
"payload": {
"device_name": "" ,
"device_type": "ARDUINO_NANO33BLE",
"interval_ms": 10,
"sensors": [{
"name": "accX",
"units": "m/s2"
},
{
"name": "accY",
"units": "m/s2"
},
{
"name": "accZ",
"units": "m/s2"
},
{
"name": "gyrX",
"units": "d/s"
},
{
"name": "gyrY",
"units": "d/s"
},
{
"name": "gyrZ",
"units": "d/s"
}
],
"values": [
[
1.03669,
3.9241,
-4.20182,
-16.9512,
-4.87805,
-43.7195
],
[
0.567426,
4.97515,
-3.44286,
-14.878,
-10.7927,
-47.8659
],
[
0.292093,
5.95199,
-2.9329,
-16.2195,
-14.939,
-49.1463
],
[
0.141258,
6.84502,
-2.6575599999999997,
-17.8049,
-18.3537,
-45.0
],
[
0.23702600000000001,
7.62074,
-2.73418,
-17.2561,
-22.561,
-34.6341
],
[
0.5841850000000001,
8.22887,
-3.4811699999999997,
-13.1098,
-26.3415,
-20.7317
],
[
1.13006,
8.781930000000001,
-4.69264,
-3.04878,
-24.6341,
-7.195119999999999
],
[
5.18345,
6.75404,
-7.54413,
-99.2073,
26.2805,
-17.5
]
]
}
}
數據上傳
將數據上傳到 Edge Impulse 有多種方法,但我使用了 CLI,我覺得這很方便。但首先我們需要在 Edge Impulse Studio 中創建一個帳戶,并且需要復制 HMAC KEY,它可以在 Dashboard > Keys 選項卡中找到,如下所示。
Edge Impulse CLI 安裝
$ npm insall -g edge-impulse-cli
上傳到 Edge Impulse
將目錄更改為生成的 json 文件所在的路徑,然后執行以下命令。命令行有一個參數--category split ,它會自動將數據拆分為訓練和測試數據集。
$ edge-impulse-uploader --category split *.json
成功上傳數據后,我們可以在 Edge Impulse Studio 的 Data Acquisition 選項卡中看到它們,如下所示。
訓練數據(4h 19m 34s):
測試數據(56m 8s):
數據是平衡的(80% 訓練對 20% 測試),因此我們不需要任何操作,否則我們可以手動拆分數據并可以移動到任一側。
沖動設計
在 Edge Impulse 工作室中,在開始訓練之前,我們必須設計一個 Impulse,它是一組預處理塊和神經網絡分類器。我設計了 Impulse 使用信號分析作為預處理塊,它從原始數據和深度神經網絡分類器生成特征,如下所示。
特征生成
要生成特征,我們必須轉到 Spectral Features 選項卡,我們可以在那里配置許多可用選項。一開始我選擇了默認配置,在每次訓練迭代后,根據實現的模型精度,我必須返回此選項卡并重新配置選項并重新生成特征。下面是我最終模型的配置。我選擇了具有 9 Hz 截止頻率和 256 FFT 長度的低通濾波器,具有 6 個峰值和 0.2 個峰值閾值。
設置好上面的參數后,頁面會自動重定向到生成功能頁面,我們可以在其中啟動作業來完成任務。完成后,我們可以使用 Feature Explorer 通過鼠標指針拖動圖像來查看不同 3D 方向的數據。下面是最終模型生成的特征圖的圖像。
神經網絡分類器
現在我們需要在 NN Classifier 選項卡中創建一個神經網絡分類器。我們可以使用默認的可視模式添加多層深度神經網絡,也可以使用專家模式直接編寫代碼來創建 Keras 模型。我使用了專家模式,因為我想要創建的模型需要一些在可視模式下不可用的層,并且我還包含了一些自定義代碼來配置學習率并打印一些調試消息。下面是分類器頁面的截圖:
模型摘要
該模型有 1 個輸入層、12 個全連接密集隱藏層和 1 個輸出層。每個隱藏層都有 Activation、Dropout 和 BatchNormalization 層。以下是從 Edge Impulse 最終培訓課程中摘錄的模型摘要。
Model: "sequential"
_________________________________________________________________
Layer (type) Output Shape Param #
=================================================================
dense (Dense) (None, 64) 6592
_________________________________________________________________
batch_normalization (BatchNo (None, 64) 256
_________________________________________________________________
activation (Activation) (None, 64) 0
_________________________________________________________________
dropout (Dropout) (None, 64) 0
_________________________________________________________________
dense_1 (Dense) (None, 64) 4160
_________________________________________________________________
batch_normalization_1 (Batch (None, 64) 256
_________________________________________________________________
activation_1 (Activation) (None, 64) 0
_________________________________________________________________
dropout_1 (Dropout) (None, 64) 0
_________________________________________________________________
dense_2 (Dense) (None, 64) 4160
_________________________________________________________________
batch_normalization_2 (Batch (None, 64) 256
_________________________________________________________________
activation_2 (Activation) (None, 64) 0
_________________________________________________________________
dropout_2 (Dropout) (None, 64) 0
_________________________________________________________________
dense_3 (Dense) (None, 64) 4160
_________________________________________________________________
batch_normalization_3 (Batch (None, 64) 256
_________________________________________________________________
activation_3 (Activation) (None, 64) 0
_________________________________________________________________
dropout_3 (Dropout) (None, 64) 0
_________________________________________________________________
dense_4 (Dense) (None, 64) 4160
_________________________________________________________________
batch_normalization_4 (Batch (None, 64) 256
_________________________________________________________________
activation_4 (Activation) (None, 64) 0
_________________________________________________________________
dropout_4 (Dropout) (None, 64) 0
_________________________________________________________________
dense_5 (Dense) (None, 64) 4160
_________________________________________________________________
batch_normalization_5 (Batch (None, 64) 256
_________________________________________________________________
activation_5 (Activation) (None, 64) 0
_________________________________________________________________
dropout_5 (Dropout) (None, 64) 0
_________________________________________________________________
dense_6 (Dense) (None, 32) 2080
_________________________________________________________________
batch_normalization_6 (Batch (None, 32) 128
_________________________________________________________________
activation_6 (Activation) (None, 32) 0
_________________________________________________________________
dropout_6 (Dropout) (None, 32) 0
_________________________________________________________________
dense_7 (Dense) (None, 32) 1056
_________________________________________________________________
batch_normalization_7 (Batch (None, 32) 128
_________________________________________________________________
activation_7 (Activation) (None, 32) 0
_________________________________________________________________
dropout_7 (Dropout) (None, 32) 0
_________________________________________________________________
dense_8 (Dense) (None, 32) 1056
_________________________________________________________________
batch_normalization_8 (Batch (None, 32) 128
_________________________________________________________________
activation_8 (Activation) (None, 32) 0
_________________________________________________________________
dropout_8 (Dropout) (None, 32) 0
_________________________________________________________________
dense_9 (Dense) (None, 32) 1056
_________________________________________________________________
batch_normalization_9 (Batch (None, 32) 128
_________________________________________________________________
activation_9 (Activation) (None, 32) 0
_________________________________________________________________
dropout_9 (Dropout) (None, 32) 0
_________________________________________________________________
dense_10 (Dense) (None, 32) 1056
_________________________________________________________________
batch_normalization_10 (Batc (None, 32) 128
_________________________________________________________________
activation_10 (Activation) (None, 32) 0
_________________________________________________________________
dropout_10 (Dropout) (None, 32) 0
_________________________________________________________________
dense_11 (Dense) (None, 32) 1056
_________________________________________________________________
batch_normalization_11 (Batc (None, 32) 128
_________________________________________________________________
activation_11 (Activation) (None, 32) 0
_________________________________________________________________
dropout_11 (Dropout) (None, 32) 0
_________________________________________________________________
y_pred (Dense) (None, 5) 165
=================================================================
Total params: 37,221 Trainable params: 36,069 Non-trainable params: 1,152
現在我們可以點擊訓練按鈕并等待它完成。
訓練數據的驗證準確性
我在訓練驗證數據上獲得了95.2%的準確率。
測試數據的驗證準確性
我在測試數據上獲得了85.64%的準確率,這是非常有希望的。
部署
我已將使用 Arduino 庫創建的模型部署到 Arduino Nano 33 BLE Sense。Edge Impulse Studio 創建 Arduino 庫包,可以下載并導入 Arduino IDE。我使用了加速度計(連續)示例之一,并對其進行了定制以讀取加速度計和陀螺儀數據。我使用 Flutter 開發了一個移動應用程序,用于通過 BLE 連接連接 Arduino Nano 33 BLE Sense 并顯示推理結果。
結論
經過多次迭代和參數調整,模型已經達到了很高的準確性。盡管訓練數據取自 Goat/Sheep 數據集,但該模型是通用的,并且對于跟蹤大象的運動肯定有用。如果我們可以使用大象項圈收集更多數據并使用遷移學習重新訓練模型,則模型可以實現更高的準確度。所有代碼和說明都在 GitHub 存儲庫中提供,可以在最后的代碼部分找到。我在 Edge Impulse 的項目是Naveen/elephant_edge_v3。我要感謝 Edge Impulse 的人們,他們在 Edge Impulse 論壇上回答了我的問題并幫助解決了問題。
- 使用Edge Impulse關鍵字識別控制筆記本電腦
- 帶有M5Stack和Edge Impulse的手勢控制無人機
- 使用Edge Impulse和Nvidia Jetson的面罩檢測器
- 使用XIAO BLE Sense&Edge Impulse的寵物活動追蹤器
- 在MaaXBoard Mini上使用Edge Impulse進行安全帽檢測
- 使用Edge Impulse在pico上進行手勢識別
- 通過Edge Impulse開始使用TinyML
- 使用Edge Impulse的Covid患者健康評估設備
- 修補Edge Impulse為MCU創建圖像、音頻和運動分類模型
- 如何安裝和運行osxMotionAR活動識別庫 1次下載
- RF9812四頻帶EDGE+TD-SCDMA多模傳輸模塊的應用和數據資料免費下載
- 基于TQM7M5050下的Quad-Band GSM/EDGE 5x3.5 PAM
- 基于TQM7M5013下的 Quad-Band Input Power Controlled EDGE PAM
- 基于達芬奇技術設計的日面活動圖像處理與識別系統詳細中文資料 0次下載
- IMPULSE 200(IGBT)逆變電焊機
- 利用OpenVINO部署GLM-Edge系列SLM模型 872次閱讀
- Google AI Edge Torch的特性詳解 445次閱讀
- 如何使用NVIDIA DeepStream和Edge Impulse快速推進計算機視覺部署 781次閱讀
- 基于XIAO的圖像分類處理項目 1428次閱讀
- 基于Arduino的機器學習開發 1.9w次閱讀
- 如何在Ubuntu 22.04上安裝Microsoft Edge瀏覽器 1.2w次閱讀
- 陀螺儀在人體活動識別系統中的應用 2285次閱讀
- 如何使用移動傳感器產生的原始數據來識別人類活動 1230次閱讀
- 如何制作一個健身運動手環 5431次閱讀
- Edge瀏覽器復制粘貼出錯的原因和方法 7203次閱讀
- Firefox瀏覽器市場份額下降,微軟Edge或將在本月超越Firefox 2783次閱讀
- 體育館人臉識別系統的應用案例 2312次閱讀
- 屏下指紋識別技術方案及屏下指紋識別技術相關廠商匯總 1.1w次閱讀
- “共享開發板”活動上線! 5081次閱讀
- 手指靜脈識別技術分析及流程 1329次閱讀
下載排行
本周
- 1山景DSP芯片AP8248A2數據手冊
- 1.06 MB | 532次下載 | 免費
- 2RK3399完整板原理圖(支持平板,盒子VR)
- 3.28 MB | 339次下載 | 免費
- 3TC358743XBG評估板參考手冊
- 1.36 MB | 330次下載 | 免費
- 4DFM軟件使用教程
- 0.84 MB | 295次下載 | 免費
- 5元宇宙深度解析—未來的未來-風口還是泡沫
- 6.40 MB | 227次下載 | 免費
- 6迪文DGUS開發指南
- 31.67 MB | 194次下載 | 免費
- 7元宇宙底層硬件系列報告
- 13.42 MB | 182次下載 | 免費
- 8FP5207XR-G1中文應用手冊
- 1.09 MB | 178次下載 | 免費
本月
- 1OrCAD10.5下載OrCAD10.5中文版軟件
- 0.00 MB | 234315次下載 | 免費
- 2555集成電路應用800例(新編版)
- 0.00 MB | 33566次下載 | 免費
- 3接口電路圖大全
- 未知 | 30323次下載 | 免費
- 4開關電源設計實例指南
- 未知 | 21549次下載 | 免費
- 5電氣工程師手冊免費下載(新編第二版pdf電子書)
- 0.00 MB | 15349次下載 | 免費
- 6數字電路基礎pdf(下載)
- 未知 | 13750次下載 | 免費
- 7電子制作實例集錦 下載
- 未知 | 8113次下載 | 免費
- 8《LED驅動電路設計》 溫德爾著
- 0.00 MB | 6656次下載 | 免費
總榜
- 1matlab軟件下載入口
- 未知 | 935054次下載 | 免費
- 2protel99se軟件下載(可英文版轉中文版)
- 78.1 MB | 537798次下載 | 免費
- 3MATLAB 7.1 下載 (含軟件介紹)
- 未知 | 420027次下載 | 免費
- 4OrCAD10.5下載OrCAD10.5中文版軟件
- 0.00 MB | 234315次下載 | 免費
- 5Altium DXP2002下載入口
- 未知 | 233046次下載 | 免費
- 6電路仿真軟件multisim 10.0免費下載
- 340992 | 191187次下載 | 免費
- 7十天學會AVR單片機與C語言視頻教程 下載
- 158M | 183279次下載 | 免費
- 8proe5.0野火版下載(中文版免費下載)
- 未知 | 138040次下載 | 免費
評論
查看更多