資料介紹
描述
作為我之前關(guān)于使用 Sipeed MaiX 板進行圖像識別的文章的延續(xù),我決定寫另一個教程,重點是對象檢測。但請記住,我不是 Kendryte 或 Sipeed 開發(fā)團隊的成員,無法回答與他們的產(chǎn)品相關(guān)的所有問題。本質(zhì)上, aXeleRate是基于我用于訓練圖像識別/對象檢測模型的腳本集合 - 組合成一個框架并針對 Google Colab 上的工作流程進行了優(yōu)化。使用起來更方便,更新更及時。
2022 年 3 月 29 日更新。我盡我所能定期更新我的文章,并根據(jù)您在 YouTube/Hackster 評論部分的反饋。如果您想表達對這些努力的支持和贊賞,請考慮給我買杯咖啡(或披薩):)。
對于舊版本的文章,你仍然可以在steemit.com 上看到。
第 1 步:對象檢測模型架構(gòu)說明

圖像識別(或圖像分類)模型將整個圖像作為輸入,并輸出我們試圖識別的每個類別的概率列表。如果我們感興趣的對象占據(jù)了圖像的大部分并且我們不太關(guān)心它的位置,這將非常有用。但是,如果我們的項目(比如人臉跟蹤相機)不僅需要了解圖像中對象的類型,還需要了解其坐標,該怎么辦。那么需要檢測多個對象(例如計數(shù))的項目呢?
這是對象檢測模型派上用場的時候。在本文中,我們將使用 YOLO(你只看一次)架構(gòu),并重點解釋這個特定架構(gòu)的內(nèi)部機制。
我們試圖確定圖片中存在哪些對象以及它們的坐標。由于機器學習不是魔術(shù),也不是“思維機器”,而只是一種使用統(tǒng)計數(shù)據(jù)優(yōu)化功能(神經(jīng)網(wǎng)絡)以更好地解決特定問題的算法。我們需要對這個問題進行解釋,使其更“可優(yōu)化”。這里的一個天真的方法是讓算法最小化它的預測和對象的正確坐標之間的損失(差異)。只要我們在圖像中只有一個對象,這就會很好地工作。對于多個對象,我們采用不同的方法——我們添加網(wǎng)格并讓我們的網(wǎng)絡預測每個網(wǎng)格中對象的存在(或不存在)。好聽,但是仍然給網(wǎng)絡留下了太多的不確定性——如何輸出預測以及在一個網(wǎng)格單元內(nèi)有多個中心的對象時該怎么辦?我們需要再添加一個約束——所謂的錨。錨點是初始大小(寬度、高度),其中一些(最接近對象大小)將調(diào)整為對象大小 - 使用神經(jīng)網(wǎng)絡的一些輸出(最終特征圖)。
所以,這是一個關(guān)于 YOLO 架構(gòu)神經(jīng)網(wǎng)絡對圖像執(zhí)行對象檢測時發(fā)生了什么的頂級視圖。根據(jù)特征提取器網(wǎng)絡檢測到的特征,對每個網(wǎng)格單元進行一組預測,包括錨點偏移量、錨點概率和錨點類別。然后我們丟棄低概率的預測,瞧!
第 2 步:準備環(huán)境

