Edge Impulse libraries or firmware

Hi, Im currently working on project that used OpenMV H7 plus. As far as i read from documentation, Edge Impulse is the best approach for exporting the quantized model
My question are:

  • What are the main differences between using Edge Impulse library vs deploy as OpenMV firmware(prebuilt firmware)?
    From EI docs,
    This method only works on small image classification models , if you run into a memory issue, please head to Deploying your impulse as an OpenMV firmware section (preferred method).

i thought that both put model into internal flash memory. Or the Edge Impulse firmware is heavily optimized for running model? and OpenMV original firmware works well for other cases?

Edge Impulse doesn’t have a different firmware, it’s still our firmware. They clone our firmware, add a model, and then build it. When models are added this way they get stored in flash so they don’t require memory to be loaded into. You can do the exact same using the upstream/latest firmware, adding your own model and then building the firmware (either locally or using our github workflows).

1 Like

Thanks for quick response. One more question, when we drag and drop a TFlite file(libraries) into virtual memory, is it stored in flash memory as well? For example, consider when using tf.load(path [, load_to_fb=False]) function:
If the model is on the virtual disk, it loads all the weights and runs on the MicroPython heap, we can turn on load_to_fb to use framebuffer as well for our detection task.
If the model is in internal flash memory, it takes the weights from flash memory to save ram memory.
Is my understanding correct? So the best and most flexible way is to add model to openmv firmware src folder and build it.

No, it gets loaded from the filesystem to RAM. And it’s not virtual memory it’s real flash space reserved for a filesystem.

The most flexible way would be to store models on the filesystem of course. Adding models to the firmware requires rebuilding the firmware. There’s no best way, it depends on your application. If you’re deploying one model and it will not change, then building it in the firmware is a good idea.