電子發(fā)燒友App

硬聲App

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示
創(chuàng)作
電子發(fā)燒友網(wǎng)>電子資料下載>電子資料>使用Edge Impulse識別大象活動

使用Edge Impulse識別大象活動

2022-11-02 | zip | 0.08 MB | 次下載 | 免費

資料介紹

描述

在這個項目中,我使用Edge Impulse Studio創(chuàng)建了一個深度學習模型檢測大象的活動。訓練使用 3 軸加速度計和 3 軸陀螺儀數(shù)據(jù)。最終模型部署到 Arduino Nano 33 BLE Sense,并使用移動應(yīng)用程序通過 BLE 連接顯示推理結(jié)果。

數(shù)據(jù)采集

我找不到任何可在公共領(lǐng)域自由使用的大象活動/運動/方向數(shù)據(jù)。我使用了一個Goat Sheep Dataset來訓練一個模型,該模型可以免費下載,并且可以與引用以下論文一起使用:

Jacob W. Kamminga、Helena C. Bisby、Duv V. Le、Nirvana Meratnia 和 Paul JM Havea。項圈標簽上的通用在線動物活動識別。2017 年 ACM 普適和普適計算國際聯(lián)合會議 (UbiComp/ISWC'17) 論文集上。2017年 9 月

有關(guān)數(shù)據(jù)集鏈接,請參閱上面的論文。

他們收集了這個數(shù)據(jù)集,其中包含來自四只山羊和兩只綿羊的多個傳感器數(shù)據(jù)。這些動物的體型、體重和年齡各不相同,但屬于同一個山羊亞科。他們在每只動物身上隨機放置不同方向的傳感器。傳感器總是放在脖子上。白天,項圈容易繞著動物的脖子旋轉(zhuǎn)。所有傳感器均以 200 個樣本/秒的速度進行采樣。他們收集了以下運動傳感器:3 軸加速度計、3 軸高強度加速度計、3 軸陀螺儀、3 軸磁力計、溫度、氣壓。

我只使用了 3 軸加速度計和 3 軸陀螺儀數(shù)據(jù)。由于我計劃將模型部署到 Arduino Nano 33 BLE Sense(加速度計和陀螺儀的默認采樣率為 119 Hz),因此我必須刪除交替行以將數(shù)據(jù)保持在 100 個樣本/秒。

白天觀察到的活動是:躺著、站立、放牧、打架、搖晃、抓撓、走路、小跑和跑步。

我只選擇了以下 5 項與大象相關(guān)的活動。

躺著:動物躺在地上。

站立: 動物靜止不動,偶爾移動頭部或非常緩慢地邁步。

放牧:動物正在吃新鮮的草、一堆干草或地上的樹枝。

行走:動物在行走。

奔跑:動物在奔跑。

數(shù)據(jù)樣本

pYYBAGNh0K2AUjP3AAHSM5_YNqM300.png
?

與其他活動相比,跑步活動的數(shù)據(jù)非常少。它出現(xiàn)了訓練數(shù)據(jù)集不平衡的問題。我將小跑(走得非??欤┗顒优c跑步相結(jié)合來克服這個問題。

我創(chuàng)建了一個 Jupyter Notebook 來清理、過濾和生成數(shù)據(jù)采集格式的 json 文件,以將數(shù)據(jù)上傳到 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
			]
		]
	}
}

數(shù)據(jù)上傳

將數(shù)據(jù)上傳到 Edge Impulse 有多種方法,但我使用了 CLI,我覺得這很方便。但首先我們需要在 Edge Impulse Studio 中創(chuàng)建一個帳戶,并且需要復(fù)制 HMAC KEY,它可以在 Dashboard > Keys 選項卡中找到,如下所示。

poYBAGNh0LCAIQjXAAFeWlOf6Ro149.png
?

Edge Impulse CLI 安裝

$ npm insall -g edge-impulse-cli

上傳到 Edge Impulse

