All Projects → dlaptev → Ti Pooling

dlaptev / Ti Pooling

Licence: other
TI-pooling: transformation-invariant pooling for feature learning in Convolutional Neural Networks

Programming Languages

python
139335 projects - #7 most used programming language

Projects that are alternatives of or similar to Ti Pooling

Cnn From Scratch
A scratch implementation of Convolutional Neural Network in Python using only numpy and validated over CIFAR-10 & MNIST Dataset
Stars: ✭ 210 (+76.47%)
Mutual labels:  convolutional-neural-networks, mnist
Activity Recognition With Cnn And Rnn
Temporal Segments LSTM and Temporal-Inception for Activity Recognition
Stars: ✭ 415 (+248.74%)
Mutual labels:  convolutional-neural-networks, torch
Awesome Tensorlayer
A curated list of dedicated resources and applications
Stars: ✭ 248 (+108.4%)
Mutual labels:  convolutional-neural-networks, mnist
Lsoftmax Pytorch
The Pytorch Implementation of L-Softmax
Stars: ✭ 133 (+11.76%)
Mutual labels:  convolutional-neural-networks, mnist
Ml In Tf
Get started with Machine Learning in TensorFlow with a selection of good reads and implemented examples!
Stars: ✭ 45 (-62.18%)
Mutual labels:  convolutional-neural-networks, mnist
Artificial Intelligence Deep Learning Machine Learning Tutorials
A comprehensive list of Deep Learning / Artificial Intelligence and Machine Learning tutorials - rapidly expanding into areas of AI/Deep Learning / Machine Vision / NLP and industry specific areas such as Climate / Energy, Automotives, Retail, Pharma, Medicine, Healthcare, Policy, Ethics and more.
Stars: ✭ 2,966 (+2392.44%)
Mutual labels:  convolutional-neural-networks, torch
Trashnet
Dataset of images of trash; Torch-based CNN for garbage image classification
Stars: ✭ 368 (+209.24%)
Mutual labels:  convolutional-neural-networks, torch
Sketch simplification
Models and code related to sketch simplification of rough sketches.
Stars: ✭ 531 (+346.22%)
Mutual labels:  convolutional-neural-networks, torch
Svhn Cnn
Google Street View House Number(SVHN) Dataset, and classifying them through CNN
Stars: ✭ 44 (-63.03%)
Mutual labels:  convolutional-neural-networks, mnist
Machine Learning Curriculum
💻 Make machines learn so that you don't have to struggle to program them; The ultimate list
Stars: ✭ 761 (+539.5%)
Mutual labels:  convolutional-neural-networks, torch
Fashion Mnist
A MNIST-like fashion product database. Benchmark 👇
Stars: ✭ 9,675 (+8030.25%)
Mutual labels:  convolutional-neural-networks, mnist
Emnist
A project designed to explore CNN and the effectiveness of RCNN on classifying the EMNIST dataset.
Stars: ✭ 81 (-31.93%)
Mutual labels:  convolutional-neural-networks, mnist
Pytorch Learners Tutorial
PyTorch tutorial for learners
Stars: ✭ 97 (-18.49%)
Mutual labels:  convolutional-neural-networks, torch
Gpnd
Generative Probabilistic Novelty Detection with Adversarial Autoencoders
Stars: ✭ 112 (-5.88%)
Mutual labels:  mnist
Pythonml
Artificial neural network classes and tools in Python and TensorFlow.
Stars: ✭ 114 (-4.2%)
Mutual labels:  convolutional-neural-networks
Rul Net
Deep learning approach for estimation of Remaining Useful Life (RUL) of an engine
Stars: ✭ 112 (-5.88%)
Mutual labels:  convolutional-neural-networks
Dni.pytorch
Implement Decoupled Neural Interfaces using Synthetic Gradients in Pytorch
Stars: ✭ 111 (-6.72%)
Mutual labels:  mnist
Style Transfer
A Keras Implementation of "A Neural Algorithm of Artistic Style"
Stars: ✭ 115 (-3.36%)
Mutual labels:  convolutional-neural-networks
Brainforge
A Neural Networking library based on NumPy only
Stars: ✭ 114 (-4.2%)
Mutual labels:  convolutional-neural-networks
Laia
Laia: A deep learning toolkit for HTR based on Torch
Stars: ✭ 109 (-8.4%)
Mutual labels:  torch

