資料介紹
描述
是否有可能在一個簡單的 4 美元 MCU 上制作一個人工智能驅動的系統來預測變速箱故障?如何自動構建不需要任何額外壓縮的緊湊模型?非數據科學家能否成功實施此類項目?
我將在我的新項目中回答所有這些問題。
介紹和業務約束
在工業(例如,風力發電、汽車)中,變速箱通常在隨機速度變化下運行。狀態監測系統有望檢測故障、斷齒狀態,并使用在不同速度曲線下收集的振動信號評估其嚴重程度。
現代汽車有數十萬個細節和系統,需要預測故障、控制溫度、壓力等狀態。因此,在汽車行業,創建和嵌入能夠正常運行的 TinyML 模型至關重要在傳感器上開辟了一系列技術優勢,例如:
- 互聯網獨立
- 在數據傳輸上不浪費能源和金錢
- 高級隱私和安全性
在我的實驗中,我想展示如何輕松創建這樣的技術原型,以普及 TinyML 方法并將其令人難以置信的功能用于汽車行業。
使用的技術
- Neuton TinyML:Neuton,我選擇了這個解決方案,因為它可以免費使用,并且可以自動創建微型機器學習模型,甚至可以部署在 8 位 MCU 上。根據 Neuton 開發人員的說法,您可以在一次迭代中創建一個緊湊的模型,而無需壓縮。
- Raspberry Pi Pico:該芯片采用兩個 ARM Cortex-M0 + 內核,133 兆赫,安裝在芯片上時還與 256 KB 的 RAM 配對。該器件支持高達 16 MB 的片外閃存,具有一個 DMA 控制器,包括兩個 UART 和兩個 SPI,以及兩個 I2C 和一個 USB 1.1 控制器。該器件接收16個PWM通道和30個GPIO針,其中4個適合模擬數據輸入。并帶有4 美元的凈價格標簽。
![poYBAGNYsgmARSvYAAC8PSS3C88786.png](https://file.elecfans.com/web2/M00/73/6A/poYBAGNYsgmARSvYAAC8PSS3C88786.png)
讓我們構建它
本教程的目標是演示如何輕松構建緊湊的 ML 模型來解決多類分類任務,以檢測齒輪箱中的斷齒狀況。
數據集描述
變速箱故障診斷數據集包括使用 SpectraQuest 的變速箱故障診斷模擬器記錄的振動數據集。
數據集已使用 4 個振動傳感器記錄在四個不同的方向上,并在從“0”到“90”% 的負載變化下。包括兩種不同的情況:1) 健康狀況2) 斷牙狀況
總共有 20 個文件,10 個用于健康的變速箱,10 個用于損壞的變速箱。每個文件對應于從 0% 到 90% 的給定負載,步長為 10%。
該實驗將在 4 美元的 MCU 上進行,沒有云計算碳足跡 :)
第 1 步:模型訓練
對于模型訓練,我將使用免費平臺 Neuton TinyML。創建解決方案后,繼續上傳數據集(請記住,當前支持的格式僅為 CSV)。
![pYYBAGNYsguATTzmAAC8jDillfo045.png](https://file.elecfans.com/web2/M00/73/FC/pYYBAGNYsguATTzmAAC8jDillfo045.png)
是時候為每個預測選擇目標變量或所需的輸出了。在這種情況下,我們將類作為輸出變量:'target'
![pYYBAGNYsg-AfoUaAADQzll8mGQ643.png](https://file.elecfans.com/web2/M00/73/FC/pYYBAGNYsg-AfoUaAADQzll8mGQ643.png)
由于數據集是一個振動,我們需要在訓練模型之前準備好數據。為此,我選擇設置數字信號處理 (DSP)。
數字信號處理 (DSP)選項支持對來自陀螺儀、加速度計、磁力計、肌電圖 (EMG) 等的數據進行自動預處理和特征提取。Neuton 將自動轉換原始數據并提取其他特征,以創建用于信號分類的精確模型。
對于此模型,我們使用準確度作為指標(但您可以試驗所有可用指標)。
![poYBAGNYshGALjqXAAD_Je5kbZM030.png](https://file.elecfans.com/web2/M00/73/6A/poYBAGNYshGALjqXAAD_Je5kbZM030.png)
在訓練模型時,您可以查看數據處理完成后生成的探索性數據分析,查看以下視頻:
我的目標指標是:準確度 0.921372 ,訓練后的模型具有以下特征:
![pYYBAGNYshSALB3FAAF3icjI6wc109.png](https://file.elecfans.com/web2/M00/73/FC/pYYBAGNYshSALB3FAAF3icjI6wc109.png)
系數數 = 397,嵌入文件大小 = 2.52 Kb 。太酷了!這是一個非常小的模型!模型訓練完成后,單擊“預測”選項卡,然后單擊“嵌入模型”旁邊的“下載”按鈕,下載我們將用于設備的模型庫文件。
第 2 步:嵌入 Raspberry Pico
下載模型文件后,就可以添加我們的自定義函數和操作了。我正在使用 Arduino IDE 對 Raspberry Pico 進行編程。
為 Raspberry Pico 設置 Arduino IDE:
我在本教程中使用了 Ubuntu,但相同的說明應該適用于其他基于 Debian 的發行版,例如 Raspberry Pi OS。
1. 打開終端,使用 wget 下載官方 Pico 設置腳本。
2.在同一終端修改下載的文件,使其可執行。
$ chmod +x pico_setup.sh
3.運行 pico_setup.sh開始安裝過程。如果出現提示,請輸入您的 sudo 密碼。
$ ./pico_setup.sh
4.下載 Arduino IDE并將其安裝在您的機器上。
5. 打開終端并將您的用戶添加到“撥出”組,然后注銷或重新啟動計算機以使更改生效。
$ sudo usermod -a -G dialout “$USER”
6.打開 Arduino 應用程序并轉到 File >> Preferences 。在附加板的管理器中添加此行并單擊 OK 。
https://github.com/earlephilhower/arduino-pico/releases/download/global/package_rp2040_index.json
![poYBAGNYsheAaLdkAAB7MApdyN8694.png](https://file.elecfans.com/web2/M00/73/6A/poYBAGNYsheAaLdkAAB7MApdyN8694.png)
7.轉到工具>>板>>板管理器。在搜索框中輸入“pico”,然后安裝 Raspberry Pi Pico / RP2040 板。這將觸發另一個大下載,大小約為 300MB。
![poYBAGNYshqAPO0rAACXGwNgzvo032.png](https://file.elecfans.com/web2/M00/73/6A/poYBAGNYshqAPO0rAACXGwNgzvo032.png)
注意:由于我們要對測試數據集進行分類,因此我們將使用 Neuton 提供的 CSV 實用程序對通過 USB 發送到 MCU 的數據進行推理。
這是我們的項目目錄,
user@desktop:~/Documents/Gearbox$ tree
.
├── application.c
├── application.h
├── checksum.c
├── checksum.h
├── Gearbox.ino
├── model
│ └── model.h
├── neuton.c
├── neuton.h
├── parser.c
├── parser.h
├── protocol.h
├── StatFunctions.c
├── StatFunctions.h
3 directories, 14 files
1 directory, 13 files
校驗和、解析器程序文件用于使用 CSV 串行實用工具生成握手并將列數據發送到 Raspberry Pico 進行推理。
了解Gearbox.ino文件中的代碼部分,我們設置了不同的回調來監控 CPU、時間和推理時使用的內存使用情況。
void setup() {
Serial.begin(230400);
while (!Serial);
pinMode(LED_RED, OUTPUT);
pinMode(LED_BLUE, OUTPUT);
pinMode(LED_GREEN, OUTPUT);
digitalWrite(LED_RED, LOW);
digitalWrite(LED_BLUE, LOW);
digitalWrite(LED_GREEN, LOW);
callbacks.send_data = send_data;
callbacks.on_dataset_sample = on_dataset_sample;
callbacks.get_cpu_freq = get_cpu_freq;
callbacks.get_time_report = get_time_report;
init_failed = app_init(&callbacks);
}
真正的魔法發生在這里callbacks.on_dataset_sample=on_dataset_sample
static float* on_dataset_sample(float* inputs)
{
if (neuton_model_set_inputs(inputs) == 0)
{
uint16_t index;
float* outputs;
uint64_t start = micros();
if (neuton_model_run_inference(&index, &outputs) == 0)
{
uint64_t stop = micros();
uint64_t inference_time = stop - start;
if (inference_time > max_time)
max_time = inference_time;
if (inference_time < min_time)
min_time = inference_time;
static uint64_t nInferences = 0;
if (nInferences++ == 0)
{
avg_time = inference_time;
}
else
{
avg_time = (avg_time * nInferences + inference_time) / (nInferences + 1);
}
digitalWrite(LED_RED, LOW);
digitalWrite(LED_BLUE, LOW);
digitalWrite(LED_GREEN, LOW);
switch (index)
{
/**
Green Light means Gearbox Broken (10% load), Blue Light means Gearbox Broken (40% load), and Red Light means Gearbox Broken (90% load) based upon the CSV test dataset received via Serial.
**/
case 0:
//Serial.println("0: Healthy 10% load");
break;
case 1:
//Serial.println("1: Broken 10% load");
digitalWrite(LED_GREEN, HIGH);
break;
case 2:
//Serial.println("2: Healthy 40% load");
break;
case 3:
//Serial.println("3: Broken 40% load");
digitalWrite(LED_BLUE, HIGH);
break;
case 4:
//Serial.println("4: Healthy 90% load");
break;
case 5:
//Serial.println("5: Broken 90% load");
digitalWrite(LED_RED, HIGH);
break;
default:
break;
}
return outputs;
}
}
return NULL;
}
一旦輸入變量準備就緒,就會調用 neuton_model_run_inference(&index, &outputs)來運行推理并返回輸出。
安裝 CSV 數據集上傳實用程序(目前僅適用于 Linux 和 macOS)
- 安裝依賴,
# For Ubuntu
$ sudo apt install libuv1-dev gengetopt
# For macOS
$ brew install libuv gengetopt
- 克隆這個 repo,
$ git clone https://github.com/Neuton-tinyML/dataset-uploader.git
$ cd dataset-uploader
- 運行 make 構建二進制文件,
$ make
完成后,您可以嘗試運行幫助命令,它應該類似于下圖所示
user@desktop:~/dataset-uploader$ ./uploader -h
Usage: uploader [OPTION]...
Tool for upload CSV file MCU
-h, --help Print help and exit
-V, --version Print version and exit
-i, --interface=STRING interface (possible values="udp", "serial"
default=`serial')
-d, --dataset=STRING Dataset file (default=`./dataset.csv')
-l, --listen-port=INT Listen port (default=`50000')
-p, --send-port=INT Send port (default=`50005')
-s, --serial-port=STRING Serial port device (default=`/dev/ttyACM0')
-b, --baud-rate=INT Baud rate (possible values="9600", "115200",
"230400" default=`230400')
--pause=INT Pause before start (default=`0')
第 3 步:在 Raspberry Pico 上運行推理
在樹莓派上上傳程序,
![pYYBAGNYsh2ABENiAAFI1jiRoGQ648.png](https://file.elecfans.com/web2/M00/73/FC/pYYBAGNYsh2ABENiAAFI1jiRoGQ648.png)
上傳并運行后,打開一個新終端并運行以下命令:
$ ./uploader -s /dev/ttyACM0 -b 230400 -d /home/vil/Desktop/Gearbox_10_40_90_test.csv
![poYBAGNYsiGAKhMqAAKcx9eDBnQ486.png](https://file.elecfans.com/web2/M00/73/6A/poYBAGNYsiGAKhMqAAKcx9eDBnQ486.png)
推理已開始運行,一旦完成整個 CSV 數據集,它將打印完整的摘要。
>> Request performace report
Resource report:
CPU freq: 125000000
Flash usage: 2884
RAM usage total: 2715
RAM usage: 2715
UART buffer: 42
Performance report:
Sample calc time, avg: 44172.0 us
Sample calc time, min: 43721.0 us
Sample calc time, max: 44571.0 us
我也嘗試使用 TensorFlow 和 TensorFlow Lite 構建相同的模型。我使用 Neuton TinyML 構建的模型在準確性方面比使用TF Lite構建的模型要好4.3 % ,而在模型大小方面要小 15.3 倍。說到系數個數,TensorFlow的模型有9個,330個系數,而Neuton的模型只有397個系數(比TF小23.5倍!)。
生成的模型足跡和推理時間如下:
![pYYBAGNYsiWAKcyqAAGjfZBhsRg201.jpg](https://file.elecfans.com/web2/M00/73/FC/pYYBAGNYsiWAKcyqAAGjfZBhsRg201.jpg)
結論
本教程生動地展示了 TinyML 技術可以為汽車行業帶來的巨大影響。您可以擁有幾乎為零的數據科學知識,但仍然可以快速構建超緊湊的 ML 模型以有效解決實際挑戰。最棒的是,這一切都可以通過使用完全免費的解決方案和超級便宜的 MCU 來實現!
- 使用TinyML來預測與氣壓系統(APS)故障
- 用于測試自動變速箱電磁閥的PWM
- 手扶式插秧機變速箱箱體重構 1次下載
- DCT變速箱及實時采集系統對車用電磁閥性能的微觀測試 15次下載
- 動態傾角模塊在自動變速箱中的研究 9次下載
- 汽車變速箱和差速器等工作原理圖解分析 1次下載
- AMT培訓講義目錄AMT變速箱 0次下載
- RBF神經網絡變速箱齒輪故障診斷
- 汽車變速箱性能檢測系統設計與實現
- 變速箱工作原理及電路圖
- 液力機械自動變速箱起步過程控制
- 汽車變速箱自動換檔機構及其電氣實現
- 奇瑞QQ6維修手冊(QR513變速箱部分)
- 變速箱多品種裝配線信息管理系統Information Management System
- 動力換檔混合電動車輛變速箱內的循環機械功率
- 變速箱軸承室出現磨損,在線緊急修復原來是用這種方法 351次閱讀
- cvt無級變速器和雙離合變速箱哪個比較好 1387次閱讀
- 各種類型變速箱油的區別與選擇 1028次閱讀
- 全球最好的5大變速箱是是什么 1138次閱讀
- 如何在 MCU 上快速部署 TinyML 1886次閱讀
- 電子節氣門控制器對車是否有影響 1.1w次閱讀
- 車速傳感器在哪個位置_車速傳感器安裝位置 10w次閱讀
- 變速箱的類型及工作原理分析 6252次閱讀
- 你了解雙離合自動變速系統嗎PPT詳細資料講解 3554次閱讀
- 淺析專用混合動力變速箱結構原理和優缺點 9021次閱讀
- 挖掘機控制器與MCU中程序的讀寫 2110次閱讀
- 簡要分析變速器原理構成及作用 4613次閱讀
- 發動機制動是什么_發動機制動是什么原理 1.1w次閱讀
- cvt是手動還是自動_手動省油還是自動省油 3.7w次閱讀
- 帶你走進奧迪A8L e-tron無線充電的混動技術 3368次閱讀
下載排行
本周
- 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次下載 | 免費
評論