Spatially-sparse convolutional networks. Allows processing of sparse 2, 3 and 4 dimensional data.Build CNNs on the square/cubic/hypercubic or triangular/tetrahedral/hyper-tetrahedral lattices.
Switch branches/tags
Nothing to show
Clone or download
Pull request Compare This branch is 77 commits behind btgraham:master.
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Permalink
Failed to load latest commit information.
Data
figures
weights
.gitignore
BatchProducer.cu
BatchProducer.h
CVAP_RHA_Picture.cpp
CVAP_RHA_Picture.h
ConvolutionalLayer.cu
ConvolutionalLayer.h
ConvolutionalTriangularLayer.cu
ConvolutionalTriangularLayer.h
IndexLearnerLayer.cu
IndexLearnerLayer.h
Makefile
MaxPoolingLayer.cu
MaxPoolingLayer.h
MaxPoolingTriangularLayer.cu
MaxPoolingTriangularLayer.h
NetworkArchitectures.cpp
NetworkArchitectures.h
NetworkInNetworkLayer.cu
NetworkInNetworkLayer.h
Off3DFormatPicture.cpp
Off3DFormatPicture.h
Off3DFormatTriangularPicture.cpp
OnlineHandwritingPicture.cpp
OnlineHandwritingPicture.h
OnlineHandwritingTriangularPicture.cpp
OpenCVPicture.cpp
OpenCVPicture.h
OpenCVTriangularPicture.cpp
Picture.cpp
Picture.h
README.md
ReallyConvolutionalLayer.cu
ReallyConvolutionalLayer.h
Regions.cpp
Regions.h
Rng.cpp
Rng.h
SigmoidLayer.cu
SigmoidLayer.h
SoftmaxClassifier.cu
SoftmaxClassifier.h
SparseConvNet.cu
SparseConvNet.h
SparseConvNetCUDA.cu
SparseConvNetCUDA.h
SparseGrid.h
SpatiallySparseBatch.cu
SpatiallySparseBatch.h
SpatiallySparseBatchInterface.cu
SpatiallySparseBatchInterface.h
SpatiallySparseDataset.cpp
SpatiallySparseDataset.h
SpatiallySparseDatasetCIFAR10.cpp
SpatiallySparseDatasetCIFAR10.h
SpatiallySparseDatasetCIFAR100.cpp
SpatiallySparseDatasetCIFAR100.h
SpatiallySparseDatasetCVAP_RHA.cpp
SpatiallySparseDatasetCVAP_RHA.h
SpatiallySparseDatasetCasiaOLHWDB.cpp
SpatiallySparseDatasetCasiaOLHWDB.h
SpatiallySparseDatasetImageNet2012.cpp
SpatiallySparseDatasetImageNet2012.h
SpatiallySparseDatasetKagglePlankton.cpp
SpatiallySparseDatasetKagglePlankton.h
SpatiallySparseDatasetMnist.cpp
SpatiallySparseDatasetMnist.h
SpatiallySparseDatasetSHREC2015.cpp
SpatiallySparseDatasetSHREC2015.h
SpatiallySparseDatasetUCF101.cpp
SpatiallySparseDatasetUCF101.h
SpatiallySparseLayer.cu
SpatiallySparseLayer.h
TerminalPoolingLayer.cu
TerminalPoolingLayer.h
UCF101Picture.cpp
UCF101Picture.h
casia.cpp
casia3d.cpp
cifar10.cpp
cifar100.cpp
cifar10fmp.cpp
cifar10indexLearning.R
cifar10indexLearning.cpp
cifar10triangular.cpp
cudaUtilities.cu
cudaUtilities.h
cvap_rha.cpp
gbcodes3755.h
imagenet2012triangular.cpp
kagglePlanktonQuick.cpp
mnist.cpp
plankton.cpp
readImageToMat.cpp
readImageToMat.h
shrec2015.cpp
shrec2015_.cpp
shrec2015triangular.cpp
signature.h
types.cpp
types.h
ucf101.cpp
utilities.cpp
utilities.h
vectorCUDA.cu
vectorCUDA.h
vectorHash.cpp
vectorHash.h

README.md

SparseConvNet

A spatially-sparse convolutional neural network

Ben Graham, University of Warwick, 2013-2015, GPLv3

SparseConvNet is a convolutional neural network for processing sparse data on a variety of lattices, i.e. (i) the square lattice, (ii) the triangular lattice, (iii) the cubic lattice, (iv) the tetrahedral lattice, ...
lattice
... and of course the hyper-cubic and hyper-tetrahedral 4D lattices as well.

Data is sparse if most sites take the value zero. For example, if a loop of string has a knot in it, and you trace the shape of the string in a 3D lattice, most sites will not form part of the knot (left). Applying a 2x2x2 convolution (middle), and a pooling operation (right), the set of non-zero sites stays fairly small: lattice

This can be used to analyse 3D models, or space-time paths. Here are some examples from a 3D object dataset. The insides are hollow, so the data is fairly sparse. The computational complexity of processing the models is related to the fractal dimension of the underlying objects.

lattice Top row: four exemplars of snakes. Bottom row: an ant, an elephant, a robot and a tortoise.

Wiki

Dependencies and Installation


SparseConvNet is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.

SparseConvNet is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.