yongyong-e
[Tensorflow-Slim] Tutorial 본문
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
Dataset | Training Set Size | Testing Set Size | Number of Classes | Comments |
---|---|---|---|---|
Flowers | 2500 | 2500 | 5 | Various sizes (source: Flickr) |
Cifar10 | 60k | 10k | 10 | 32x32 color |
MNIST | 60k | 10k | 10 | 28x28 gray |
ImageNet | 1.2M | 50k | 1000 | Various 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
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
'머신러닝 > Tensorflow - Models' 카테고리의 다른 글
[Tensorflow Object Detection API] 2. Training your own dataset (11) | 2017.08.30 |
---|---|
[Tensorflow Object Detection API] 1. Creating your own dataset (25) | 2017.08.29 |
[Tensorflow-Slim] Convert to TFRecord file (0) | 2017.08.16 |
[Tensorflow Object Detection API] Training a pet detector (0) | 2017.08.03 |
[Tensorflow Object Detection API] How to install (0) | 2017.07.28 |