in sparseconvnet/networkArchitectures.py [0:0]
def SparseVggNet(dimension, nInputPlanes, layers):
"""
VGG style nets
Use submanifold convolutions
Also implements 'Plus'-augmented nets
"""
nPlanes = nInputPlanes
m = scn.Sequential()
for x in layers:
if x == 'MP':
m.add(scn.MaxPooling(dimension, 3, 2))
elif x[0] == 'MP':
m.add(scn.MaxPooling(dimension, x[1], x[2]))
elif x == 'C3/2':
m.add(scn.Convolution(dimension, nPlanes, nPlanes, 3, 2, False))
m.add(scn.BatchNormReLU(nPlanes))
elif x[0] == 'C3/2':
m.add(scn.Convolution(dimension, nPlanes, x[1], 3, 2, False))
nPlanes = x[1]
m.add(scn.BatchNormReLU(nPlanes))
elif x[0] == 'C' and len(x) == 2:
m.add(scn.SubmanifoldConvolution(dimension, nPlanes, x[1], 3, False))
nPlanes = x[1]
m.add(scn.BatchNormReLU(nPlanes))
elif x[0] == 'C' and len(x) == 3:
m.add(scn.ConcatTable()
.add(
scn.SubmanifoldConvolution(dimension, nPlanes, x[1], 3, False)
).add(
scn.Sequential()
.add(scn.Convolution(dimension, nPlanes, x[2], 3, 2, False))
.add(scn.BatchNormReLU(x[2]))
.add(scn.SubmanifoldConvolution(dimension, x[2], x[2], 3, False))
.add(scn.BatchNormReLU(x[2]))
.add(scn.Deconvolution(dimension, x[2], x[2], 3, 2, False))
)).add(scn.JoinTable())
nPlanes = x[1] + x[2]
m.add(scn.BatchNormReLU(nPlanes))
elif x[0] == 'C' and len(x) == 4:
m.add(scn.ConcatTable()
.add(
scn.SubmanifoldConvolution(dimension, nPlanes, x[1], 3, False)
)
.add(
scn.Sequential()
.add(scn.Convolution(dimension, nPlanes, x[2], 3, 2, False))
.add(scn.BatchNormReLU(x[2]))
.add(scn.SubmanifoldConvolution(dimension, x[2], x[2], 3, False))
.add(scn.BatchNormReLU(x[2]))
.add(scn.Deconvolution(dimension, x[2], x[2], 3, 2, False))
)
.add(scn.Sequential()
.add(scn.Convolution(dimension, nPlanes, x[3], 3, 2, False))
.add(scn.BatchNormReLU(x[3]))
.add(scn.SubmanifoldConvolution(dimension, x[3], x[3], 3, False))
.add(scn.BatchNormReLU(x[3]))
.add(scn.Convolution(dimension, x[3], x[3], 3, 2, False))
.add(scn.BatchNormReLU(x[3]))
.add(scn.SubmanifoldConvolution(dimension, x[3], x[3], 3, False))
.add(scn.BatchNormReLU(x[3]))
.add(scn.Deconvolution(dimension, x[3], x[3], 3, 2, False))
.add(scn.BatchNormReLU(x[3]))
.add(scn.SubmanifoldConvolution(dimension, x[3], x[3], 3, False))
.add(scn.BatchNormReLU(x[3]))
.add(scn.Deconvolution(dimension, x[3], x[3], 3, 2, False))
)).add(scn.JoinTable())
nPlanes = x[1] + x[2] + x[3]
m.add(scn.BatchNormReLU(nPlanes))
elif x[0] == 'C' and len(x) == 5:
m.add(scn.ConcatTable()
.add(
scn.SubmanifoldConvolution(dimension, nPlanes, x[1], 3, False)
)
.add(
scn.Sequential()
.add(scn.Convolution(dimension, nPlanes, x[2], 3, 2, False))
.add(scn.BatchNormReLU(x[2]))
.add(scn.SubmanifoldConvolution(dimension, x[2], x[2], 3, False))
.add(scn.BatchNormReLU(x[2]))
.add(scn.Deconvolution(dimension, x[2], x[2], 3, 2, False))
)
.add(scn.Sequential()
.add(scn.Convolution(dimension, nPlanes, x[3], 3, 2, False))
.add(scn.BatchNormReLU(x[3]))
.add(scn.SubmanifoldConvolution(dimension, x[3], x[3], 3, False))
.add(scn.BatchNormReLU(x[3]))
.add(scn.Convolution(dimension, x[3], x[3], 3, 2, False))
.add(scn.BatchNormReLU(x[3]))
.add(scn.SubmanifoldConvolution(dimension, x[3], x[3], 3, False))
.add(scn.BatchNormReLU(x[3]))
.add(scn.Deconvolution(dimension, x[3], x[3], 3, 2, False))
.add(scn.BatchNormReLU(x[3]))
.add(scn.SubmanifoldConvolution(dimension, x[3], x[3], 3, False))
.add(scn.BatchNormReLU(x[3]))
.add(scn.Deconvolution(dimension, x[3], x[3], 3, 2, False))
)
.add(scn.Sequential()
.add(scn.Convolution(dimension, nPlanes, x[4], 3, 2, False))
.add(scn.BatchNormReLU(x[4]))
.add(scn.SubmanifoldConvolution(dimension, x[4], x[4], 3, False))
.add(scn.BatchNormReLU(x[4]))
.add(scn.Convolution(dimension, x[4], x[4], 3, 2, False))
.add(scn.BatchNormReLU(x[4]))
.add(scn.SubmanifoldConvolution(dimension, x[4], x[4], 3, False))
.add(scn.BatchNormReLU(x[4]))
.add(scn.Convolution(dimension, x[4], x[4], 3, 2, False))
.add(scn.BatchNormReLU(x[4]))
.add(scn.SubmanifoldConvolution(dimension, x[4], x[4], 3, False))
.add(scn.BatchNormReLU(x[4]))
.add(scn.Deconvolution(dimension, x[4], x[4], 3, 2, False))
.add(scn.BatchNormReLU(x[4]))
.add(scn.SubmanifoldConvolution(dimension, x[4], x[4], 3, False))
.add(scn.BatchNormReLU(x[4]))
.add(scn.Deconvolution(dimension, x[4], x[4], 3, 2, False))
.add(scn.BatchNormReLU(x[4]))
.add(scn.SubmanifoldConvolution(dimension, x[4], x[4], 3, False))
.add(scn.BatchNormReLU(x[4]))
.add(scn.Deconvolution(dimension, x[4], x[4], 3, 2, False))
)).add(scn.JoinTable())
nPlanes = x[1] + x[2] + x[3] + x[4]
m.add(scn.BatchNormReLU(nPlanes))
return m