K210 MAIX DOCK 初探(一)——记"raccoon"检测调试记录


      都说K210是业界良心,上周有幸入手一个欲探究竟,实物如下图所示。

在github上挑选了个“raccoon”检测例程用于调试,代码地址https://github.com/TonyZ1Min/yolo-for-k210,该仓库的文档做得比较详细,首先进行PC端的训练,训练完后能在工程目录下得到tmp.h5(7.4M左右)的训练模型,然后用ncc工具将其转化成kmodel文件,得到test.kmodel (1.8M左右),接下就是MCU端的配置。

       首先给MCU上电,用kflash工具刷入MaixPy(这里使用的是maixpy_v0.5.0_22_g7ac6b09.bin,地址为0x000000)固件,一个清新亮眼的界面映入眼帘,如下图所示

按照接下来步骤应该将之前生成的kmodel同样地用kflash烧录进去,地址设为0x300000(5个零!),但烧录进去后,发现MaixPy IDE连不上MCU了,于是只得把MaixPy重新刷一遍才能重新连上,可见,把kmodel直接烧进板子的flash是不行的!这个问题怎么解决呢,查找了多个blog,有人提到要把MaixPy与kmodel一起烧进flash,并设置不同的地址,抱着试一试的想法,我在kflash工具中先加入MaixPy文件,地址为0x000000,如下图

   再点【增加文件】选择kmodel文件,地址为0300000,如图

    选择【打包为kfpkg】,将kmodel文件与Maixpy文件打包为kfpkg文件,之后再加载该文件,烧入flash

  即可连接成功!而后在MaixPy IDE中调入以下测试程序

 1 # Untitled - By: Administrator - 周二 6月 23 2020
 2 
 3 import sensor,image,lcd,time
 4 import KPU as kpu 5 6 lcd.init(freq=15000000) 7 sensor.reset() 8 sensor.set_pixformat(sensor.RGB565) 9 sensor.set_framesize(sensor.QVGA) 10 #sensor.set_hmirror(1) 11 #sensor.set_vflip(1) 12 sensor.set_windowing((224, 224)) 13 sensor.set_brightness(2) 14 #sensor.set_contrast(-1) 15 #sensor.set_auto_gain(1,2) 16 17 sensor.run(1) 18 clock = time.clock() 19 classes = ['class_1'] 20 task = kpu.load(0x300000) 21 anchor = (1, 1.2, 2, 3, 4, 3, 6, 4, 5, 6.5) 22 a = kpu.init_yolo2(task, 0.17, 0.3, 5, anchor) 23 24 while(True): 25  clock.tick() 26 img = sensor.snapshot() 27 #lcd.display(img) 28 29 code = kpu.run_yolo2(task, img) 30 print(clock.fps()) 31 if code: 32 for i in code: 33 a=img.draw_rectangle(i.rect()) 34 a = lcd.display(img) 35 print(i.classid(),i.value()) 36 for i in code: 37  lcd.draw_string(i.x(), i.y(), classes[i.classid()], lcd.RED, lcd.WHITE) 38 lcd.draw_string(i.x(), i.y()+12, '%f1.3'%i.value(), lcd.RED, lcd.WHITE) 39 else: 40 a = lcd.display(img) 41 42 a = kpu.deinit(task)

选择运行后,发现黑屏!瞬间有被骗的感觉!只好进入调试模式,但MaixPy IDE没有单步调试,各位大佬有什么好的调试工具也欢迎评论一个,感谢万分!我用的是串口调试工具,putty 发现是模型加载,即task=kpu.load(0x300000)出了问题,若没有这句话,显示摄像机捕捉的画面是没有问题的!但这句话本身并没有问题呀!是哪里的问题呢?经过串口调试发现,其实在连通板子后加载模型就没有问题,但如果在以上代码处加载就会报“out of memory”的错误,这作何解释??但至少说明一点加载模型的位置不对,于是调整代码,如下:

# Untitled - By: Administrator - 周二 6月 23 2020

import sensor,image,lcd,time
import KPU as kpu task = kpu.load(0x300000) lcd.init(freq=15000000) sensor.reset() sensor.set_pixformat(sensor.RGB565) sensor.set_framesize(sensor.QVGA) #sensor.set_hmirror(1) #sensor.set_vflip(1) sensor.set_windowing((224, 224)) sensor.set_brightness(2) #sensor.set_contrast(-1) #sensor.set_auto_gain(1,2)  sensor.run(1) clock = time.clock() classes = ['class_1'] anchor = (1, 1.2, 2, 3, 4, 3, 6, 4, 5, 6.5) a = kpu.init_yolo2(task, 0.17, 0.3, 5, anchor) while(True): clock.tick() img = sensor.snapshot() #lcd.display(img)  code = kpu.run_yolo2(task, img) print(clock.fps()) if code: for i in code: a=img.draw_rectangle(i.rect()) a = lcd.display(img) print(i.classid(),i.value()) for i in code: 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)

即可正常运行!效果如图

  总体来说,K210的帧率还不错,但精度不太理想,可能是和训练的样本数量太少有关,后续将结合caltech数据集尝试行人检测。


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM