def SparseVggNet()

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