八度卷积
keras-octave-conv的Python项目详细描述
凯拉斯倍频程转换器
非正式实施Drop an Octave: Reducing Spatial Redundancy in Convolutional Neural Networks with Octave Convolution。
安装
pip install keras-octave-conv
用法
除了padding
参数被强制为'same'
之外,OctaveConv2D
层可以像Conv2D
层一样使用。
第一倍频程
对第一个倍频程层使用单个输入:
fromkeras.layersimportInputfromkeras_octave_convimportOctaveConv2Dinputs=Input(shape=(32,32,3))high,low=OctaveConv2D(filters=16,kernel_size=3,octave=2,ratio_out=0.125)(inputs)
这两个输出以较高和较低的空间分辨率表示结果。
特殊参数:
octave
:默认值是2
。空间维度的划分。ratio_out
:默认值是0.5
。低空间分辨率的滤波器比率。
中间倍频程
中间倍频程层接受两个输入并产生两个输出:
fromkeras.layersimportInput,MaxPool2Dfromkeras_octave_convimportOctaveConv2Dinputs=Input(shape=(32,32,3))high,low=OctaveConv2D(filters=16,kernel_size=3)(inputs)high,low=MaxPool2D()(high),MaxPool2D()(low)high,low=OctaveConv2D(filters=8,kernel_size=3)([high,low])
注意,在整个模型中应该使用相同的octave
值。
最后八度
将ratio_out
设置为0.0
,以获得用于进一步处理的单个输出:
fromkeras.layersimportInput,MaxPool2D,Flatten,Densefromkeras.modelsimportModelfromkeras_octave_convimportOctaveConv2Dinputs=Input(shape=(32,32,3))high,low=OctaveConv2D(filters=16,kernel_size=3)(inputs)high,low=MaxPool2D()(high),MaxPool2D()(low)high,low=OctaveConv2D(filters=8,kernel_size=3)([high,low])high,low=MaxPool2D()(high),MaxPool2D()(low)conv=OctaveConv2D(filters=4,kernel_size=3,ratio_out=0.0)([high,low])flatten=Flatten()(conv)outputs=Dense(units=10,activation='softmax')(flatten)model=Model(inputs=inputs,outputs=outputs)model.summary()
效用
octave_dual
有助于创建用于处理倍频程卷积输出的双层:
fromkeras.layersimportInput,MaxPool2D,Flatten,Densefromkeras.modelsimportModelfromkeras_octave_convimportOctaveConv2D,octave_dualinputs=Input(shape=(32,32,3))conv=OctaveConv2D(filters=16,kernel_size=3)(inputs)pool=octave_dual(conv,MaxPool2D())conv=OctaveConv2D(filters=8,kernel_size=3)(pool)pool=octave_dual(conv,MaxPool2D())conv=OctaveConv2D(filters=4,kernel_size=3,ratio_out=0.0)(pool)flatten=Flatten()(conv)outputs=Dense(units=10,activation='softmax')(flatten)model=Model(inputs=inputs,outputs=outputs)model.summary()
octave_conv_2d
创建具有内置keras层的倍频程结构:
fromkeras.layersimportInput,MaxPool2D,Flatten,Densefromkeras.modelsimportModelfromkeras.utilsimportplot_modelfromkeras_octave_convimportoctave_conv_2d,octave_dualinputs=Input(shape=(32,32,3),name='Input')conv=octave_conv_2d(inputs,filters=16,kernel_size=3,name='Octave-First')pool=octave_dual(conv,MaxPool2D(name='Pool-1'))conv=octave_conv_2d(pool,filters=8,kernel_size=3,name='Octave-Mid')pool=octave_dual(conv,MaxPool2D(name='Pool-2'))conv=octave_conv_2d(pool,filters=4,kernel_size=3,ratio_out=0.0,name='Octave-Last')flatten=Flatten(name='Flatten')(conv)outputs=Dense(units=10,activation='softmax',name='Output')(flatten)model=Model(inputs=inputs,outputs=outputs)model.summary()plot_model(model,to_file='octave_model.png')