|
@@ -0,0 +1,89 @@
|
|
|
+#!/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
|