邊緣設備上的計算機視覺

點擊上方AI算法與圖像處理”,選擇加"星標"或“置頂”

重磅乾貨,第一時間送達

幾周前,當在全球速賣通(AliExpress)購物時,偶然發現了一個很棒的Maixduino設備。它宣稱自帶RISC V架構和KPU (KPU是一個通用神經網絡處理器)。其不同規格如下;
  • CPU: RISC-V雙核64位,帶FPU
  • 圖像識別:QVGA@60fps / VGA@30fps
  • 芯片功耗< 300mW
說實話,這個單位很舊了,最近纔開始關注。考慮到我對邊緣計算的興趣,我想爲一個對象檢測示例提供一個完整的端到端指南。這個例子是基於這篇文章: https://www.instructables.com/Object-Detection-With-Sipeed-MaiX-BoardsKendryte-K/
但是,我將全面介紹如何收集圖像並對它們進行註釋。如果你想知道什麼是邊緣計算,請閱讀下面的文章。
  • https://medium.com/swlh/what-is-edge-computing-d27d15f843e
讓我們嘗試建立一個圖像檢測程序,將能夠檢測出蘋果和香蕉。有了檢測器,你可以變得更有創造力。在接下來的討論中,我們將討論所需的工具和庫。

遷移學習註釋

遷移學習是指我們使用預先訓練的模型來進一步專業化。簡單地說,就是用自己的分類層(或更多層)替換訓練過的模型的最後一個預測層。然後凍結除你的自定義層(或一些經過預訓練的層)以外的所有層。然後訓練網絡,以便使用預先訓練過的模型的特性來微調你的層,以預測你想要的類。
不幸的是,目前我們要訓練的網絡沒有任何預先訓練過的模型。因此,我們將從頭開始訓練。但這將是一個有趣的實驗!

準備數據

我們需要按以下格式準備數據。首先,我們需要有蘋果和香蕉的圖像。同時,我們需要對它們進行註釋,以確定每個水果可能在圖像中的位置。這就是目標分類和檢測之間的區別所在。我們需要說出物體在哪裏。爲此,你需要以下工具。
  • tzutalin / labelImg : https://github.com/tzutalin/labelImg
LabelImg是一個圖形圖像標註工具。它是用Python編寫的,使用Qt作爲圖形界面…
或者你可以使用我的工具使用你的背景和對象圖像生成註釋圖像(例如:來自Kaggle的Fruit 360的圖像)。閱讀更多:
用於對象檢測的註釋器: https://anuradhawick.medium.com/annotator-for-object-detection-950fd799b651
在我的例子中,我使用以下程序,因爲我從網絡攝像頭捕獲。選擇簡單的方法。下面的程序是用Nvidia jetson nano get started容器編譯的。
dusty-nv / camra-capture : https://github.com/dusty-nv/camera-capture

數據集訓練

