用maixHub訓練<分類>模型-k210

 用maixHub訓練<分類>模型-k210


碎碎唸

突然想用k210的優勢來做點什麼,想了想它的優勢在於運算機器
學習和深度學習上很快,加上辨識各種物品等等...,原本官網上
有些人分享了他們自己訓練的模型,但我想了想,總不一直用現
成的吧!所以呢就開始研究如何收集數據集和預處理到把數據送
去訓練成模組。這花了兩天的時間才搞好,所以要先想好要用哪
個流程下去採集數據和訓練,網路上的資料有兩種方式
  • 使用官網的線上模型訓練
  • 使用本地端訓練
原本用在線訓練,但一直不成功,後來想辦法用本地訓練,但是......
要安裝一堆有的沒的,而且不易成功,後來看官方文件推薦使用開
發板做採集數據,再用官方提供的預處理軟體,封包好再送上去線
上訓練。接下就是我要紀錄官方的方式做訓練模型。

硬體準備>>>

  • Maix Duino(鏡頭和LCD)
  • SD卡
  • 電源線

1>準備數據集

準備數據集可以採用手機拍照或直接用官方的程式+開發板拍照
我是採用官方的方式,因為拍出來就直接是224x224(這是規定的像素)
另外也要滿足 Maixhub 的要求:

目標分類: 每類圖片數量不低於40張,比如採集 200 張(其實大概100張也可以)
目標檢測: 每類圖片數量不低於100張, 比如採集200張(其實大概100張也可以)

官方採集數據的程式和教程-如何採集數據
  1. 根據你的開發板修改攝像頭和屏幕配置, 比如lcd.rotation
  2. 準備一張支持 SPI 模式的 SD 卡, 分區為 MBR (msdos), 格式化為 FAT32
  3. 將目錄下的boot.py文件拷貝到 SD 卡根目錄
  4. 開發板斷電, 將SD卡插入開發板
  5. 開發板上電, 程序會自動創建一個目錄cap_images_1, 下次上電會創建cap_images_2, 這樣就避免了覆蓋
  6. 採集一個分類的圖片 按開發板上的boot按鍵,然後鬆開按鍵來採集一張圖片, 這會將圖片保存到cap_images_1/0/0.jpg, 採集的圖片的名字會自動增長, 比如0.jpg 1.jpg ...
  7. 長按boot按鍵切換類別目錄 這會創建一個新目錄,比如cap_images_1/1/, 後面採集的圖片都會被保存到這個新的目錄, 比如cap_images_1/1/0.jpg
  8. 開發板斷電,取出SD卡插到電腦, 打開文件管理器就可以看到採集的圖片了

目錄結構會像這樣

|
----ball
| |
| ---0.jpg
| |
| ---1.jpg
| |
| ---2.jpg
|
----toy
|
---0.jpg
|
---1.jpg



2>數據集預處理

注意:分類文件夾數量要大於 2個!
例如:
   |-Dir_name
      |-Class_1
        |- pic01.jpg
        |- pic02.jpg
        |- pic03.jpg
      |-Class_2
        |- pic01.jpg
        |- pic02.jpg
        |- pic03.jpg

接下來我們使用官方的預處理軟體

Download: DataAssitantVx.x

下載後進入解壓後的資料夾並點選啓動DataAssistant.exe



處理完後會得一個壓縮檔,這個就是我們要送到云端去訓練的模型


注意:
建議的圖片分辨率 224*224, 上傳之前可以使用工具批量轉換一下
每個分類不要低於40張圖片,否則無法開始訓練
數據集壓縮後大小不超過20M
子目錄名不能使用中文, 否則生成的label無法顯示

3>上傳數據集訓練模型

登入官網訓練模型-https://www.maixhub.com/ModelTraining

按<next>後,選剛剛本地端官方軟體預處理出來的zip檔,然後再按<next>


處理完後的畫面

將模型下載下來並解壓,裡面有一個boot.py,就是已經幫我們創建開機自動執行辨識的檔。



裡面有一個report.jpg,是模型的損失,準確度等等...



4>插入SD卡

這裡有兩種模式,一種是使用SD卡,另一種是直接燒到flash,我採用sd卡模式
將下載並解壓後,資料夾裡的檔案全部烤貝到SD卡的根目錄(不包含資料夾
,只要烤貝資料夾裡的各別檔案),再將SD卡插入開發板,通電後即可開始辨識

萬一出現kpu相關訊息怎麼辧?

如果開機後,沒有顯示畫面或出現kpu.load()錯誤訊息,就得更換更低
找到最新版本號,點進去找到有v4版的。






留言

這個網誌中的熱門文章

k210攝像頭實時鏡頭實驗

k210外部中斷的運用-irq()