這個項目只是一個 DIY 項目,并沒有取代經(jīng)過認證的煙霧探測器。該項目開發(fā)的傳感器系統(tǒng)只是一個補充,實施傳感器融合以檢測煙霧并減少誤報。
背景
煙霧探測器挽救了很多生命。例如,從 1982 年到 2012 年,法國的火災(zāi)受害者人數(shù)下降了 48% 以上,從 1982 年到 2013 年,英國的火災(zāi)受害者人數(shù)下降了 56% 以上。這些減少很大程度上與消防安全法規(guī)和煙霧探測器的增加有關(guān)。在美國,96% 的家庭配備了煙霧報警器,大約 20% 的配備煙霧報警器的家庭配備了無法使用的煙霧報警器。據(jù)估計,如果每個家庭都有工作的煙霧報警器,美國住宅火災(zāi)死亡人數(shù)可能下降 36%,每年可挽救近 1100 人的生命。隨著煙霧探測器數(shù)量的增加,誤報成為一個問題?;馂?zāi)誤報的數(shù)量不斷增加,這對消防員來說是一個嚴峻的問題。
介紹
該項目介紹了一種基于人工智能傳感器融合的煙霧探測器來確定火災(zāi)警報與否。該系統(tǒng)基于 Arduino Pro Nicla Sense ME 板。出于安全原因,大多數(shù)傳感器都是冗余的,以確保即使一個傳感器發(fā)生故障也能正常工作。該項目側(cè)重于四個不同的要求:
基于人工智能傳感器融合減少誤報
檢測傳感器錯誤或故障
所有流程和人工智能任務(wù)都在 Arduino 板上計算
通過藍牙發(fā)送火警
傳統(tǒng)的煙霧探測器采用以下兩種檢測原理之一。
光電煙霧探測器以光電傳感器和光路為源工作。發(fā)生火災(zāi)時,煙霧會通過開口通風(fēng)口進入設(shè)備。在這個通風(fēng)口里面是一個光學(xué)室。當煙霧進入這個光學(xué)室時,它會撞擊光路,從而導(dǎo)致光發(fā)生散射。這種散射光落在光電二極管上。當光線照射到光電二極管光接收器時,會產(chǎn)生一個信號,從而引發(fā)警報。
電離
電離煙霧探測器與連接到電池的兩個電極一起工作。通常沒有電流流動,因為電路是開路的(電極之間只有空氣)。但是,如果空氣被 Americium-21(放射性物質(zhì))電離,電路就會關(guān)閉。因為電離的空氣允許電流流動。發(fā)生火災(zāi)時,煙霧會進入探測器。它擾亂電離過程,電路斷開,并產(chǎn)生警報。
誤報情況
兩種工作原理都受以下影響:
煮過頭的食物
蒸汽或高濕度
討厭的昆蟲
灰塵堆積
附近有強烈的化學(xué)物質(zhì)
所有這些外部觸發(fā)器都可能導(dǎo)致誤報。
項目概況
以下內(nèi)容描述了設(shè)備上使用的硬件、數(shù)據(jù)集收集以及 AI 模型訓(xùn)練和 AI 模型推理。
概述
感煙探測器的主要測量原理是通過 Sensirion SPS30 實現(xiàn)的。該傳感器用于測量空氣中的顆粒物。SPS30 的工作方式與光電煙霧探測器相同。SPS30 測量空氣中的氣溶膠濃度并返回顆粒數(shù)量及其大小。換言之,SPS30 是一款先進的煙霧探測器。SPS 的數(shù)據(jù)輸出是特殊物質(zhì) (PM):PM1.0 / PM2.5 和數(shù)字濃度 (NC):NC 0.5 / NC1.0 / NC2.5。在 SPS30 周圍,不同的傳感器用于測量粒子周圍的“元”數(shù)據(jù),以對環(huán)境進行分類。為了使系統(tǒng)更可靠,大多數(shù)傳感器都是冗余的,以確保檢測到錯誤的讀數(shù)。
冗余傳感器
濕度/溫度:BME688 和 SHT31
氣壓:BMP390 和 BMP388
氣體 (VOC):SPG30 和 BME688
由于內(nèi)部測量方法和校準,SPG30 和 BME688 的氣體傳感器讀數(shù)不是 100% 可比的。所以我決定使用計算出的 VOC 并檢查讀數(shù)差異是否大于 10%。
由于 SPS30“煙霧傳感器”沒有回退,傳感器讀數(shù)必須是唯一的。否則,必須產(chǎn)生傳感器錯誤。
傳感器:
Arduino Nicla Sense ME
博世 BHI260AP:6 軸 IMU(3 軸加速度計 + 3 軸陀螺儀)+ MCU
博世 BMP390:壓力傳感器
博世 BMM150:磁力計
博世 BME688:濕度、溫度和氣體傳感器 (VOC)
外部傳感器
博世 BMP388:壓力傳感器
Sensirion SPS30:特殊物質(zhì)傳感器(煙霧探測器)
Sensirion SHT31:濕度和溫度傳感器
Sensirion SPG30:氣體傳感器 (VOC)
GPS:用于傳感器讀數(shù)的時間同步
傳感器融合
傳感器融合是一個非常通用的術(shù)語。
“傳感器融合是結(jié)合傳感器數(shù)據(jù)或來自不同來源的數(shù)據(jù)的過程,這樣得到的信息比單獨使用這些來源時的不確定性要小?!?/p>
將傳感器融合放在該項目的背景下,旨在使用來自不同傳感器的不同環(huán)境信息,以改進火災(zāi)檢測。傳感器融合算法可以通過不同的方式實現(xiàn):
?。∟on)-線性函數(shù),例如 x^2 + y
閾值,例如:if (x 》 10)
線性回歸,類似于 AI 模型
對于這個特殊問題,最好的情況是使用基于線性回歸的傳感器融合。因為最終的輸出取決于大量不同相關(guān)性的傳感器讀數(shù),人類不容易看到。
數(shù)據(jù)采集
為這個系統(tǒng)收集訓(xùn)練數(shù)據(jù)并不像看起來那么容易。必須對許多不同的環(huán)境和火源進行采樣,以確保獲得良好的訓(xùn)練數(shù)據(jù)集。捕獲的不同場景的簡短列表:
普通室內(nèi)
普通戶外
室內(nèi)木火、消防員訓(xùn)練區(qū)
室內(nèi)燃氣火災(zāi)、消防員培訓(xùn)區(qū)
戶外木材、煤炭和燃氣燒烤爐
室外高濕度
數(shù)據(jù)集的長度接近 60.000 個讀數(shù)。所有傳感器的采樣率為 1Hz。為了跟蹤數(shù)據(jù),每個傳感器讀數(shù)都會添加一個 UTC 時間戳。
舉例:
數(shù)據(jù)集
數(shù)據(jù)以 CSV 格式保存,默認標題如下所示。
CSV 數(shù)據(jù)標題
Temperature[C],Humidity[%],TVOC[ppb],eCO2[ppm],Raw H2,Raw Ethanol,Pressure[hPa],PM1.0,PM2.5,F(xiàn)ire Alarm,CNT,UTC,NC0.5,NC1.0,NC2.5
數(shù)據(jù)集的詳細特征:
氣溫
空氣濕度
TVOC:總揮發(fā)性有機化合物;以十億分之幾為單位
eCO2:二氧化碳當量濃度;根據(jù) TVCO 等不同的值計算
原料H2:原料分子氫;未補償(偏置、溫度等)
原料乙醇:原料乙醇氣體
空氣壓力
PM 1.0 和 PM 2.5:顆粒物尺寸 《 1.0 μm (PM1.0)。1.0 μm 《 2.5 μm (PM2.5)
火災(zāi)警報:如果發(fā)生火災(zāi),地面實況為“1”
CNT:樣本計數(shù)器
UTC:時間戳UTC秒
NC0.5/NC1.0和NC2.5:顆粒物數(shù)量濃度。這與 PM 不同,因為 NC 給出了空氣中顆粒的實際數(shù)量。未加工的 NC 也按粒徑分類:《 0.5 μm (NC0.5);0.5 μm 《 1.0 μm (NC1.0);1.0 μm 《 2.5 μm (NC2.5);
CSV 數(shù)據(jù)
20.75,30.27,0,400,13434,19806,931.138,1.92,2.47,0,0,0,1654463338,12.04,2.633,0.508
20.66,30.42,0,400,13452,19840,931.135,1.91,2.43,0,0,1,1654463339,11.98,2.585,0.485
20.61,30.44,0,400,13454,19866,931.134,1.85,2.36,0,0,2,1654463340,11.62,2.506,0.469
20.61,30.64,0,400,13461,19894,931.131,1.83,2.33,0,0,3,1654463341,11.48,2.476,0.463
20.6,30.68,0,400,13455,19906,931.132,1.78,2.26,0,0,4,1654463342,11.27,2.397,0.435
20.54,30.78,0,400,13455,19926,931.141,1.76,2.23,0,0,5,1654463343,11.15,2.368,0.427
20.5,30.86,0,445,13335,19952,931.137,1.7,2.14,0,0,6,1654463344,10.78,2.273,0.403
20.48,31.12,0,1340,12875,19919,931.144,1.68,2.12,0,0,7,1654463345,10.67,2.247,0.397
完整的數(shù)據(jù)集包含超過 50.000 個樣本。
訓(xùn)練
我們有一個復(fù)雜的傳感器融合問題需要解決。我選擇Neuton作為訓(xùn)練模型并在微控制器上免費運行的解決方案。要訓(xùn)??練您的數(shù)據(jù)集,您需要一個 Google 帳戶和一個激活的 Neuton 零重力計劃。
本節(jié)介紹如何使用自定義數(shù)據(jù)集訓(xùn)練模型。只需選擇一個 CSV 文件并將其上傳到 Neuton 平臺就非常簡單。
要設(shè)置新的訓(xùn)練模型,請使用“我的解決方案”選項卡并按照說明進行操作。預(yù)加載的數(shù)據(jù)集可以在“從存儲中選擇數(shù)據(jù)集”中找到。
選擇數(shù)據(jù)集后,Neuton 會分析您的數(shù)據(jù)并檢查一切是否適合訓(xùn)練。然后,Neuton 打開一個新對話框來選擇模型應(yīng)該預(yù)測的目標變量。對于這個項目,選擇了“火警”。
我在數(shù)據(jù)集中添加了一個計數(shù)器變量來檢查是否有任何數(shù)據(jù)丟失。此計數(shù)器變量無助于訓(xùn)練模型,并且不用于應(yīng)用程序本身,因此禁用“cnt”變量進行訓(xùn)練。此功能可幫助您為各種額外的“元數(shù)據(jù)”保持干凈的流程。
本項目中使用的數(shù)據(jù)集未拆分為訓(xùn)練和驗證,因此禁用了“Holdout Validation”。
下一步是詳細配置訓(xùn)練和模型配置。有許多選項和配置適合您的應(yīng)用。
首先,選擇數(shù)據(jù)類型,在本例中為:Float 32 bit。此外,TinyML 已激活,因為模型應(yīng)該在 Arduino 板上運行。我們選擇準確度是因為應(yīng)盡可能準確地預(yù)測火警。對于這種問題,“精度”也可以。
第二部分是關(guān)于如何生成輸入數(shù)據(jù)向量。大多數(shù)系統(tǒng)使用固定的采樣率。該速率定義了新輸入數(shù)據(jù)可用并“饋入”模型的頻率。該項目使用 1 Hz 的固定采樣率,這意味著每秒都有新的傳感器值可用并輸入到模型中。所以不需要特殊的數(shù)字信號處理。
最后一步是設(shè)置模型,由于 Arduino Pro Nicla Sense ME MCU 是具有浮點擴展的 32 位 MCU,模型可以設(shè)置為 32 位和浮點數(shù)。
接下來只需讓項目開始,開始訓(xùn)練,讓 Neuton 為您構(gòu)建模型。
參數(shù)詳情
在訓(xùn)練過程中,Neuton 會更新模型的詳細信息和模型的重要參數(shù)。這次火災(zāi)探測的培訓(xùn)需要四到五個小時,所以我使用了 Neuton 的 SMS 服務(wù),它會在培訓(xùn)過程完成后向我發(fā)送 SMS。訓(xùn)練后,可以對模型進行詳細探索。這對于了解模型的性能以及如何更好地了解最終結(jié)果非常有幫助。
模型概覽顯示了在 MCU 上運行模型所需的模型性能和 RAM/Flash 消耗。在左側(cè),雷達圖顯示了有關(guān)模型的不同指標。在這里,我們發(fā)現(xiàn)“準確性”突出顯示,因為我們選擇它作為目標指標。但是該圖顯示了所有其他指標。這對于了解模型是否正常工作非常有用。在這種情況下,該模型有一個提升指標的缺口。Lift measurer 單個模型預(yù)測與數(shù)據(jù)集中具有相同輸出的所有預(yù)測之間的比率。這可能與不平衡的數(shù)據(jù)集有關(guān),這將在稍后討論。自動生成的c庫可以直接下載使用。RAM/閃存占用空間可幫助您精確定義系統(tǒng)要求。
讓我們深入了解我們的模型和數(shù)據(jù)集,Neuton 可以很容易地深入了解預(yù)測的工作原理和正在發(fā)生的事情?!疤剿餍詳?shù)據(jù)分析”部分在培訓(xùn)后可用。本文檔中僅顯示了一些有趣的部分。請隨意使用數(shù)據(jù)集并進行自己的實驗。
下面顯示了三個最重要的圖。
數(shù)據(jù)集概述,數(shù)據(jù)集的詳細視圖
目標變量分布:我們的火災(zāi)探測器的數(shù)據(jù)集是不平衡的,理想的數(shù)據(jù)集具有所有目標狀態(tài)的 50% 分布。
相關(guān)熱圖:在這里我們看到不同的輸入值是如何相互關(guān)聯(lián)的??諝鉂穸扰c目標的相關(guān)性最高,而 eCO2 值的相關(guān)性最低。簡而言之,濕度的變化對火警警報很重要,而 eCO2 氣體的變化并不重要。
所有這些信息都有助于了解數(shù)據(jù)如何影響模型的輸出和預(yù)測性能。使用 Neuton,很容易獲得結(jié)構(gòu)化且有用的數(shù)據(jù)概覽。
模型定制
由于我們的煙霧探測器是依靠電池功耗運行的,因此考慮如何在保持模型精度高的同時減少模型的計算時間和復(fù)雜度是有意義的。這個過程可能很難滿足所有要求。Neuton 允許訓(xùn)練具有不同位深度和設(shè)置的模型。為了比較不同的設(shè)置,模型使用三種不同的設(shè)置進行訓(xùn)練:
32 位浮點數(shù)
16 位定點數(shù)
8 位定點數(shù)
比較三個模型的準確率,從 0.996113(32 位浮點)下降到 0.989032(8 位固定),準確率下降了 0.7%。8 位模型顯著降低了 FLASH 內(nèi)存消耗,在 8 位 MCU 架構(gòu)上具有更好的性能。
模型定制第 2 部分(特征消除)
對于煙霧探測器,使用了 8 位模型,因為這樣可以減少功耗和計算時間,從而延長電池壽命。下一步是刪除模型使用的輸入值。
上圖可以在 Neuton 的“探索性數(shù)據(jù)分析”部分找到,它顯示了最相關(guān)的值。PM1.0和NC0.5值高度相關(guān),這與SPS30傳感器的測量原理有關(guān),PM1.0值是根據(jù)SPS30內(nèi)部的NC0.5值計算得出的。所以 Neuton 給了我們注意這些值的提示。為了進一步定制,PM1.0 值和 eCO2 將被刪除以用于模型輸入,因為這些信息是多余的或無用的。所以這應(yīng)該有助于改善模型大小和內(nèi)存使用。
具有減少輸入向量的定制 32 位和 8 位模型在準確性和內(nèi)存使用方面優(yōu)于原始 32 位模型。
特征重要性矩陣詳細概述了每個特征如何與模型輸出相關(guān)聯(lián)。在這種情況下,可能會在實際應(yīng)用程序中刪除前 10 個功能中的一些。
最終模型在 Arduino Nical Sense ME 上只需要 101 字節(jié)的 RAM 和 958 字節(jié)的閃存。推理時間約為 360 us。
Arduino編程
隨著 Neuton 社區(qū)的快速發(fā)展,許多 Arduino 推理示例存在official-git-repo和hackster.io 。我使用官方 repo 中的arduino-example進行模型推理。
添加藍牙
Arduino Pro Nicla Sense ME 能夠通過藍牙向任何類型的設(shè)備發(fā)送消息,使用 Arduino 編程藍牙很簡單。出于測試目的,BlueSee MacOs X 工具用于通過藍牙從 Arduino 讀取值。
BLEService fire_service(“fff0”);
BLEIntCharacteristic fire_characteristic(“fff1”, BLERead | BLEBroadcast);
基本功能是圍繞 BLe 服務(wù)“fff0”構(gòu)建的,該服務(wù)具有每次模型生成新輸出時都會更新的特性。新值廣播到每個連接的藍牙設(shè)備。這是通過藍牙發(fā)送通知和狀態(tài)事件的常用方法。
使用 BlueSee,您可以連接到 BLE 設(shè)備并讀取當前的服務(wù)信息。首先,您必須連接到設(shè)備。BlueSee 允許連接到 BLE 設(shè)備。第二步,可以從設(shè)備中讀取Service數(shù)據(jù)
讀取服務(wù)“火警”,有效載荷大小為 32 位,但我們只使用 MSB。
如果出現(xiàn)“火警”,MSB 設(shè)置為 1 并發(fā)送信息。
最后,在測試 BLE 服務(wù)時,由于系統(tǒng)的高功率負載,存在很多傳感器讀取錯誤。一種解決方案是升級配電。
未來可能的工作
由于 Arduino Pro Nicla Sense ME 使用傳感器融合芯片來控制傳感器讀數(shù),因此網(wǎng)絡(luò)可以直接在博世 BHI260AP 芯片上實現(xiàn)。BHI260AP 內(nèi)置的 CPU 能夠運行自定義代碼。在這種情況下,主 CPU 將完全自由地運行主應(yīng)用程序代碼,從而顯著降低功耗和電池壽命。
結(jié)論
該項目表明,傳感器融合是解決復(fù)雜問題的好方法,只需使用額外的元數(shù)據(jù)。向“煙霧傳感器”添加元數(shù)據(jù)有助于減少誤報。這種低成本的傳感器系統(tǒng)可以挽救生命,因為可以對系統(tǒng)進行訓(xùn)練以檢測導(dǎo)致昏厥的火災(zāi)氣體。構(gòu)建微型神經(jīng)網(wǎng)絡(luò)的過程可以如此簡單和自動化,這真的非常實用。
評論
查看更多