We are running a survey to help us improve the experience for all of our members. If you see the survey appear, please take the time to tell us about your experience if you can.
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.