K210学习记录(3)——kmodel生成与使用
0、引言
2022更新說明:這塊芯片水太深,能不碰最好別碰,官方當時留的資料實在太少(或者說我太菜)。
如果要調用最新的nncase工具箱所支持的算子,最好采用嘉楠自家工具鏈+VScode進行開發。不建議采用迦南官方編譯器,雖然集成了大量栗子,但講解較為含糊,不利于開發,即使給了例程,大概率也不知道怎么改那些API)。
如果我做成了,后期我會出一個較為詳細的文檔,記錄如何實現整個流程
Pytorch——》ONNX——》KModel——》Run
該博客僅作為學習K210單片機KPU跑目標檢測模型記錄,本人新人小白,本文旨在備忘,如有錯誤,還望指出,謝謝。
硬件:Sipeed Maix Dock開發板
軟件:MaixPy IDE,NNCase Converter v0.1.0 RC5(模型轉換工具)
相關工具及軟件點擊這里不需積分下載
1、模型轉換
1.1、首先需要下載NNCase工具箱,各版本下載地址
1.2、有關nnc的使用,在Windows下首先在運行中,輸入CMD,打開命令行窗口
1.3、使用cd命令,到nnc的根目錄下
1.4、后使用nnc相關命令行進行操作,命令行說明可以參考
在將yolo.tflite模型放到ncc根目錄下后,使用以下命令進行轉換
其中yolo.tflite為ncc工具根目錄下的待轉換模型,yolo.kmodel為轉換完成的模型名稱(提前設定),-i tflite代表輸入模型格式,而-o k210model則代表輸出模型模式,–dataset images代表量化圖片所存放的文件夾,images是文件夾名,一般放入訓練集圖片即可。
最終即可在ncc根目錄下找到轉換完成的kmodel文件
同時,你也可以使用QT版ncc轉換工具,目前僅支持tflift格式的模型文件
2、模型使用
2.1、檢查模型
通過上述步驟得到kmodel文件后,將其拷貝進FAT32格式的TF卡中(可以不用格式化),后將TF卡插入K210開發板
并使用以下代碼進行測試。如成功讀取到TF卡中的模型文件,液晶屏上將顯示模型地址及模型尺寸。如下圖所示
其中kpu.load()函數的使用說明詳見此,博客地址
源代碼見此
在確認K210單片機能正確識別到tf卡中的kmodel后,我們就可以進行下一步的工作了。
2.2、使用模型
from Maix import GPIO, I2S, FFT import image, lcd, math,sensor,time import KPU as kpu#對攝像頭進行初始化 sensor.reset() sensor.set_pixformat(sensor.RGB565) sensor.set_framesize(sensor.QVGA) #sensor.set_windowing((224, 224)) #sensor.set_windowing((320, 240)) sensor.set_brightness(2) sensor.set_vflip(1) sensor.run(1)#初始化液晶屏 lcd.init(freq=15000000) lcd.clear()clock = time.clock() #標簽類名 classes = ['aeroplane', 'bicycle', 'bird', 'boat', 'bottle', 'bus', 'car', 'cat', 'chair', 'cow', 'diningtable', 'dog', 'horse', 'motorbike', 'person', 'pottedplant', 'sheep', 'sofa', 'train', 'tvmonitor']#加載SD卡中的模型 task = kpu.load("/sd/yolo.kmodel") ##測試模型是否加載成功,如成功會返回模型地址和模型尺寸 #lcd.draw_string(1, 1, str(task), lcd.RED, lcd.BLACK)#設置錨框大小 anchor = (1.08, 1.19, 3.42, 4.41, 6.63, 11.38, 9.42, 5.11, 16.62, 10.52) #初始化kpu yolo2 #形參:模型尺寸,mp_obj a = kpu.init_yolo2(task, 0.5, 0.3, 5, anchor) while(True):#用于計算FPS值clock.tick()#將攝像頭采集到的值賦給img這個變量img = sensor.snapshot()code = kpu.run_yolo2(task, img)#打印幀率(115200)print(clock.fps())if code:for i in code:#畫矩形框a=img.draw_rectangle(i.rect())#顯示出來a = lcd.display(img)for i in code:#打印類標簽(根據bbox位置)lcd.draw_string(i.x(), i.y(), classes[i.classid()], lcd.RED, lcd.WHITE)lcd.draw_string(i.x(), i.y()+12, '%f1.3'%i.value(), lcd.RED, lcd.WHITE)else:a = lcd.display(img) a = kpu.deinit(task)3、參考資料
https://github.com/TonyZ1Min/yolo-for-k210
https://blog.sipeed.com/p/677.html
https://github.com/kendryte/nncase/tree/master/examples/20classes_yolo
總結
以上是生活随笔為你收集整理的K210学习记录(3)——kmodel生成与使用的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: MobCtrl.exe服务器端软件下载
- 下一篇: FPGA抗辐射加固方法