AI를 활용한 재밌는 것들을 개발합니다

2017년 2월 19일 일요일

윈도우에서 Tensorflow slim 모델 사용하기 - 3.3 학습 및 평가하기

*Tensorflow 1.9 버전 튜토리얼
1. 윈도우에 Tensorflow GPU 버전 설치하기
2 딥러닝 slim 라이브러리 설치, 학습, 평가하기
3. 내 이미지로 학습 하기 ( caltech 이미지 사용 )
4. 학습된 모델 사용하기

0. Intro
1. 윈도우에 Tensorflow GPU 버전 설치하기
1.1 TF-Slim 소개
2.1 딥러닝 slim 라이브러리 설치 및 이미지 셋 다운로드
2.2 딥러닝 모델 학습하기
2.3 딥러닝 모델 평가하기
3. 내 이미지로 학습하기 ( Caltech 이미지 사용 )
  3.1 Caltech 이미지 다운로드
  3.2 TFRecord 형태로 변환하기(1/2)
  3.2 TFRecord 형태로 변환하기(2/2)
  3.3 학습 및 평가하기
4. 학습된 모델 사용하기


 이제 학습을 해보겠습니다. 2.2.1절 저사양용 학습하기 실습 중 2) Fine-tuning a model from an existing checkpoint 에서 사용한 방법으로 학습을 진행 하겠습니다.

- 학습 1번 과정 #Fine-tune only the new layers for 1000 steps.


python train_image_classifier.py
  --train_dir=\tmp\train_inception_v1_caltech256_FineTune_logs
  --dataset_name=caltech256
  --dataset_split_name=train
  --dataset_dir=\tmp\caltech256
  --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
  --save_summaries_secs=60
  --log_every_n_steps=100
  --optimizer=rmsprop
  --weight_decay=0.00004
python train_image_classifier.py --train_dir=\tmp\train_inception_v1_caltech256_FineTune_logs --dataset_name=caltech256 --dataset_split_name=train --dataset_dir=\tmp\caltech256 --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 --save_summaries_secs=60 --log_every_n_steps=100 --optimizer=rmsprop --weight_decay=0.00004
 학습이 잘 이루어졌습니다.



- 학습 2번 과정 # Fine-tune all the new layers for 500 steps.


python train_image_classifier.py
  --train_dir=\tmp\train_inception_v1_caltech256_FineTune_logs\all

  --dataset_name=caltech256

  --dataset_split_name=train

  --dataset_dir=\tmp\caltech256
  --model_name=inception_v1
  --checkpoint_path=\tmp\train_inception_v1_caltech256_FineTune_logs
  --max_number_of_steps=500
  --batch_size=16
  --learning_rate=0.0001
  --learning_rate_decay_type=fixed
  --save_interval_secs=60
  --save_summaries_secs=60
  --log_every_n_steps=10
  --optimizer=rmsprop
  --weight_decay=0.00004

python train_image_classifier.py --train_dir=\tmp\train_inception_v1_caltech256_FineTune_logs\all --dataset_name=caltech256 --dataset_split_name=train --dataset_dir=\tmp\caltech256 --model_name=inception_v1 --checkpoint_path=\tmp\train_inception_v1_caltech256_FineTune_logs --max_number_of_steps=500 --batch_size=16 --learning_rate=0.0001 --learning_rate_decay_type=fixed --save_interval_secs=60 --save_summaries_secs=60 --log_every_n_steps=10 --optimizer=rmsprop --weight_decay=0.00004
 학습이 잘 이루어졌습니다.


- 평가하기


2.3.1절에서 저사양용으로 만든 실습 자료의 3번 모델 평가 방법으로 코드를 실행해 보겠습니다.

python eval_image_classifier.py
--alsologtostderr
--checkpoint_path=\tmp\train_inception_v1_caltech256_FineTune_logs\all\
--dataset_dir=\tmp\caltech256
--dataset_name=caltech256
--dataset_split_name=validation
--model_name=inception_v1
python eval_image_classifier.py –alsologtostderr --checkpoint_path=\tmp\train_inception_v1_caltech256_FineTune_logs\all\ --dataset_dir=\tmp\caltech256 --dataset_name=caltech256 --dataset_split_name=validation --model_name=inception_v1
모델 예측 정확도 평가가 나왔습니다.


학습하는데 10분도 사용하지 않았는데 TOP 5 예측 정확도가 90.5%가 나옵니다.

이상 TF-slim 모델을 응용해 Caltech 256 이미지를 학습시키고 평가까지 해보았습니다. 지금의 3장을 잘 응용하면 자신이 원하는 이미지에 얼마든지 딥러닝을 적용 시켜 볼 수 있을 겁니다!

질문은 댓글로 주세요.

댓글 7개:

  1. 안녕하세요. 친절한 포스팅 덕분에 잘 따라왔네요. 언제 포스팅이 되었는지 기다리고 있었습니다.^^
    두 가지 궁금한 점이 있는데요
    1) 이미지 데이터 셋에서 임의로 train/validation을 알아서 나누어주는건가요?
    2) 현재는 validation 셋에서 평가가 이루어지는데 제가 임의의 이미지를 input으로 하였을때 데이터셋에 대한 classification이 가능한지도 궁금합니다.

    초보자도 잘 따라서 할 수 있는 포스팅에 항상 감사드립니다. ^^

    답글삭제
    답글
    1. 여기까지 따라와주셨다니 대단하십니다!

      1) 네, 각 분류별 이미지 집합에서 train/validation 비율대로 알아서 Split 시켜줍니다.
      2) 4장 학습된 모델 사용하기 에서 다룰 내용입니다.

      다음 포스팅도 기대하세요.

      삭제
  2. 세세한 설명 감사합니다. 4장은 언제 업데이트 예정이신가요? 궁금합니다 :)

    답글삭제
  3. 학습된 결과를 학습 step별로 저장하는 방법 혹은 옵션이 있나요?
    예를 들면 1000번 마다 결과 한번씩 저장하는 옵션이요~
    지금 사용하는 옵션은 save_interval_secs=60은
    60초마다 저장하는 옵션인가요? 결과 폴더에 보니 가장 최근 5건까지만 남아있는거 같아서 여쭤봅니다

    답글삭제
  4. 4장 기다리고있습니다ㅠㅠ...

    답글삭제
  5. 4장 기다리고 있는 사람 한명 더 추가합니다!!

    답글삭제
  6. 저두 4장을 기다립니다..ㅠㅠㅠ

    답글삭제

가장 많이 본 글