將目錄更改為生成的 json 文件所在的路徑,然后執(zhí)行以下命令。命令行有一個參數(shù)--category split ,它會自動將數(shù)據(jù)拆分為訓練和測試數(shù)據(jù)集。

$ edge-impulse-uploader --category split *.json

成功上傳數(shù)據(jù)后,我們可以在 Edge Impulse Studio 的 Data Acquisition 選項卡中看到它們,如下所示。

訓練數(shù)據(jù)(4h 19m 34s):

pYYBAGNh0LSARtIYAAFZqqkD9H0291.png
?

測試數(shù)據(jù)(56m 8s):

poYBAGNh0LeAfrJEAAF_pPj_f3w834.png
?

數(shù)據(jù)是平衡的(80% 訓練對 20% 測試),因此我們不需要任何操作,否則我們可以手動拆分數(shù)據(jù)并可以移動到任一側(cè)。

沖動設(shè)計

在 Edge Impulse 工作室中,在開始訓練之前,我們必須設(shè)計一個 Impulse,它是一組預(yù)處理塊和神經(jīng)網(wǎng)絡(luò)分類器。我設(shè)計了 Impulse 使用信號分析作為預(yù)處理塊,它從原始數(shù)據(jù)和深度神經(jīng)網(wǎng)絡(luò)分類器生成特征,如下所示。

pYYBAGNh0LuAd3NMAAJe3Po52LA063.png
?

特征生成

要生成特征,我們必須轉(zhuǎn)到 Spectral Features 選項卡,我們可以在那里配置許多可用選項。一開始我選擇了默認配置,在每次訓練迭代后,根據(jù)實現(xiàn)的模型精度,我必須返回此選項卡并重新配置選項并重新生成特征。下面是我最終模型的配置。我選擇了具有 9 Hz 截止頻率和 256 FFT 長度的低通濾波器,具有 6 個峰值和 0.2 個峰值閾值。

poYBAGNh0L2AW4hQAAHjrT1FLoI058.png
?

設(shè)置好上面的參數(shù)后,頁面會自動重定向到生成功能頁面,我們可以在其中啟動作業(yè)來完成任務(wù)。完成后,我們可以使用 Feature Explorer 通過鼠標指針拖動圖像來查看不同 3D 方向的數(shù)據(jù)。下面是最終模型生成的特征圖的圖像。

pYYBAGNh0MCAC1X9AAFa5ry5ACA416.png
?

神經(jīng)網(wǎng)絡(luò)分類器

現(xiàn)在我們需要在 NN Classifier 選項卡中創(chuàng)建一個神經(jīng)網(wǎng)絡(luò)分類器。我們可以使用默認的可視模式添加多層深度神經(jīng)網(wǎng)絡(luò),也可以使用專家模式直接編寫代碼來創(chuàng)建 Keras 模型。我使用了專家模式,因為我想要創(chuàng)建的模型需要一些在可視模式下不可用的層,并且我還包含了一些自定義代碼來配置學習率并打印一些調(diào)試消息。下面是分類器頁面的截圖:

poYBAGNh0MOAVNvTAAGGnYdrJk8888.png
?

模型摘要

該模型有 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

現(xiàn)在我們可以點擊訓練按鈕并等待它完成。

訓練數(shù)據(jù)的驗證準確性

在訓練驗證數(shù)據(jù)上獲得了95.2%的準確率。

poYBAGNh0MaAPXzuAAENO-VjI_I496.png
?

測試數(shù)據(jù)的驗證準確性

我在測試數(shù)據(jù)上獲得了85.64%的準確率,這是非常有希望的。

pYYBAGNh0MqATAWMAAGyOGKv5a4220.png
?

部署

我已將使用 Arduino 庫創(chuàng)建的模型部署到 Arduino Nano 33 BLE Sense。Edge Impulse Studio 創(chuàng)建 Arduino 庫包,可以下載并導(dǎo)入 Arduino IDE。我使用了加速度計(連續(xù))示例之一,并對其進行了定制以讀取加速度計和陀螺儀數(shù)據(jù)。我使用 Flutter 開發(fā)了一個移動應(yīng)用程序,用于通過 BLE 連接連接 Arduino Nano 33 BLE Sense 并顯示推理結(jié)果。

