Reference implementation of Recursive Cortical Network (RCN)
Reference implementation of a two-level RCN model on MNIST classification. See the Science article "A generative vision model that trains with high data efficiency and breaks text-based CAPTCHAs" and Vicarious Blog for details.
Note: this is an unoptimized reference implementation and is not intended for production.
Note: Python 2.7 is supported. The code was tested on OSX 10.11. It may work on other system platforms but not guaranteed.
Before starting please make sure gcc is installed (
brew install gcc) and up to date in order to compile the various dependencies (particularly numpy).
Clone the repository:
git clone https://github.com/vicariousinc/science_rcn.git
cd science_rcn make
Manual Install (setting up a virtual environment beforehand is recommended):
cd science_rcn python setup.py install
If you installed via
make you need to activate the virtual environment:
To run a small unit test that trains and tests on 20 MNIST images using one CPU (takes ~2 minutes, accuracy is ~60%):
To run a slightly more interesting experiment that trains on 100 images and tests on 20 MNIST images using multiple CPUs (takes <1 min using 7 CPUs, accuracy is ~90%):
python science_rcn/run.py --train_size 100 --test_size 20 --parallel
To test on the full 10k MNIST test set, training on 1000 examples (could take hours depending on the number of available CPUs, average accuracy is ~97.7+%):
python science_rcn/run.py --full_test_set --train_size 1000 --parallel --pool_shape 25 --perturb_factor 2.0
Check out our related blog post.
We used the following datasets for the Science paper:
- reCAPTCHA (from google.com)
- BotDetect (from captcha.com)
- Paypal (from paypal.com)
- Yahoo (from yahoo.com)
- Original (available at http://yann.lecun.com/exdb/mnist/)
- With occlusions (by us)
- With noise (by us)
Yann LeCun (Courant Institute, NYU) and Corinna Cortes (Google Labs, New York) hold the copyright of MNIST dataset, which is a derivative work from original NIST datasets. MNIST dataset is made available under the terms of the Creative Commons Attribution-Share Alike 3.0 license.