Keras Octave Convolutions (OctConv)
Keras implementation of the Octave Convolution blocks from the paper Drop an Octave: Reducing Spatial Redundancy in Convolutional Neural Networks with Octave Convolution.
Octave Convolutions are a semi-drop-in-replacement for regular convolution layers.
They are implemented in 3 major steps:
Intiailization of Dual Path Flow
initial_octconv block from
octave_conv.py to initialize the Octave convolution blocks. This function accepts a single input tensor, and returns two output tensors : The high frequency pathway and low frequency pathway tensors, in that order
ip = Input(...) x_high, x_low = initial_conv(ip, ...)
Add any number of Octave Convolution Blocks
Once the two frequency pathways have been obtained, use any number of
octave_conv.py to make the network larger.
Each of these blocks accept two input tensors, and emits two output tensors.
x_high, x_low = octconv_block(x_high, x_low, ...) x_high, x_low = octconv_block(x_high, x_low, ...) x_high, x_low = octconv_block(x_high, x_low, ...)
Merging the streams back together
Once you are finished adding
octconv_blocks, merge the two frequency pathways using
This block accepts two input tensors and one output tensor.
x = final_octconv(x_high, x_low, ...) ...
- Keras 2.2.4+
- Tensorflow 1.13+ (2.0 support depends on when Keras will support it) / Theano (not tested) / CNTK (not tested)