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数据集尝试行人检测。

posted @ 2020-06-27 17:27  DebugerCheng  阅读(1624)  评论(1)    收藏  举报