aXeleRate 基于 penny4860 的精彩項目,SVHN yolo-v2 數(shù)字檢測器。 aXeleRate 將這種在 Keras 中的 YOLO 檢測器實現(xiàn)提升到一個新的水平,并使用其方便的配置系統(tǒng)來執(zhí)行圖像識別/對象檢測和具有各種后端的圖像分割網(wǎng)絡的訓練和轉(zhuǎn)換。
使用 aXeleRate 有兩種方法:在 Ubuntu 機器上本地運行或在 Google Colab 中運行。要在 Google Colab 中運行,請查看以下示例:
PASCAL-VOC 目標檢測 Colab Notebook
現(xiàn)在在本地訓練您的模型并將其導出以用于硬件加速也變得更加容易。我強烈建議您在 Anaconda 環(huán)境中安裝所有必要的依賴項,以使您的項目與其他項目分開并避免沖突。
安裝完成后,新建環(huán)境:
conda create -n yolo python=3.7
讓我們激活新環(huán)境
conda activate yolo
bash shell 前的前綴將與環(huán)境名稱一起出現(xiàn),表明您現(xiàn)在在該環(huán)境中工作。
在本地機器上安裝 aXeleRate
pip install git+https://github.com/AIWintermuteAI/aXeleRate
然后運行它來下載訓練和推理所需的腳本:
git clone https://github.com/AIWintermuteAI/aXeleRate.git
您可以使用 aXeleRate 文件夾中的 tests_training.py 運行快速測試。它將為每種模型類型運行訓練和推理,保存和轉(zhuǎn)換訓練好的模型。由于它只訓練 5 個 epoch 并且數(shù)據(jù)集非常小,您將無法獲得有用的模型,但此腳本僅用于檢查是否存在錯誤。
第 3 步:使用 Keras 訓練對象檢測模型

現(xiàn)在我們可以使用配置文件運行訓練腳本。由于 YOLO 目標檢測器的 Keras 實現(xiàn)相當復雜,因此我將解釋如何配置訓練并描述相關(guān)模塊,而不是解釋每個相關(guān)的代碼,以防您想自己對它們進行一些更改。
讓我們從一個玩具示例開始,訓練一個浣熊探測器。/config 文件夾內(nèi)有一個配置文件 raccoon_detector.json。我們選擇 MobileNet7_5 作為架構(gòu)(其中 7_5 是原始 Mobilenet 實現(xiàn)的 alpha 參數(shù),控制網(wǎng)絡的寬度)和 224x224 作為輸入大小。讓我們看一下配置中最重要的參數(shù):
類型是模型前端 - 分類器、檢測器或 Segnet
架構(gòu)是模型后端(特征提取器)
- 全 Yolo - Tiny Yolo - MobileNet1_0 - MobileNet7_5 - MobileNet5_0 - MobileNet2_5 - SqueezeNet - VGG16 - ResNet50
有關(guān)錨點的更多信息,請在此處閱讀 https://github.com/pjreddie/darknet/issues/568
標簽是數(shù)據(jù)集中存在的標簽。重要提示:請列出數(shù)據(jù)集中存在的所有標簽。
object_scale確定對對象預測器置信度的錯誤預測懲罰多少
no_object_scale確定對非對象預測器的置信度的錯誤預測懲罰多少
coord_scale確定對錯誤位置和大小預測(x、y、w、h)的懲罰程度
class_scale決定對錯誤的類預測懲罰多少
增強- 圖像增強、調(diào)整大小、移動和模糊圖像,以防止過度擬合并在數(shù)據(jù)集中有更大的多樣性。
train_times, validation_times - 重復數(shù)據(jù)集的次數(shù)。如果您有增強功能,則很有用
啟用
first_trainable_layer - 如果您使用的是預訓練的特征網(wǎng)絡,則允許您凍結(jié)某些層
現(xiàn)在我們需要下載我在Google Drive上共享的數(shù)據(jù)集(原始數(shù)據(jù)集),這是一個浣熊檢測數(shù)據(jù)集,包含 150 張帶注釋的圖片。
確保相應地更改配置文件(train_image_folder、train_annot_folder)中的行,然后使用以下命令(來自 aXeleRate 文件夾)開始訓練:
python axelerate/train.py -c configs/raccoon_detector.json
train.py 從 .json 文件中讀取配置并使用 axelerate/networks/yolo/yolo_frontend.py 腳本訓練模型。yolo/backend/loss.py 是實現(xiàn)自定義損失函數(shù)的地方,yolo/backend/network.py 是創(chuàng)建模型的地方(輸入、特征提取器和檢測層放在一起)。axelerate/networks/common_utils/fit.py 是實現(xiàn)訓練過程的腳本,而 axelerate/networks/common_utils/feature.py 包含特征提取器。如果您打算使用帶有 K210 芯片和 Micropython 固件的訓練模型,由于內(nèi)存限制,您可以在 MobileNet(2_5、5_0 和 7_5)和 TinyYolo 之間進行選擇,但我發(fā)現(xiàn) MobileNet 提供了更好的檢測精度。
由于它是一個玩具示例并且僅包含 150 張浣熊的圖像,因此即使沒有 GPU,訓練過程也應該非常快,盡管準確度遠非一流。對于與工作相關(guān)的項目,我訓練了一個交通標志檢測器和一個數(shù)字檢測器,這兩個數(shù)據(jù)集都包含了數(shù)千個訓練示例。
第 4 步:將其轉(zhuǎn)換為 .kmodel 格式