結(jié)論

經(jīng)過多次迭代和參數(shù)調(diào)整,模型已經(jīng)達到了很高的準確性。盡管訓練數(shù)據(jù)取自 Goat/Sheep 數(shù)據(jù)集,但該模型是通用的,并且對于跟蹤大象的運動肯定有用。如果我們可以使用大象項圈收集更多數(shù)據(jù)并使用遷移學習重新訓練模型,則模型可以實現(xiàn)更高的準確度。所有代碼和說明都在 GitHub 存儲庫中提供,可以在最后的代碼部分找到。我在 Edge Impulse 的項目是Naveen/elephant_edge_v3。我要感謝 Edge Impulse 的人們,他們在 Edge Impulse 論壇上回答了我的問題并幫助解決了問題。


下載該資料的人也在下載 下載該資料的人還在閱讀
更多 >

評論

查看更多

下載排行

本周

  1. 1山景DSP芯片AP8248A2數(shù)據(jù)手冊
  2. 1.06 MB  |  532次下載  |  免費
  3. 2RK3399完整板原理圖(支持平板,盒子VR)
  4. 3.28 MB  |  339次下載  |  免費
  5. 3TC358743XBG評估板參考手冊
  6. 1.36 MB  |  330次下載  |  免費
  7. 4DFM軟件使用教程
  8. 0.84 MB  |  295次下載  |  免費
  9. 5元宇宙深度解析—未來的未來-風口還是泡沫
  10. 6.40 MB  |  227次下載  |  免費
  11. 6迪文DGUS開發(fā)指南
  12. 31.67 MB  |  194次下載  |  免費
  13. 7元宇宙底層硬件系列報告
  14. 13.42 MB  |  182次下載  |  免費
  15. 8FP5207XR-G1中文應(yīng)用手冊
  16. 1.09 MB  |  178次下載  |  免費

本月

  1. 1OrCAD10.5下載OrCAD10.5中文版軟件
  2. 0.00 MB  |  234315次下載  |  免費
  3. 2555集成電路應(yīng)用800例(新編版)
  4. 0.00 MB  |  33566次下載  |  免費
  5. 3接口電路圖大全
  6. 未知  |  30323次下載  |  免費
  7. 4開關(guān)電源設(shè)計實例指南
  8. 未知  |  21549次下載  |  免費
  9. 5電氣工程師手冊免費下載(新編第二版pdf電子書)
  10. 0.00 MB  |  15349次下載  |  免費
  11. 6數(shù)字電路基礎(chǔ)pdf(下載)
  12. 未知  |  13750次下載  |  免費
  13. 7電子制作實例集錦 下載
  14. 未知  |  8113次下載  |  免費
  15. 8《LED驅(qū)動電路設(shè)計》 溫德爾著
  16. 0.00 MB  |  6656次下載  |  免費

總榜

  1. 1matlab軟件下載入口
  2. 未知  |  935054次下載  |  免費
  3. 2protel99se軟件下載(可英文版轉(zhuǎn)中文版)
  4. 78.1 MB  |  537798次下載  |  免費
  5. 3MATLAB 7.1 下載 (含軟件介紹)
  6. 未知  |  420027次下載  |  免費
  7. 4OrCAD10.5下載OrCAD10.5中文版軟件
  8. 0.00 MB  |  234315次下載  |  免費
  9. 5Altium DXP2002下載入口
  10. 未知  |  233046次下載  |  免費
  11. 6電路仿真軟件multisim 10.0免費下載
  12. 340992  |  191187次下載  |  免費
  13. 7十天學會AVR單片機與C語言視頻教程 下載
  14. 158M  |  183279次下載  |  免費
  15. 8proe5.0野火版下載(中文版免費下載)
  16. 未知  |  138040次下載  |  免費