Coder Social home page Coder Social logo

qidiso / mxnet-retrain Goto Github PK

View Code? Open in Web Editor NEW
32.0 26.0 29.0 2.22 MB

Create mxnet finetuner (retrain) for mac/linux ,no need install docker and supports CPU, GPU(eGpu/cudnn).support the inception,resnet ,squeeznet,mobilenet...

Shell 40.60% Python 52.82% Modelica 6.57%
mxnet fine-tuning mac gpu retrain resnet inception squeeznet nin mobienet

mxnet-retrain's Introduction

mxnet-finetuner-for-mac-no-docker

Create mxnet fine tuner for mac ,no need install docker and support GPU(egpu).

Prerequisites

python 2.7 mxnet(cpu) or mxnet-cu80 (you need setup egpu for mac) RUN pip install
attrdict
awscli
jupyter
matplotlib
nose
nose-timer
numpy
opencv-python
pandas
pandas_ml
Pillow
pylint
pyyaml
requests
seaborn
sklearn-pandas
slackclient
tqdm

Setup

1. Arrange images into their respective directories

A training data directory (images/train), validation data directory (images/valid), and test data directory (images/test) should containing one subdirectory per image class.

For example, arrange training, validation, and test data as follows.

images/
    train/
        airplanes/
            airplane001.jpg
            airplane002.jpg
            ...
        watch/
            watch001.jpg
            watch002.jpg
            ...
    valid/
        airplanes/
            airplane101.jpg
            airplane102.jpg
            ...
        watch/
            watch101.jpg
            watch102.jpg
            ...
    test/
        airplanes/
            airplane201.jpg
            airplane202.jpg
            ...
        watch/
            watch201.jpg
            watch202.jpg
            ...

2. Edit config/config.yml

Edit config.yml as you like.

For example

common:
  num_threads: 4
  gpus: 0

data:
  quality: 100
  shuffle: 1
  center_crop: 0

finetune:
  models:
    - imagenet1k-resnet-50
  optimizers:
    - sgd
  num_epochs: 30
  lr: 0.0001
  lr_factor: 0.1
  lr_step_epochs: 10,20
  mom: 0.9
  wd: 0.00001
  batch_size: 10

3. Do Fine-tuning

$ sh finetune.sh

mxnet-finetuner will automatically execute the followings according to config.yml.

  • Create RecordIO data from images
  • Download pretrained models
  • Replace the last fully-connected layer with a new one that outputs the desired number of classes
  • Data augumentaion
  • Do Fine-tuning
  • Make training accuracy graph
  • Make confusion matrix
  • Upload training accuracy graph and confusion matrix to Slack

Training accuracy graph and/or confusion matrix are save at logs/ directory.
Trained models are save at model/ directory.

Trained models are saved with the following file name for each epoch.

model/201705292200-imagenet1k-nin-sgd-0000.params

If you want to upload results to Slack, set SLACK_API_TOKEN environment variable and edit config.yml as below.

finetune:
  train_accuracy_graph_slack_upload: 1
test:
  confusion_matrix_slack_upload: 1

p1 continue: p1

4. Predict with trained models

Select the trained model and epoch you want to use for testing and edit config.yml

If you want to use model/201705292200-imagenet1k-nin-sgd-0001.params, edit config.yml as blow.

test:
  model: 201705292200-imagenet1k-nin-sgd-0001

When you want to use the latest highest validation accuracy trained model, edit config.yml as below.

test:
  use_latest: 1

If set this option, model is ignored.

When you are done, you can predict with the following command

$ docker-compose run finetuner test

Predict result and classification report and/or confusion matrix are save at logs/ directory.

Available pretrained models

model pretrained model name
CaffeNet imagenet1k-caffenet
SqueezeNet imagenet1k-squeezenet
NIN imagenet1k-nin
VGG16 imagenet1k-vgg16
Inception-BN imagenet1k-inception-bn
ResNet-50 imagenet1k-resnet-50
ResNet-152 imagenet1k-resnet-152
Inception-v3 imagenet1k-inception-v3
DenseNet-169 imagenet1k-densenet-169
SE-ResNeXt-50 imagenet1k-se-resnext-50

To use these pretrained models, specify the following pretrained model name in config.yml.

For details, please check Available pretrained models

Available optimizers

  • SGD
  • NAG
  • RMSProp
  • Adam
  • AdaGrad
  • AdaDelta
  • Adamax
  • Nadam
  • DCASGD
  • SGLD
  • Signum
  • FTML
  • Ftrl

To use these optimizers, specify the optimizer name in lowercase in config.yml.

Benchmark (Speed and Memory Footprint)

Single TITAN X (Maxwell) with batch size 40

Model speed (images/sec) memory (MiB)
CaffeNet 1077.63 716
ResNet-50 111.04 5483
Inception-V3 82.34 6383
ResNet-152 48.28 11330

For details, please check Benchmark

Utilities

counter.sh

Count the number of files in each subdirectory.

$ counter.sh testdir
testdir contains 4 directories
Leopards    197
Motorbikes  198
airplanes   199
watch       200

move_images.sh

Move the specified number of jpeg images from the target directory to the output directory while maintaining the directory structure.

$ move_images.sh 20 testdir newdir
processing Leopards
processing Motorbikes
processing airplanes
processing watch
$ counter.sh newdir
newdir contains 4 directories
Leopards    20
Motorbikes  20
airplanes   20
watch       20

Prepare sample images for fine-tuning

Download [Caltech 101] dataset, and split part of it into the example_images directory.

$ caltech101_prepare.sh
  • example_images/train is train set of 60 images for each classes
  • example_images/valid is validation set of 20 images for each classes
  • example_imags/test is test set of 20 images for each classes
$ counter.sh example_images/train
example_images/train contains 10 directories
Faces       60
Leopards    60
Motorbikes  60
airplanes   60
bonsai      60
car_side    60
chandelier  60
hawksbill   60
ketch       60
watch       60

With this data you can immediately try fine-tuning.

$ caltech101_prepare.sh
$ rm -rf images
$ mv exmaple_images images
$ sh finetune.sh

Misc

How to freeze layers during fine-tuning

If you set the number of target layer to finetune.num_active_layers in config.yml as below, only layers whose number is not greater than the number of the specified layer will be train.

finetune:
  models:
    - imagenet1k-nin
  optimizers:
    - sgd
  num_active_layers: 6

The default for finetune.num_active_layers is 0, in which case all layers are trained.

If you set 1 to finetune.num_active_layers, only the last fully-connected layers are trained.

You can check the layer numbers of various pretrained models with num_layers command.

$ sh finetune.sh num_layers <pretrained model name>

For details, please check How to freeze layers during fine-tuning

Training from scratch

Edit config.yml as below.

finetune:
  models:
    - scratch-alexnet

You can also run fine-tuning and training from scratch together.

finetune:
  models:
    - imagenet1k-inception-v3
    - scratch-inception-v3

For details, please check Available models training from scratch

Refrence

Mxnet-finetuner(https://github.com/knjcode/mxnet-finetuner)

mxnet-retrain's People

Contributors

qidiso avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.