使用aXeleRate,模型轉(zhuǎn)換是自動進行的——這可能是與舊版訓練腳本最大的不同!另外,您可以將模型文件和訓練圖整齊地保存在項目文件夾中。此外,我確實發(fā)現(xiàn)驗證準確度有時無法估計對象檢測的模型實際性能,這就是為什么我添加 mAP 作為對象檢測模型的驗證指標的原因。您可以在此處閱讀有關(guān) mAP 的更多信息。
如果 mAP、平均精度(我們的驗證指標)在 20 個 epoch 內(nèi)沒有提高,則訓練將提前停止。每次 mAP 改進時,模型都會保存在項目文件夾中。訓練結(jié)束后,aXeleRate 自動將最佳模型轉(zhuǎn)換為指定格式 - 您現(xiàn)在可以選擇“tflite”、“k210”或“edgetpu”。
現(xiàn)在到最后一步,在 Sipeed 硬件上實際運行我們的模型!
第 5 步:在 Micropython 固件上運行

可以使用 C 代碼使用我們的對象檢測模型運行推理,但為了方便起見,我們將使用 Micropython 固件和 MaixPy IDE 代替。
從這里下載MaixPy IDE和從這里下載 micropython 固件。您可以使用 python 腳本 kflash.py 燒錄固件或在此處下載單獨的 GUI flash 工具。
將 model.kmodel 復制到 SD 卡的根目錄,并將 SD 卡插入 Sipeed Maix Bit(或其他 K210 設備)。或者,您可以將 .kmodel 刻錄到設備的閃存中。我的示例腳本從閃存讀取 .kmodel。如果您使用的是 SD 卡,請更改此行
task = kpu.load(0x200000)
至
task = kpu.load("/sd/model.kmodel")
打開 MaixPy IDE 并按下連接按鈕。從 example_scripts/k210/detector 文件夾打開 raccoon_detector.py 腳本,然后按開始按鈕。您應該會看到來自攝像機的實時流,周圍有邊界框……好吧,浣熊。您可以通過提供更多訓練示例來提高模型的準確性,但請記住,它是精靈小模型(1.9 M),并且在檢測小物體時會遇到麻煩(由于分辨率低)。
我在上一篇關(guān)于圖像識別的文章的評論中收到的一個問題是如何通過 UART/I2C 將檢測結(jié)果發(fā)送到連接到 Sipeed 開發(fā)板的其他設備。在我的 github 存儲庫中,您將能夠找到另一個示例腳本 raccoon_detector_uart.py,它(您猜對了)檢測浣熊并通過 UART 發(fā)送邊界框的坐標。請記住,用于 UART 通信的引腳因不同的板而異,您需要在文檔中自行檢查。
第 6 步:總結(jié)
Kendryte K210 是用于計算機視覺的堅固芯片,靈活,但可用內(nèi)存有限。到目前為止,在我的教程中,我們已經(jīng)介紹了使用它來識別自定義對象、檢測自定義對象和運行一些基于 OpenMV 的計算機視覺任務。我知道它也適用于人臉識別,并且經(jīng)過一些修改,應該可以進行姿勢檢測和圖像分割(例如用于單目深度估計)。隨意 fork 我的 GitHub 存儲庫并自己做一些很棒的事情!
以下是我在編寫本教程時使用的一些文章,如果您想了解有關(guān)使用神經(jīng)網(wǎng)絡進行對象檢測的更多信息,請查看:
關(guān)于 YOLO 對象本地化如何與 Keras 配合使用的溫和指南(第 2 部分)
使用 YOLO、YOLOv2 和現(xiàn)在的 YOLOv3 進行實時對象檢測
希望您可以利用您現(xiàn)在擁有的知識來構(gòu)建一些帶有機器視覺的很棒的項目!你可以在這里購買 Sipeed 板,它們是嵌入式系統(tǒng)上機器學習最便宜的選擇之一。
如果您有任何問題,請在LinkedIn上添加我,并訂閱我的 YouTube 頻道,以獲得有關(guān)機器學習和機器人技術(shù)的更多有趣項目的通知。
- 使用K210和Arduino IDE/Micropython進行圖像識別
- K210命令行開發(fā)環(huán)境搭建指南 5次下載
- K210中斷按鍵,自復位按鍵的兩種狀態(tài)
- K210學習記錄(1)——GPIO與軟件使用
- 基于K210的MNIST手寫數(shù)字識別
- K210應用5-使用查詢方式通過UART接收數(shù)據(jù)
- 【堪智K210】 下載程序的過程原理 探索
- 亞博智能K210開發(fā)板學習筆記
- K210應用4-使用中斷方式檢測按鍵
- K210應用4-使用查詢方式檢測按鍵
- Maix Bit(K210) 裸機開發(fā)教程(八)實現(xiàn)簡易照相機
- maixpy k210 GPIO操作
- Maix Bit K210點燈【保姆級教程】
- k210單片機初學
- Kendryte K210開發(fā)板使用說明書 64次下載
- OpenCV4.8 C++實現(xiàn)YOLOv8 OBB旋轉(zhuǎn)對象檢測 1778次閱讀
- 對象檢測邊界框損失函數(shù)–從IOU到ProbIOU介紹 3001次閱讀
- YOLOv8實現(xiàn)旋轉(zhuǎn)對象檢測 1933次閱讀
- 詳解對象檢測網(wǎng)絡性能評價指標mAP計算 553次閱讀
- 利用opencv+openpose實現(xiàn)人體姿態(tài)檢測 3057次閱讀
- 如何進行圖像邊緣的檢測 1285次閱讀
- 通過Opencv+Openpose實現(xiàn)體姿態(tài)檢測 1162次閱讀
- 如何在LiDAR點云上進行3D對象檢測 2211次閱讀
- 三星TQ210v4開發(fā)板配置和核心板參數(shù) 3581次閱讀
- 天嵌科技TQ210v3開發(fā)板不含模塊-三星系列介紹 2615次閱讀
- 友善之臂Tiny210核心板介紹 8084次閱讀
- 友善之臂Smart210核心板介紹 1w次閱讀
- 友善之臂Mini210s開發(fā)板介紹 5892次閱讀
- 天嵌科技TQ210CoreB核心板-三星系列規(guī)格 2274次閱讀
- 關(guān)于三星系列TQ210v4開發(fā)板套裝的相關(guān)信息 2829次閱讀
下載排行
本周
- 1山景DSP芯片AP8248A2數(shù)據(jù)手冊
- 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開發(fā)指南
- 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開關(guān)電源設計實例指南
- 未知 | 21549次下載 | 免費
- 5電氣工程師手冊免費下載(新編第二版pdf電子書)
- 0.00 MB | 15349次下載 | 免費
- 6數(shù)字電路基礎pdf(下載)
- 未知 | 13750次下載 | 免費
- 7電子制作實例集錦 下載
- 未知 | 8113次下載 | 免費
- 8《LED驅(qū)動電路設計》 溫德爾著
- 0.00 MB | 6656次下載 | 免費
總榜
- 1matlab軟件下載入口
- 未知 | 935054次下載 | 免費
- 2protel99se軟件下載(可英文版轉(zhuǎn)中文版)
- 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次下載 | 免費
評論