Does replacing 3x3 filters with 3x1 and 1x3 filters improve the performance?

Recently I have come up with a VGG16 model for my binary classification task. I have relatively simple signal images

Therefore (maybe?) other deeper models like resnet18 and Inceptionv3 were not as good. As known, VGG uses 3x3 filters for convolving the images to make feature maps. I have tried several hyper-parameters to get a desired performance. However, there are still some things I need to do. I was thinking of replacing the 3x3 conv filters with 3x1 followed by 1x3 filters to reduce the compute. I think it will definitely do so considering the multiplications (9 operations for 3x3and 6 for 3x1 followed by 1x3).

Then I came to think: If I replace all the 3x3 filters with separable filters, will I get any performance improvement?

What are the benefits of replacing 3x3 filters with separable ones?

Thanks

• Do you have to use an image of the signal plot like your example here? Do you have access to the raw signal data instead? Sep 23, 2020 at 16:21
• yes I can only use images like shown above. I wish I had a raw signal data. Sep 23, 2020 at 23:59

If the filter is separable, that is, the NxM kernel can be mathematically equal to the convolution of a Nx1 filter and a 1xM filter, there are a very important increase in performance.

Using separable convolution, the network can made an optimal usage of the shared memory and of the parallelism in memory access. See this excellent article for details. These improvements are bigger for bigger kernels.

Also the training is improved, starting by the simple fact that a NxM filter has a number of parameters proportional to N*M but the related separable one has N+M.

• the linked document doesn't provide any info that separable filters increase the performance, although it does say that it increases efficiency. Oct 26, 2020 at 3:54
• @bit_scientist: see chapters "Separable Filters Can Increase Efficiency" and "Performance" (this one with a comparative graphic againts one of the other usual methods, convolution texture) Oct 26, 2020 at 9:41

First of all, Keep in mind that maths operations aren’t the only thing that contribute to performance. Memory bandwidth can also be a factor.

And most importantly, we want to capture as much area as we can in lowest possible number of operations. So in 3x3 kernel case, we can capture 9 cells in one shot, but with 3x1 followed by 1x3, we have to compute 6 times to capture 9 cells. Which clearly states that 3x3 kernel is far more efficient than these two sequential kernels.