背景
隨著時間的流逝,食物浪費問題對環境的影響越來越嚴重。聯合國環境規劃署 (UNEP) 最近的食物浪費指數報告顯示,平均而言,消費者每年浪費近 10 億噸食物(或購買的所有食物的 17%)。
人們生產的食物多于消耗的食物這一事實會產生重大的負面影響。例如,估計全球溫室氣體排放的 8-10% 來自未使用的食物。相反,減少食物浪費將有助于減少溫室氣體排放和全球污染,并增加遭受饑餓的國家的糧食供應。
這種情況表明,在不久的將來,我們需要關注的不是擴大食品生產,而是及時控制質量,以便新鮮產品可以銷售和消費。為了解決當前的情況,人類將需要更智能的用戶友好型技術,以幫助他們實時監控產品質量。
在這篇文章中,我將解釋一種檢查食品質量的簡單方法,該方法可以在普通商店甚至您自己的冰箱中實施。
介紹
最近,我做了一個簡單的實驗,我想和大家分享一下,因為我堅信這樣的實際解決方案可以對解決全球性問題產生很大的影響。
我的想法是使用 Tiny Machine Learning 方法根據氣體傳感器的數據預測食物是新鮮的還是變質的。我使用 7 個氣體傳感器進行了實驗。
在我的教程中,您將會學習如何自動創建一個超小型機器學習模型,將其嵌入傳感器的微控制器中,并使用它檢查食品質量。
所以讓我們開始吧!
程序:
第 1 步:使用 Neuton 創建 TinyML 模型
在 Neuton 平臺上創建一個新的解決方案“食品質量”,并上傳包含食品質量信號的訓練數據集,標記為兩個類別(新鮮和變質)。我的數據集包含 784 行。
然后,選擇目標(標簽)和目標指標(準確度),同時啟用微型機器學習模式。此外,為沒有浮點數據類型的計算選擇 8 位深度,然后單擊“開始部署”。
模型將在幾分鐘內準備就緒,接下來需要下載模型。
第 2 步:創建微控制器的固件
下載示例:https ://github.com/Neuton-tinyML/arduino-example
項目介紹
該項目包含:
主草圖文件“ arduino-tiny-ml-neuton.ino ”具有處理數據包的功能。
主要過程在 user_app.c 文件中進行:
static NeuralNet neuralNet = { 0 };
extern const unsigned char model_bin[];
extern const unsigned int model_bin_len;
uint8_t app_init()
{
return (ERR_NO_ERROR != CalculatorInit(&neuralNet, NULL));
}
inline Err CalculatorOnInit(NeuralNet* neuralNet)
{
memUsage += sizeof(*neuralNet);
app_reset();
timer_init();
return CalculatorLoadFromMemory(neuralNet, model_bin, model_bin_len, 0);
}
在這里,創建一個對象 NeuralNet 并調用一個函數來加載位于文件model.c中的模型
CalculatorLoadFromMemory(neuralNet, model_bin, model_bin_len, 0);
該模型現在已準備好進行預測。為此,您需要通過將大小為 neuralNet.inputsDim 的浮點數組傳輸給 CalculatorRunInference 函數來調用它。
最后一個值是 BIAS,應該是 1。
inline float* app_run_inference(float* sample, uint32_t size_in, uint32_t *size_out)
{
if (!sample || !size_out)
return NULL;
if (size_in / sizeof(float) != app_inputs_size())
return NULL;
*size_out = sizeof(float) * neuralNet.outputsDim;
if (app.reverseByteOrder)
Reverse4BytesValuesBuffer(sample, app_inputs_size());
return CalculatorRunInference(&neuralNet, sample);
}
執行預測時,會調用三個回調函數:預測之前的 CalculatorOnInferenceStart 和預測之后的 CalculatorOnInferenceEnd,以及帶有預測結果的 CalculatorOnInferenceResult。
在示例中,我使用這些函數來測量預測時間。
具有類概率的數組與預測結果一起傳遞給函數,大小為neuralNet.outputsDim。在這里,找到概率最高的類,如果概率 > 0.5,則打開 LED(綠色為 0 類,紅色為 1 類)。
inline void CalculatorOnInferenceResult(NeuralNet* neuralNet, float* result)
{
if (neuralNet->taskType == TASK_BINARY_CLASSIFICATION && neuralNet->outputsDim >= 2)
{
float* value = result[0] >= result[1] ? &result[0] : &result[1];
if (*value > 0.5)
{
if (value == &result[0])
{
led_green(1);
led_red(0);
}
else
{
led_green(0);
led_red(1);
}
}
else
{
led_green(0);
led_red(0);
}
}
}
第 3 步:將下載的模型復制到草圖中
將模型文件model.c從模型存檔復制到 MCU 固件。
第 4 步:編譯草圖并將其上傳到開發板
現在一切都準備好,可以進行草圖編譯了。我用程序將數據從計算機發送到 MCU 并顯示預測結果(它模擬傳感器數據并將數據發送到 MCU)。
根據您的操作系統,使用bin文件夾中的相應文件。
該實用程序讀取 CSV 文件并將樣本逐行發送到微控制器。然后,它將結果作為 CSV 文件輸出到標準輸出流。發送所有樣本后,實用程序會請求一份包含預測時間和消耗的內存量的報告。
第 5 步:檢查嵌入式模型的功能
創建兩個 CSV 文件,每個文件包含一行,其中的數據對應于兩個類別:新鮮和變質。
然后,將它們中的每一個發送到微控制器并查看預測結果
在第一種情況下,食物保持新鮮,因為預測類別為零,這意味著結果是“新鮮食物”。該預測是在 3844 微秒內完成的,閃存使用量為 199kB,RAM 使用量為 136B。此外,您可以看到綠色 LED 亮起,這表示結果良好。
在另一種情況下,我們會看到模型預測食物變質了,因為預測的類別是一類,表示“食物變質”。預測也非常快,在 3848 微秒內,使用相同的 199 kB 閃存和 136 kB RAM。在這種情況下,您可以看到紅色 LED,表示食物已變質。
結論:
這個實驗證明,只需 5 個簡單的步驟,您就可以創建一個工作智能設備,盡管它的體積很小,但對監控食品質量有很大幫助。我絕對確信這些技術可以幫助我們使我們居住的世界變得更清潔、更健康。
-
微控制器
+關注
關注
48文章
7595瀏覽量
151737 -
氣體傳感器
+關注
關注
14文章
550瀏覽量
37739 -
智能設備
+關注
關注
5文章
1062瀏覽量
50650
發布評論請先 登錄
相關推薦
評論