I've been investigating how to implement 2-D convolution filters (e.g. Gaussian blur, Sobel) with the CMSIS API.
Reference discussion: http://www.songho.ca/dsp/convolution/convolution2d_example.html
Fortunately, the 2-D filters I'm working with are separable; meaning, I can do two successive 1-D convolutions:
- 1D convolution on rows
- transpose the output
- 1D convolution on columns
So I see examples on how to use 1-D convolution, but I have more questions to that:
Q1: is there an "integer-only" example?
Q2: I found some functions that can do matrix transpose, but the minimum base elements are q15_t. Why aren't there q7_t variants to this?
I guess the main question to this: has anyone done this type of operation with CMSIS?
Of note, I'm working on an i.MX1052 M7 core. I'm also working with 8-bit data units.
Thanks, Charles
Hey Charles,
Sorry on the delay.
Couple of questions: are you more looking to experiment, or are you actually looking at working on ML on the M7.
Easy way, use TensorflowLite Micro.
https://www.tensorflow.org/lite/microcontrollers/get_started_low_level
Harder way, CMSIS-NN libraries. These are all upstreamed to TFLite Micro, so it uses them. If you're looking to "build from scratch" that might be the easier way to go.
https://www.keil.com/pack/doc/CMSIS/NN/html/index.html
I'm not sure those libraries help, but there are integer variants. Let me know if that's not helpful.