#!/bin/bash # # This script performs the following operations: # 1. Downloads the Flowers dataset # 2. Fine-tunes a ResNetV1-50 model on the Flowers training set. # 3. Evaluates the model on the Flowers validation set. # # Usage: # cd slim # ./slim/scripts/finetune_resnet_v1_50_on_flowers.sh # Where the pre-trained ResNetV1-50 checkpoint is saved to. PRETRAINED_CHECKPOINT_DIR=/tmp/checkpoints # Where the training (fine-tuned) checkpoint and logs will be saved to. TRAIN_DIR=/tmp/flowers-models/resnet_v1_50 # Where the dataset is saved to. DATASET_DIR=/tmp/flowers # Download the pre-trained checkpoint. if [ ! -d "$PRETRAINED_CHECKPOINT_DIR" ]; then mkdir ${PRETRAINED_CHECKPOINT_DIR} fi if [ ! -f ${PRETRAINED_CHECKPOINT_DIR}/resnet_v1_50.ckpt ]; then wget http://download.tensorflow.org/models/resnet_v1_50_2016_08_28.tar.gz tar -xvf resnet_v1_50_2016_08_28.tar.gz mv resnet_v1_50.ckpt ${PRETRAINED_CHECKPOINT_DIR}/resnet_v1_50.ckpt rm resnet_v1_50_2016_08_28.tar.gz fi # Download the dataset python download_and_convert_data.py \ --dataset_name=flowers \ --dataset_dir=${DATASET_DIR} # Fine-tune only the new layers for 3000 steps. python train_image_classifier.py \ --train_dir=${TRAIN_DIR} \ --dataset_name=flowers \ --dataset_split_name=train \ --dataset_dir=${DATASET_DIR} \ --model_name=resnet_v1_50 \ --checkpoint_path=${PRETRAINED_CHECKPOINT_DIR}/resnet_v1_50.ckpt \ --checkpoint_exclude_scopes=resnet_v1_50/logits \ --trainable_scopes=resnet_v1_50/logits \ --max_number_of_steps=3000 \ --batch_size=32 \ --learning_rate=0.01 \ --save_interval_secs=60 \ --save_summaries_secs=60 \ --log_every_n_steps=100 \ --optimizer=rmsprop \ --weight_decay=0.00004 # Run evaluation. python eval_image_classifier.py \ --checkpoint_path=${TRAIN_DIR} \ --eval_dir=${TRAIN_DIR} \ --dataset_name=flowers \ --dataset_split_name=validation \ --dataset_dir=${DATASET_DIR} \ --model_name=resnet_v1_50 # Fine-tune all the new layers for 1000 steps. python train_image_classifier.py \ --train_dir=${TRAIN_DIR}/all \ --dataset_name=flowers \ --dataset_split_name=train \ --dataset_dir=${DATASET_DIR} \ --checkpoint_path=${TRAIN_DIR} \ --model_name=resnet_v1_50 \ --max_number_of_steps=1000 \ --batch_size=32 \ --learning_rate=0.001 \ --save_interval_secs=60 \ --save_summaries_secs=60 \ --log_every_n_steps=100 \ --optimizer=rmsprop \ --weight_decay=0.00004 # Run evaluation. python eval_image_classifier.py \ --checkpoint_path=${TRAIN_DIR}/all \ --eval_dir=${TRAIN_DIR}/all \ --dataset_name=flowers \ --dataset_split_name=validation \ --dataset_dir=${DATASET_DIR} \ --model_name=resnet_v1_50