我們想訓練我們的模型,這樣它們就可以在maxduino設備上運行。爲此,我們可以使用以下存儲庫。它對模型層進行了所有必要的修改,以適應K210處理器的體系結構。克隆並安裝所需的依賴項。所有說明可在以下鏈接獲得;
AIWintermuteAI / aXeleRate : https://github.com/AIWintermuteAI/aXeleRate
aXeleRate簡化了訓練,並將計算機視覺模型轉換爲在各種硬件平臺上運行……
我們需要將我們的訓練數據組織如下;

   
   
   
path-to/data
---anns      # store the training annotations
---imgs      # relevant images for the training
---anns_val  # validation annotations
---imgs_val  # validation images
現在我們需要創建一個配置。json設置訓練選項。對於我們的例子,它應該如下所示:

   
   
   
{
    "model" : {
        "type":                 "Detector",
        "architecture":         "MobileNet7_5",
        "input_size":           [224,224],
        "anchors":              [0.57273, 0.677385, 1.87446, 2.06253, 3.33843, 5.47434, 7.88282, 3.52778, 9.77052, 9.16828],
        "labels":               ["Apple""Banana"],
        "coord_scale" :  1.0,
        "class_scale" :  1.0,
        "object_scale" :  5.0,
        "no_object_scale" :  1.0
    },
    "weights" : {
        "full":     "",
        "backend":              "imagenet"
    },
    "train" : {
        "actual_epoch":         50,
        "train_image_folder":   "data/imgs",
        "train_annot_folder":   "data/anns",
        "train_times":          2,
        "valid_image_folder":   "data/imgs_val",
        "valid_annot_folder":   "data/anns_val",
        "valid_times":          2,
        "valid_metric":         "mAP",
        "batch_size":           4,
        "learning_rate":        1e-4,
        "saved_folder":     "obj_detector",
        "first_trainable_layer""",
        "augumentation":  true,
        "is_only_detect" :   false
    },
    "converter" : {
        "type":       ["k210"]
    }
}
注意:使用絕對路徑可以避免不必要的錯誤。
接下來,我們可以使用以下命令進行訓練;

   
   
   
python3 aXelerate/axelerate/traing.py -c config.json
現在訓練結束了。我們感興趣的是在項目文件夾中生成的kmodel文件。我們可以把它移到microSD卡上,然後連接到MaixDuino設備上。

預測

下面是我將在maixPy IDE中使用的草圖。

   
   
   
import sensor,image,lcd
import KPU as kpulcd.init()
sensor.reset()
sensor.set_pixformat(sensor.RGB565)
sensor.set_framesize(sensor.QVGA)
sensor.set_windowing((224224))
sensor.set_vflip(1)
sensor.run(1)classes = ["Apple""Banana"]
task = kpu.load("/sd/name_of_the_model_file.kmodel")
a = kpu.set_outputs(task, 07735)anchor = (0.572730.6773851.874462.062533.338435.474347.882823.527789.770529.16828)
a = kpu.init_yolo2(task, 0.30.35, anchor) while(True):
    img = sensor.snapshot().rotation_corr(z_rotation=90.0)
    a = img.pix_to_ai()
    code = kpu.run_yolo2(task, img)
    
    if code:
        for i in code:
            a = img.draw_rectangle(i.rect(),color = (02550))
            a = img.draw_string(i.x(),i.y(), classes[i.classid()],
                color=(255,0,0), scale=3)
            a = lcd.display(img)
    else:
        a = lcd.display(img)a = kpu.deinit(task)
一定要更改輸出參數,以適應kpu中訓練過的神經網絡中的輸出參數。set_outputs(task, 0, 7, 7, 35)。現在可以運行程序了。這很容易。查看以下截圖。
請注意,質量很低。這是因爲maixPy IDE允許我們將LCD顯示流傳輸到計算機。所以質量更差。
該圖像檢測程序可以在300mA電流下運行。此外,它有類似Arduino nano板的GPIO引腳。所以可能性是很多的。

  
       
       
       
個人微信(如果沒有備註不拉羣!
請註明: 地區+學校/企業+研究方向+暱稱



下載1:何愷明頂會分享


AI算法與圖像處理」公衆號後臺回覆:何愷明,即可下載。總共有6份PDF,涉及 ResNet、Mask RCNN等經典工作的總結分析


下載2:終身受益的編程指南:Google編程風格指南


AI算法與圖像處理」公衆號後臺回覆:c++,即可下載。歷經十年考驗,最權威的編程規範!




     
     
     
下載3 CVPR2021

AI算法與圖像處公衆號後臺回覆: CVPR 即可下載1467篇CVPR 2020論文 和 CVPR 2021 最新論文

點亮 ,告訴大家你也在看


本文分享自微信公衆號 - AI算法與圖像處理(AI_study)。
如有侵權,請聯繫 [email protected] 刪除。
本文參與“OSC源創計劃”,歡迎正在閱讀的你也加入,一起分享。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章