資料介紹
描述
在今天的教程中,我將向您展示如何使用對象檢測創建智能庫存跟蹤器,由深度學習提供支持,僅使用 Raspberry Pi 4 和相機。我們將在 YOLOv4 微型模型上應用遷移學習來識別自定義對象,然后使用簡單的 Python 腳本解析模型的輸出以生成每個對象的計數。最后,我們還將將該應用程序與 Azure IoT Central 集成,以便我們可以遠程方便地監控我們的庫存。
項目概況
您是否曾經路過雜貨店,但不確定是否需要多買一盒牛奶?好吧,如果有某種方法可以讓我們看到冰箱內部的信息來更新我們的信息呢?今天,借助機器學習和物聯網基礎設施,我們將把這種便利變成現實。
機器學習:圖像分類與目標檢測
圖像分類和對象檢測等對象識別任務都是使用深度神經網絡執行的,但區分兩者是有意義的。在圖像分類中,我們的輸入是包含單個類的圖像。例如,我們可能有一張貓或狗的照片,我們希望模型將其分類為單個輸出。
然而,在對象檢測中,我們希望模型不僅能識別多個對象,還能定位照片中每個類的所有實例。事實上,與分類相反,我們現在可以計算幀中存在的每種類型對象的數量——這正是我們這個項目所需要的!
有關更多信息,Jason Brownlee 的文章對不同類型的計算機視覺任務進行了很好的介紹。
什么是遷移學習?
由于計算機視覺任務通常被認為是復雜的任務,因此即使在強大的 GPU 上訓練功能模型也可能需要數天時間。幸運的是,只要我們同時擁有架構和權重,任何人都可以輕松實現已經訓練過的現有模型。
但是,如果我們想訓練模型識別其他事物怎么辦?畢竟,期望這些模型自然而然地能夠很好地識別我們家庭對雜貨產品的特定選擇,這將是一個遙不可及的想法。在這種情況下,我們不必從頭開始訓練新模型。相反,我們可以應用遷移學習。
遷移學習是一種技術,我們利用預訓練模型,并使用新數據集對其進行訓練,以完成類似任務。它使我們能夠用更少的數據在模型中實現更高的性能,同時仍然大大減少了訓練所需的時間和資源。今天,我們將使用 YOLOv4 Tiny 進行遷移學習。
什么是YOLO?
YOLO 代表 You Only Look Once,是用于對象檢測的最先進的神經網絡機器學習框架。當它的第一篇論文于 2015 年發布時,它在推理速度上擊敗了其他模型,允許以犧牲準確性為代價進行實時對象檢測。今天,YOLO 的工作在不同方面繼續進行,以在保持低延遲的同時提高準確性。
對于今天的項目,我們使用的是第四版,YOLOv4。更具體地說,我們將使用 YOLOv4 的微型版本,它具有更小的網絡規模。雖然我們確實用較小的模型犧牲了一些準確性,但這會降低計算能力的要求,使模型能夠在像我們的 Raspberry Pi 這樣的邊緣設備上以良好的性能運行。
準備您的自定義數據集
作為我們訓練自定義模型的第一步,我們必須通過收集我們想要檢測的項目的照片來構建我們的數據集。每個班級至少需要 50 張圖片。在我的項目中,我決定計算牛奶盒、雞蛋和酸奶包的數量,所以我的數據集最終應該總共有至少 150 張圖像。
以下是收集數據集時的一些提示。
- 通常,捕獲具有各種照明條件和攝像機角度的圖像,以及不同方向的對象的圖像,以創建更強大的數據集。
- 對于通常以多個形式存在的對象,例如雞蛋,請確保包括單個圖像以及組中的其他圖像。
- 如果你經常堆疊一些物體,比如牛奶盒,你會想要在它們堆疊的地方包含幾張圖像,以便我們的模型可以相應地學習。
使用 labelImg 標記數據集
有許多開源工具可用于標記計算機視覺項目的圖像。我決定使用labelImg。它是免費的、開源的,可以使用以下兩個命令輕松安裝和運行。
pip3 install labelImg
labelImg
GUI(圖形用戶界面)應該打開,您可以開始為圖像添加標簽!使用左側窗格中的Open Dir選擇圖像所在的文件夾。加載圖像后,使用 W 并單擊并拖動以開始在對象周圍繪制邊界框。
在保存每個文件之前,請確保導出格式為Pascal VOC ,它應該寫入與圖像同名的 xml 文件。完成后,您應該會得到一個包含一堆圖像和 xml 文件的文件夾,如下所示。
使用 RoboFlow 處理標記數據
我們將首先使用 Roboflow 的平臺來增強我們的圖像。雖然我們可以自己以編程方式完成此操作,但 Roboflow 為以后提供了一些便利。增強是計算機視覺數據處理中的一種技術,我們通過翻轉、旋轉、傾斜、重新著色等對圖像進行轉換。
這是非常強大的,因為每次轉換都會產生一張新照片。如果我們為每個訓練樣本創建三個增強版本,我們將擁有總樣本數的 4 倍!再說了,誰有耐心手工標注每班200張照片?
要開始使用,請先在此處注冊一個 Roboflow 帳戶。免費帳戶有一些限制,但對于我們今天的項目來說已經足夠了。登錄后,為對象檢測(邊界框)創建一個新數據集。你可以隨意命名它。我將我的命名為“Groceries”,因為將來推廣這個數據集可能會很有用。
然后,拖放您的圖像和 xml 文件以上傳它們。完成后選擇“完成上傳”,讓 Roboflow 為您拆分數據。在增強選項下,添加水平和垂直翻轉以及旋轉 -15、+15。在預處理下,Auto-Orient 和 Resize 應該已經自動完成。如果沒有,您可以參考我在下面的屏幕截圖。
在右上角,單擊生成。完成后,選擇“YOLO Darknet”格式和“顯示下載代碼”。然后,你會看到一個 !curl 命令。保存它以在我們教程的后面部分使用。
Google Colab 上的遷移學習
現在是時候進行遷移學習了!本部分基于Roboflow 的教程及其隨附的 Colab 筆記本,該筆記本使用血細胞數據集執行遷移學習。
對于這個項目,我對 Roboflow 的 notebook 進行了一些小改動,以便代碼將使用默認情況下提供給免費 Colab 用戶的 GPU 運行。首先將我的筆記本副本保存到您的 Google 云端硬盤,以便您進行編輯。
在您的副本中,導航到編輯 > 筆記本設置,并確保為硬件加速器選擇 GPU。除非您的 GPU 架構因某種原因有所不同,否則您唯一需要進行的其他更改將是“為 YOLOv4 設置自定義數據集”部分中的第一個單元格。用上一節中的 curl 命令替換最后一行。
# Paste your link here
%cd /content/darknet
!curl -L > roboflow.zip; unzip roboflow.zip; rm roboflow.zip
對于那些好奇的人來說,這個筆記本基本上可以根據我們的數據集自動執行我們需要對 YOLOv4 Tiny 架構進行的更改。可以在此處找到原始的分步說明,但它們很長并且可能會讓初學者感到困惑。
現在,繼續逐個運行單元格。培訓需要一段時間,但在您休息之前,請注意,重置 Google Colab 運行時將刪除從會話中創建的所有文件。是的 - 這包括模型的重量!
重要的!訓練塊完成后,請務必在運行時超時之前獲取以下內容。
- 從 content/darknet/backup/custom-yolov4-tiny-detector_best.weights 保存最佳權重
- 從 content/darknet/cfg 中提取 custom-yolov4-tiny-detector.cfg
其余三個單元可用于在我們的測試數據上測試我們的模型。您可以重復運行最后一個單元格以拉出不同的隨機照片供模型推斷。
使用 Raspberry Pi 在邊緣進行 ML 推理
現在我們有了自定義的 YOLOv4 微型模型,我們可以繼續在我們的 Raspberry Pi 上對其進行測試。為此,我們首先必須設置我們的環境。注意:本教程使用 Raspberry Pi OS。
第 1 步:在您的 Raspberry Pi 上克隆 AlexeyAB 的暗網存儲庫并使用 make 編譯。
git clone https://github.com/AlexeyAB/darknet
cd darknet
make
第二步:編輯./darknet/data/coco.names下的coco.names文件。使用任何文本編輯器,將此文件中的類替換為您的自定義類。在我的情況下,它是以下內容。
Egg
Milk
Yoghurt
第 3 步:將 Colab 筆記本中保存的權重放在 darknet/backup 文件夾中,將 custom-yolov4-tiny-detector.cfg 放在 darknet/cfg 文件夾中。
第 4 步:將您選擇的名為“test.jpg”的測試圖像放在 darknet 文件夾中,然后運行以下命令來測試模型。
./darknet detect cfg/custom-yolov4-tiny-detector.cfg backup/custom-yolov4-tiny-detector_best.weights test.jpg -dont-show
結果應顯示在命令行界面中。偉大的!您會注意到運行推理所需的時間相當長 - 超過 7 秒。幸運的是,由于不需要如此頻繁地更新冰箱的庫存,這不會成為問題。
還應該在 darknet 文件夾中生成一個 predictions.png 文件,這樣您就可以看到每個已識別項目周圍生成的邊界框。
在 Microsoft Azure IoT Central 上部署
當然,如果我們不能遠程訪問這些數據,那么到目前為止我們所做的就不會很有用。我們項目的下一步是創建一個 Azure IoT Central 應用程序,我們將在其中定期發送我們的庫存狀態,以便我們可以遠程監控它。在繼續之前,請在此處創建一個免費的 Microsoft Azure 帳戶。
步驟 1:創建 Azure IoT Central 應用程序
前往Azure IoT Central。向下滾動并選擇創建自定義應用程序。在顯示以下屏幕之前,系統將提示您登錄。選擇應用程序名稱和 URL,并將應用程序模板保留為自定義應用程序。在定價計劃下,現在選擇免費。然后,繼續創建您的應用程序。
步驟 2:添加設備模板
使用側邊欄,導航到Device template ,然后點擊+New 。從那里,選擇IoT 設備,然后選擇Next: Customize 。從這里,選擇一個設備模板名稱——我選擇了“RaspberryPi”。然后,繼續創建模板。
第 3 步:將接口和功能添加到設備模板
在上一步之后,您應該會自動轉到新設備模板。選擇自定義模型,然后添加繼承接口。再次選擇自定義。
之后,您將需要根據您正在跟蹤的項目向界面添加功能。確保這些是您想要設置的正確參數,因為在我們發布設備模板后它們無法更改。點擊保存,但暫時不要發布。
第 4 步:設置設備視圖
為了在我們的 Azure IoT Central 應用程序上很好地可視化我們的數據,我們必須設置我們的設備視圖。導航到設備面板上的視圖并選擇可視化設備。
在此之后,在 Edit view 窗格下,單擊Select a Telemetry 。選擇您的第一個項目,然后單擊Add tile 。該圖塊應顯示在右側的儀表板預覽中。對于每個圖塊,將其顯示值更改為“最后一個已知值”。
我為總共三個項目添加了三個圖塊,最終得到如下所示的儀表板。對設置感到滿意后,單擊頁面頂部的發布。
第 5 步:創建設備
現在,我們必須創建一個設備。導航到設備并單擊 + 新建。輸入您選擇的設備名稱,并記住選擇您之前創建的設備模板。我選擇了“Rpi”。
點擊進入您剛剛創建的設備。您應該會看到您之前設置的儀表板,但沒有顯示任何數據。我們將通過讓我們的 Raspberry Pi 將一些數據發送到我們的 Azure IoT Central 應用程序來解決這個問題。點擊屏幕右上角的“連接”,會彈出一個窗口。
第 6 步:生成連接密鑰
在新的瀏覽器窗口中打開此Azure IoT Central 連接字符串生成器。用上面窗口中的相應數據填空。請注意,“設備密鑰”是指主密鑰。最后,記錄下生成的連接字符串以備后用。
第 7 步:為 Azure IoT 設置 Raspberry Pi
作為最后一步,在 Raspberry Pi CLI 上運行以下命令以安裝 Azure IoT 的相關包。
sudo pip3 install azure-iot-device azure-iot-hub azure-iothub-service-client azure-iothub-device-client
運行完整的工作流程
到目前為止,我們一直在使用零碎的東西,但現在是時候將它們放在一起來創建我們的機器學習驅動的智能冰箱庫存跟蹤器了。在執行這些步驟之前,首先在此處訪問我的 Github 存儲庫并將文件下載為 ZIP。將img.txt和parseSendData.py放入你的暗網文件夾。
1. 拍照
首先,我們使用連接到 Raspberry Pi 的相機拍照,使用命令…。該文件以 img.jpg 格式保存到暗網文件夾。
對于 Raspberry Pi 相機模塊,請使用以下內容。確保首先通過 raspi-config > Interface 啟用相機。
raspistill -o /darknet/img.jpg
如果你和我一樣使用 USB 網絡攝像頭,先安裝 fswebcam 包,然后我們可以用類似的方式拍照。第二個命令拍攝一張照片并將其作為 img.jpg 寫入暗網文件夾,并具有特定的延遲、跳幀和分辨率。您可以根據自己的喜好調整它們。
sudo apt-get install fswebcam
fswebcam -D 2 -S 20 -r 1920x1080 --no-banner darknet/img.jpg
2. 運行并記錄推理結果
要解析數據并將其發送到 Azure IoT Central,我們需要在文本文件中獲取模型的輸出。我們使用下面的命令讀入img.txt(僅img.jpg)中列出的文件,進行物體檢測,并將輸出寫入result.txt。
./darknet detector test cfg/coco.data cfg/custom-yolov4-tiny-detector.cfg backup/custom-yolov4-tiny-detector_best.weights -dont_show -ext_output < img.txt > result.txt
3. 解析并發送數據到 Azure IoT Central
現在,打開 parseSendData.py。這是一個簡單的 Python 腳本,它將解析 result.txt 文件,計算每個類的實例,然后將其發送到 Azure IoT Central。首先,將 CONNECTION_STRING 替換為您在上一節第 12 步中獲得的那個。
CONNECTION_STRING = <Replace with your own string>
然后,通過將鍵替換為您的項目類來更新字典。請注意,您必須根據您之前在 coco.data 文件中編寫的內容來匹配每個類的字符串。否則,您將遇到關鍵錯誤。
現在,使用以下命令通過命令行運行 python 腳本:
python3 /parseSendData.py
如果一切順利,您應該會看到類似于以下輸出的內容,并且腳本將完成且沒有錯誤。
Attempting to Send Messages to Azure IoT
Sending message: {'Egg': 6, 'Milk': 1, 'Yoghurt': 2}
Message Sent
返回 Azure IoT Central 上的設備視圖。數字應該會在幾分鐘后出現!
自動化工作流程
我們需要做的最后一步是使用 bash 腳本自動化上一節的整個過程。幸運的是,我們可以使用cron安排整個過程在我們的 Raspberry Pi 上每隔半小時自動運行一次。
首先,我們在我們的暗網文件夾中創建一個名為“workflow.sh”的 bash 腳本,如下所示。bash 腳本本質上是一個控制臺命令列表,可以在一個組中一起運行,因此它們不必單獨運行。稍后,我們將使用 cron 自動執行此腳本。
fswebcam -D 2 -S 20 -r 1920x1080 --no-banner img.jpg
./darknet detector test cfg/coco.data cfg/custom-yolov4-tiny-detector.cfg backup/custom-yolov4-tiny-detector_best.weights -dont_show -ext_output < img.txt > result.txt
python3 parseSendData.py
然后,我們通過運行以下命令使腳本可執行。確保您當前的工作目錄是腳本所在的暗網文件夾。
chmod +x workflow.sh
現在,如果您運行腳本,您應該會在終端輸出中看到整個工作流程自動連續發生。我們的程序只需執行一次即可拍攝照片、運行模型、解析數據并將其上傳到 Azure IoT Central。整潔的!
要使用 cron 安排此腳本的執行,首先通過運行以下命令打開 crontab 編輯器。Cron 預裝了 Raspberry Pi OS。
crontab -e
系統將提示您選擇編輯器。如果您不知道該選擇哪個,請選擇簡單的 nano 編輯器(第一個選項)。然后,將在您的命令行中打開一個文件。我們必須將我們的預定命令添加到這個文件中才能自動運行。在文件的底部,添加以下內容。
*/30 * * * * /home/pi/darknet/workflow.sh
就是這樣!讓您的 Raspberry Pi 和攝像頭就位,您應該會在接下來的半小時內看到數據流入您的 Azure IoT Central 應用程序。
結論
謝謝閱讀!我希望本文對您創建智能庫存跟蹤項目有所幫助。構建一個供個人使用的機器學習應用程序變得如此容易令人驚訝。通過物聯網和云集成,這些應用程序在滿足實際需求方面更加有用。
有關邊緣機器學習的更多項目,請隨時查看以下內容:
- 使用 Wio 終端和 Arduino IDE 學習 TinyML #1 簡介
- 使用 Wio 終端和 Arduino IDE #2 音頻場景識別和移動通知學習 TinyML
- TinyML 與 Wio Terminal #3 人數統計和 Azure IoT Central 集成
- 使用 Wio 終端和 Arduino IDE 學習 TinyML #4 使用 Tensorflow Lite 進行微控制器天氣預報,也就是我喜歡數據
- 使用 Wio 終端構建 TinyML 智能氣象站
- 使用 Wio 終端和 Edge Impulse 構建手寫識別
- 使用Raspberry PI和open CV進行圖像處理
- 使用Raspberry Pi和BluPants進行編碼
- 通過USB對Raspberry Pi進行編程
- Arduino和Raspberry Pi平臺進行編碼
- 使用ROS和Raspberry Pi進行Bittle遠程操作
- 使用Raspberry Pi進行汽車診斷
- Raspberry Pi和你的倉鼠進行股市交易
- 將Raspberry Pi用于您自己的庫存管理系統
- 使用Raspberry Pi和Arduino進行花卉監測
- 使用Raspberry Pi的溫度跟蹤器
- 可視頻直播的Raspberry Pi網絡控制機器人 14次下載
- 《愛上Raspberry Pi》中譯版-電子書籍.pdf 0次下載
- Instant Raspberry Pi Gaming 6次下載
- Raspberry_Pi詳解 15次下載
- raspberry_pi各版本差別 0次下載
- 基于Raspberry Pi 5的蜂窩物聯網項目 1027次閱讀
- 使用Raspberry Pi Pico W和MicroPython開發物聯網應用 1673次閱讀
- 用于測試項目的4個最佳樹莓派Raspberry Pi模擬器 5985次閱讀
- 如何使用Raspberry Pi使熱水浴缸變得智能和遠程操作 1813次閱讀
- 基于樹莓派產品 Raspberry Pi微控制器板的優缺點 2710次閱讀
- 基于Raspberry Pi Pico開發先進的家庭自動化系統 2850次閱讀
- 基于FONA通過UART與Raspberry Pi進行通訊的方案介紹 2122次閱讀
- 基于在Raspberry Pi Zero W的基礎上實現設計微型機器人 2106次閱讀
- 微雪電子ZeroW| Raspberry Pi ZeroW主板簡介 2429次閱讀
- 微雪電子Raspberry Pi 3 Model主板簡介 2873次閱讀
- 微雪電子Raspberry Pi 3 Model擴展板簡介 1512次閱讀
- 微雪電子 Raspberry Pi Zero WH智能車介紹 1790次閱讀
- 利用Raspberry Pi構建存儲和虛擬化時間序列數據 884次閱讀
- 一文了解Raspberry Pi 4各項性能跑分 2.9w次閱讀
- PiTalk 套件將Raspberry Pi當作智能手機或是行動物聯網裝置 6686次閱讀
下載排行
本周
- 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次下載 | 免費
評論
查看更多