A DeSTIN implementation.
This project is developed under Ubuntu 12.04.3 and Mac OS X.
- Information filter based sparse coding.
- Fast inverse (optional)
- Test on Gabor wavelet dictionary and natural image with sparse coding. [DONE 20140422]
- Clustering algorithm for upper layer. [DONE changed to sparse autoencoder]
- Test on second layer learned representation.
- Centroids/Dictionary visualisation.
- Signal composition and decomposition [DONE 20140425].
- General mapping between layers [DONE 20140504].
- Performance evaluation.
- Memory leaking. [DONE 20140622]
- Interface for CIFAR image [DONE 20140621].
- Some visualisation tools for image dataset. [DONE]
- Experiment result saving functions (needed to rescale to
- Experiment with CIFAR images [DONE 20140622 (UPDATED IN 20140729)].
- Gabor wavelet dictionary design [2014-04-22]
- Image whitening updated [2014-04-24]
- Information filter based sparse coding and test updated [2014-04-25 (undone)]
- Main components of DeSTIN network are sketched [2014-04-27]
- Sparse Autoencoder is updated [2014-06-14]
- General Refinement of DeSTIN architecture is updated [2014-06-21]
- CIFAR classification example sketch [2014-06-22]
- Revised contrast normalisation and whitening [2014-06-23]
- CIFAR classification on complete set [2014-07-29]
- Nao action learning update (up to 9 scenes) [2014-08-04]
- Destina Python support by SWIG [2014-08-09]
Clone the whole project (Matlab codes also provide some insight of the project)
destinafolder and configure with
$ mkdir build $ cd build $ cmake .. $ make
Some demonstration programs can be found in
src, and executable can be found in
If you want to update the program (fork and clone from your own account), you can simply use
update-all.sh, run following code in terminal:
$ sh update-all.sh
How to set up CIFAR-10 test: download CIFAR-10 dataset and unzip it under
destinafolder. Then after you build the project, under
build/binyou should run
classify, then if nothing wrong, your test should go well. All the details are specified in
src/classify_test.cpp. You can change line 20 to specify which dataset you are using. Currently, I just wrote up a example on one training dataset, you can do more on the rest by modify the program. To ensure your are on the right track, here is the folder structure from my project
/destina /build /cifar-10-batches-bin CMakeLists.txt /include LICENSE README.md /resources /src /Python /swig_destina_common.i update-all.sh
Example of Gabor Wavelet dictionary
Example of Whitened Image
In C++ implementation, can only learn some representations roughly. However the performance is not acceptable, still need to figure out it's dictionary's problem or implementation's problem. Furthermore, the speed is not acceptable for now.
Example of reconstruction image with sparse autoencoder
In this implementation, to ensure that DeSTIN is started from a better place, I employed a bottom-up batch training to train the autoencoder in each layer with a batch of images. And after this pre-training, the training stage will be performed as usual and the speed is quite fast. Noted that pre-training stage would take a lot of times, so it needs to consider another way to speedup. [2014-06-22]
Image Reconstruction indicated that this implementation is performed OK on average. So that if we only employ first layer's learning result, it should still give us state-of-art performance with a plain autoencoder. [2014-06-22]
This is the major updates since the last one. In this version, Python support by SWIG is added. And now the Python library can be accessed under
/build/Python. During this duration, I tested current implementation on complete CIFAR-10 dataset several times. By using different settings and pre-processings. With plain DeSTIN hierarchy, it is not capable to effectively classify images in tiny images. Basically, I conducted my experiments on most of set objectives. Surprisingly, when we apply DeSTIN to Robot behaviour learning studies, it shows some positive results (later will extend this work to sequence behaviour learning). Currently, it can differentiate up to 9 scenes around the environment. With some proper training, it can also be extend to some larger number of scenes. This seems revealing the potentials of limited scene recognition. [2014-08-10]
Advanced Robotics Lab
Department of Artificial Intelligence
Faculty of Computer Science & IT
University of Malaya