yongyong-e

[Tensorflow-Slim] Tutorial 본문

머신러닝/Tensorflow - Models

[Tensorflow-Slim] Tutorial

Yonghan Kim 2017. 8. 14. 17:25

TensorFlow-Slim :  image classification library 


1) Installation and setup

다음과 같이 slimProject 디렉토리를 하나 만들어 텐서플로우 models을 다운로드

$ mkdir slimPoject

$ cd slimProject

$ git clone https://github.com/tensorflow/models/

이후 models디렉토리에서 slim디렉토리를 확인


2) Preparing the datasets

DatasetTraining Set SizeTesting Set SizeNumber of ClassesComments
Flowers250025005Various sizes (source: Flickr)
Cifar1060k10k1032x32 color
MNIST60k10k1028x28 gray
ImageNet1.2M50k1000Various sizes


위의 데이터셋 중 Flowers 데이터셋에 대해 진행

$ python download_and_convert_data.py \ --dataset_name=flowers \ --dataset_dir=/tmp/flowers


스크립트 실행 후 다음과 같이 labels.txt와 함께 *.tfrecord 파일이 생성 된 것을 볼 수 있음


flower_photos파일은 datasets디렉토리의 download_and_convert_flowers.py파일에서

다음과 같이 마지막 줄을 주석처리를 하게되면 지워지지 않고 보존 됨.

# _clean_up_temporary_files(dataset_dir)


3) Using pre-trained models 

ModelTF-Slim FileCheckpointTop-1 AccuracyTop-5 Accuracy
Inception V1Codeinception_v1_2016_08_28.tar.gz69.889.6
Inception V2Codeinception_v2_2016_08_28.tar.gz73.991.8
Inception V3Codeinception_v3_2016_08_28.tar.gz78.093.9
Inception V4Codeinception_v4_2016_09_09.tar.gz80.295.2
Inception-ResNet-v2Codeinception_resnet_v2_2016_08_30.tar.gz80.495.3
ResNet V1 50Coderesnet_v1_50_2016_08_28.tar.gz75.292.2
ResNet V1 101Coderesnet_v1_101_2016_08_28.tar.gz76.492.9
ResNet V1 152Coderesnet_v1_152_2016_08_28.tar.gz76.893.2
ResNet V2 50^Coderesnet_v2_50_2017_04_14.tar.gz75.692.8
ResNet V2 101^Coderesnet_v2_101_2017_04_14.tar.gz77.093.7
ResNet V2 152^Coderesnet_v2_152_2017_04_14.tar.gz77.894.1
ResNet V2 200CodeTBA79.9*95.2*
VGG 16Codevgg_16_2016_08_28.tar.gz71.589.8
VGG 19Codevgg_19_2016_08_28.tar.gz71.189.8
MobileNet_v1_1.0_224Codemobilenet_v1_1.0_224_2017_06_14.tar.gz70.789.5
MobileNet_v1_0.50_160Codemobilenet_v1_0.50_160_2017_06_14.tar.gz59.982.5
MobileNet_v1_0.25_128Codemobilenet_v1_0.25_128_2017_06_14.tar.gz41.366.2


4) Training from scratch

앞서 받은 flowers 데이터셋을 사용하여 inception_v1 모델에 학습

* train_dir (모델이 저장될 디렉토리),  batch = 16,  steps = 10000

$ python train_image_classifier.py \ --train_dir=/tmp/flowers_logs \ --dataset_name=flowers \ --dataset_split_name=train \ --dataset_dir=/tmp/flowers \

--batch_size=16 \

--model_name=inception_v1 \

--max_number_of_steps=10000


스크립트 실행 후 다음과 같이 training이 되는 것을 볼 수 있음


동시에 tensorboard를 통해 학습진행 과정을 볼 수 있음




학습이 끝난 뒤, 모델이 저장 될 디렉토리에서 생성된 모델을 다음과 같이 확인 할 수 있음

 

5) Fine tuning to a new task 

사전 훈련 된 모델에서 새로운 데이터를 학습하는 방법


1. 마지막 layer만 학습

tmp/my_checkpoints 디렉토리 생성

Inception_v1 모델을 다운 받은 후, my_checkpoints 디렉토리에 복사

$ python train_image_classifier.py \ --train_dir=/tmp/flowers2_logs \ --dataset_dir=/tmp/flowers \ --dataset_name=flowers \ --dataset_split_name=train \ --model_name=inception_v1 \ --checkpoint_path=/tmp/my_checkpoints/inception_v1.ckpt \ --checkpoint_exclude_scopes=InceptionV1/Logits \ --trainable_scopes=InceptionV1/Logits \

--max_number_of_steps=1000 \

--batch_size=16 \

--learning_rate=0.01 \

--learning_rate_decay_type=fixed \

--save_interval_secs=60 \

--log_every_n_steps_secs=60 \

--optimizer=rmsprop \

--weight_decay=0.00004


2. 전체 layer 학습

위에서 마지막 layer만 학습하면 만든 모델을 사용하여 전체 layer를 학습하여 모델링

$ python train_image_classifier.py \ --train_dir=/tmp/flowers3_logs \ --dataset_dir=/tmp/flowers \ --dataset_name=flowers \ --dataset_split_name=train \ --model_name=inception_v1 \ --checkpoint_path=/tmp/flowers2_logs \

--max_number_of_steps=500 \

--batch_size=16 \

--learning_rate=0.0001 \

--learning_rate_decay_type=fixed \

--save_summaries_secs=60 \

--save_interval_secs=60 \

--log_every_n_steps=10 \

--optimizer=rmsprop \

--weight_decay=0.00004


6) Evaluating performance

모델 평가는 다음과 같이 진행, 앞서 만든 3개의 모델을 평가 


1. 처음부터 training한 모델

$ python eval_image_classifier.py \ --alsologtostderr \ --checkpoint_path=/tmp/flowers_logs \ --dataset_dir=/tmp/flowers \ --dataset_name=flowers \ --dataset_split_name=validation \ --model_name=inception_v1



2. 사전 훈련 된 모델로부터 마지막 layer만 학습한 모델

$ python eval_image_classifier.py \ --alsologtostderr \ --checkpoint_path=/tmp/flowers2_logs \ --dataset_dir=/tmp/flowers \ --dataset_name=flowers \ --dataset_split_name=validation \ --model_name=inception_v1



3. 2번에서 만든 모델로 부터 전체 layer를 학습한 모델

$ python eval_image_classifier.py \ --alsologtostderr \ --checkpoint_path=/tmp/flowers3_logs \ --dataset_dir=/tmp/flowers \ --dataset_name=flowers \ --dataset_split_name=validation \ --model_name=inception_v1



Reference

https://github.com/tensorflow/models/blob/master/slim/README.md


Comments