TI-pooling

This repository contains TensorFlow and Torch7 implementations of TI-pooling (transformation-invariant pooling) from the following paper:

  • "TI-pooling: transformation-invariant pooling for feature learning in Convolutional Neural Networks" D. Laptev, N. Savinov, J.M. Buhmann, M. Pollefeys, CVPR 2016. Pdf, bibtex:
@inproceedings{laptev2016ti,
  title={TI-POOLING: transformation-invariant pooling for feature learning in Convolutional Neural Networks},
  author={Laptev, Dmitry and Savinov, Nikolay and Buhmann, Joachim M and Pollefeys, Marc},
  booktitle={Proceedings of the IEEE Conference on Computer Vision and Pattern Recognition},
  pages={289--297},
  year={2016}
}

Update February 2017. TensorFlow implementation is ready! You can independently use either Torch7 or TensorFlow implementations or both: the code is structured very similarly. Scroll to "Instructions for Linux" for the details.

The original paper provides experimental evaluation on three datasets. This repository contains source codes for one of these experiments: mnist-rot dataset, consisting of 12k training images of randomly rotated digits.

What is TI-pooling?

TI-pooling is a simple technique that allows to make a Convolutional Neural Networks (CNN) transformation-invariant. I.e. given a set of nuisance transformations (such as rotations, scale, shifts, illumination changes, etc.), TI-pooling guarantees that the output of the network will not to depend on whether the input image was transformed or not.

Why TI-pooling and not data augmentation?

Comparing to the very commonly used data augmentation, TI-pooling finds canonical orientation of input samples, and learns mostly from these samples. It means that the network does not have to learn different paths (features) for different transformations of the same object. This results in the following effects:

  • CNN with TI-pooling achieves similar or better results with smaller models.
  • Training is often done faster than for networks with augmentation.
  • It imposes internal regularization, making it harder to overfit.
  • It has theoretical guarantees on transformation-invariance.

How does TI-pooling work?

TI-pooling pipeline

  • First, input image (a) is transformed according to the considered set of transformations to obtain a set of new image instances (b).
  • For every transformed image, a parallel instance of partial siamese network is initialized, consisting only of convolutional and subsampling layers (two copies are shown in the top and in the bottom of the figure).
  • Every instance is then passed through a sequence of convolutional (c, e) and subsampling layers (d), until the vector of scalars is not achieved (e). This vector of scalars is composed of image features learned by the network.
  • Then TI-pooling (element-wise maximum) (g) is applied on the feature vectors to obtain a vector of transformation-invariant features (h).
  • This vector then serves as an input to a fully-connected layer (i), possibly with dropout, and further propagates to the network output (j).
  • Because of the weight-sharing between parallel siamese layers, the actual model requires the same amount of memory as just one convolutional neural network.
  • TI-pooling ensures that the actual training of each features parameters is performed on the most representative instance.

Any caveats?

One needs to be really sure to introduce transformation-invariance: in some real-world problems some transformation can seem like an nuisance factor, but can be in fact useful. E.g. rotation-invariance does not work well for natural objects, because most natural objects have a "default" orientation, which helps us to recognize them (an upside-down animal is usually harder to recognize, not only for a CNN, but also for a human being). Same rotation-invariance proved to be very useful for cell recognition, where orientation is essentially random.

Also, while training time is comparable and usually faster than with data augmentation, the testing time increases linearly with the number of transformations.

Instructions for Linux

First run ./setup.sh to download the dataset, it will be stored in the root directory. Then, depending on the framework you want to use, navigate to the corresponding directory and start training by calling rot_mnist12K file.

  • For TensorFlow: cd tensorflow; python rot_mnist12K.py
  • For Torch7: cd torch; th rot_mnist12K.lua

The code was tested for the following configuration:

  • TensorFlow version: 0.11.0rc0 with Python 2.7.13, NumPy 1.11.3, SciPy 0.18.1.
  • Nvidia Titan X, cuda/7.5.18, cudnn/v5.1.
  • Torch7 commit ed547376d552346afc69a937c6b36cf9ea9d1135 (12 September 2016).
Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].