running mobilenet on m5stickv



  • hello

    I'm trying to run the mobilenet classifier script:
    https://github.com/sipeed/MaixPy_scripts/tree/master/machine_vision/mobilenet_1000_class

    The tutorial says we should use the minimum firmware:
    https://cn.maixpy.sipeed.com/maixpy/en/course/ai/image/1000_type_classifier.html

    So I compiled a minimum firmware with only support for video and k4. It ended up with 1.2Mb. I also change the gc heap size as the tutorial says. But when I run the script, it says it doesn't have enough memory.

    E (2704939464) SYSCALL: Out of memory

    The error happens before I feed the images the the kpu, in the line where I define the sensor.framesize

    Is it even possible to run this script on the m5stickV?

    import lcd, sensor
    import KPU as kpu

    def lcd_init():
    lcd.init(type=3)
    lcd.register(0x3A, 0x05)
    lcd.register(0xB2, [0x05, 0x05, 0x00, 0x33, 0x33])
    lcd.register(0xB7, 0x23)
    lcd.register(0xBB, 0x22)
    lcd.register(0xC0, 0x2C)
    lcd.register(0xC2, 0x01)
    lcd.register(0xC3, 0x13)
    lcd.register(0xC4, 0x20)
    lcd.register(0xC6, 0x0F)
    lcd.register(0xD0, [0xA4, 0xA1])
    lcd.register(0xD6, 0xA1)
    lcd.register(0xE0, [0x23, 0x70, 0x06, 0x0C, 0x08, 0x09, 0x27, 0x2E, 0x34, 0x46, 0x37, 0x13, 0x13, 0x25, 0x2A])
    lcd.register(0xE1,[0x70, 0x04, 0x08, 0x09, 0x07, 0x03, 0x2C, 0x42, 0x42, 0x38, 0x14, 0x14, 0x27, 0x2C])

    task = kpu.load(0x300000)
    f=open('/flash/labels.txt','r')
    labels=f.readlines()
    f.close()

    print ('ok load kpu and labels')

    lcd_init()
    lcd.rotation(2) #Rotate the lcd 180deg

    sensor.reset()
    sensor.set_pixformat(sensor.RGB565)
    sensor.set_framesize(sensor.QVGA)
    #sensor.set_framesize(sensor.B128X128)
    sensor.run(1)
    sensor.skip_frames()

    print ('ok sensor')

    while (True):

    img = sensor.snapshot()
    img.crop(x_size=224, y_size=224)

    fmap = kpu.forward(task, img)
    plist=fmap[:]
    pmax=max(plist)
    max_index=plist.index(pmax)

    img = img.draw_string(0, 0, "%.2f: %s" %(pmax, labels[max_index].strip()), color=(255, 0, 0))
    #lcd.display(img, oft=(0,0))
    print(fps)