This repository is for practice of implementing well-known network architectures and ensembling methods, including the followings:
- Mobilenet - [structure] [training progress]
 - VGG16 - [structure] [training progress]
 - Resnet164 - [structure] [training progress]
 - WideResnet28-10 - [structure] [training progress]
 
- Unweighted average
 - Majority voting
 - Super Learner - [structure]
 
- Channel-wise normalization of input images: substracted by mean and divided by std
 - Data augmentation: rotation, width shift, height shift, shearing, zooming
 
- MacOS High Sierra 10.13.1 for implementation / Ubuntu 14.04 for training
 - Python 3.6.3
 - Keras 2.1.2 (Tensorflow backend)
 
The best single model and the best ensemble method achieve 99.76% and 99.77% on the test set respectively.
| Model | On the validation set | On the test set | 
|---|---|---|
| Mobilenet | 99.63% | 99.68% | 
| VGG16 | 99.61% | 99.68% | 
| Resnet164 | 99.72% | 99.70% | 
| WideResnet28-10 | 99.72% | 99.76% | 
| Ensemble (all) | On the validation set | On the test set | 
|---|---|---|
| Unweighted average | 99.70% | 99.75% | 
| Majority voting | 99.71% | 99.76% | 
| Super Learner | 99.73% | 99.77% | 
In order to run the evaluation, it requires pre-trained weights for each model, which can be downloaded here.
*All pre-trained weights should be stored in './models'.
python evaluate.py [options]$ python evaluate.py --help
usage: evaluate.py [-h] [--dataset DATASET]
optional arguments:
  -h, --help         show this help message and exit
  --dataset DATASET  training set: 0, validation set: 1, test set: 2The training can be executed by the following command. Every model has the same options.
$ python vgg16.py [options]$ python vgg16.py --help
usage: vgg16.py [-h] [--epochs EPOCHS] [--batch_size BATCH_SIZE]
                [--path_for_weights PATH_FOR_WEIGHTS]
                [--path_for_image PATH_FOR_IMAGE]
                [--path_for_plot PATH_FOR_PLOT]
                [--data_augmentation DATA_AUGMENTATION]
                [--save_model_and_weights SAVE_MODEL_AND_WEIGHTS]
                [--load_weights LOAD_WEIGHTS]
                [--plot_training_progress PLOT_TRAINING_PROGRESS]
                [--save_model_to_image SAVE_MODEL_TO_IMAGE]
optional arguments:
  -h, --help            show this help message and exit
  --epochs EPOCHS       How many epochs you need to run (default: 10)
  --batch_size BATCH_SIZE
                        The number of images in a batch (default: 64)
  --path_for_weights PATH_FOR_WEIGHTS
                        The path from where the weights will be saved or
                        loaded (default: ./models/VGG16.h5)
  --path_for_image PATH_FOR_IMAGE
                        The path from where the model image will be saved
                        (default: ./images/VGG16.png)
  --path_for_plot PATH_FOR_PLOT
                        The path from where the training progress will be
                        plotted (default: ./images/VGG16_plot.png)
  --data_augmentation DATA_AUGMENTATION
                        0: No, 1: Yes (default: 1)
  --save_model_and_weights SAVE_MODEL_AND_WEIGHTS
                        0: No, 1: Yes (default: 1)
  --load_weights LOAD_WEIGHTS
                        0: No, 1: Yes (default: 0)
  --plot_training_progress PLOT_TRAINING_PROGRESS
                        0: No, 1: Yes (default: 1)
  --save_model_to_image SAVE_MODEL_TO_IMAGE
                        0: No, 1: Yes (default: 1)├── images/ # model architectures and training progresses
├── predictions/ # prediction results to be used for fast inference
├── models/ # model weights (not included in this repo)
├── README.md
├── base_model.py # base model interface
├── evaluate.py # for evaluation
├── utils.py # helper functions
├── mobilenet.py
├── vgg16.py
├── resnet164.py
├── wide_resnet_28_10.py
└── super_learner.py- Very Deep Convolutional Networks for Large-Scale Image Recognition
 - Deep Residual Learning for Image Recognition
 - Identity Mappings in Deep Residual Networks
 - Wide Residual Networks
 - The Relative Performance of Ensemble Methods with Deep Convolutional Neural Networks for Image Classification