*Tensorflow 1.9 버전 튜토리얼
1. 윈도우에 Tensorflow GPU 버전 설치하기
2 딥러닝 slim 라이브러리 설치, 학습, 평가하기
3. 내 이미지로 학습 하기 ( caltech 이미지 사용 )
4. 학습된 모델 사용하기
0. Intro
1. 윈도우에 Tensorflow GPU 버전 설치하기
1.5 TF-Slim 소개
2.1 딥러닝 slim 라이브러리 설치 및 이미지 셋 다운로드
2.2.1 딥러닝 모델 학습하기[저사양용]
2.3 딥러닝 모델 평가하기
3. 내 이미지로 학습 하기 ( caltech 이미지 사용 )
4. 학습된 모델 사용하기
5. Python Tkinter GUI 응용 프로그램 만들기
* 2.2절 내용은 고사양 GPU(K40)에서 돌아가는 코드입니다. 본 블로그를 통해 실습을 해보시는 분들 중 저사양 GPU를 사용하시는 분들은 코드 실행이 되지 않습니다. 하여 본 포스팅에는 2.2절 내용 중 실행 코드 부분만 저사양 GPU에서 실행 될 수 있게 수정하였습니다. 학습 후 딥러닝 모델 결과까지는 포스팅 업데이트가 안되어 있으니 실행 코드만 참고해 주세요.
이제 딥러닝 모델 학습 실습을 해보겠습니다. 학습 방법은 2가지가 있는데 첫번째는 'Training a model from scratch' 방법입니다. 스크래치가 뭔지 찾아보니 '밑바닥' 이란 뜻이더군요. 즉 완전 새롭게 모델을 만드는 방법입니다. 두번째는 'Fine-tuning a model from an existing checkpoint' 인데 이미 잘 만들어진 모델에 추가 이미지를 학습 시켜 모델을 만드는 방법입니다. 이 두가지 방법에 대해 실습을 진행해 보겠습니다.
지난 시간에 다운 받았던 flowers 이미지 셋을 가지고 inception_v1 모델로 새롭게 학습시켜 보겠습니다.
이미 생성되어진 모델을 베이스로 해서 새로운 이미지를 학습하는 방법입니다. 앞선 모델 학습시 inception_v1 모델로 flowers 분류 학습을 해봤으니 비교를 위해 같은 모델로 ImageNet이 미리 학습된 모델을 다운 받겠습니다. 실제 ImageNet top5 89.6% 정확도를 가진 모델입니다.
--train_dir=\tmp\train_inception_v1_flowers_FineTune_logs
--dataset_name=flowers
--dataset_split_name=train
--dataset_dir=\tmp\flowers
--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
1. 윈도우에 Tensorflow GPU 버전 설치하기
2 딥러닝 slim 라이브러리 설치, 학습, 평가하기
3. 내 이미지로 학습 하기 ( caltech 이미지 사용 )
4. 학습된 모델 사용하기
0. Intro
1. 윈도우에 Tensorflow GPU 버전 설치하기
1.5 TF-Slim 소개
2.1 딥러닝 slim 라이브러리 설치 및 이미지 셋 다운로드
2.2.1 딥러닝 모델 학습하기[저사양용]
2.3 딥러닝 모델 평가하기
3. 내 이미지로 학습 하기 ( caltech 이미지 사용 )
4. 학습된 모델 사용하기
5. Python Tkinter GUI 응용 프로그램 만들기
* 2.2절 내용은 고사양 GPU(K40)에서 돌아가는 코드입니다. 본 블로그를 통해 실습을 해보시는 분들 중 저사양 GPU를 사용하시는 분들은 코드 실행이 되지 않습니다. 하여 본 포스팅에는 2.2절 내용 중 실행 코드 부분만 저사양 GPU에서 실행 될 수 있게 수정하였습니다. 학습 후 딥러닝 모델 결과까지는 포스팅 업데이트가 안되어 있으니 실행 코드만 참고해 주세요.
이제 딥러닝 모델 학습 실습을 해보겠습니다. 학습 방법은 2가지가 있는데 첫번째는 'Training a model from scratch' 방법입니다. 스크래치가 뭔지 찾아보니 '밑바닥' 이란 뜻이더군요. 즉 완전 새롭게 모델을 만드는 방법입니다. 두번째는 'Fine-tuning a model from an existing checkpoint' 인데 이미 잘 만들어진 모델에 추가 이미지를 학습 시켜 모델을 만드는 방법입니다. 이 두가지 방법에 대해 실습을 진행해 보겠습니다.
1) Trainng a model from scratch
지난 시간에 다운 받았던 flowers 이미지 셋을 가지고 inception_v1 모델로 새롭게 학습시켜 보겠습니다.
python train_image_classifier.py
--train_dir=\tmp\train_inception_v1_flowers_logs # 모델 저장될 폴더
--dataset_name=flowers # 이미지 셋 이름
--dataset_split_name=train # 학습에 사용할 이미지 선택
--dataset_dir=\tmp\flowers # 이미지 셋 위치
--batch_size=16 # 기본 32이나 메모리 부족 에러 발생 -> 16 설정
--model_name=inception_v1 # 사용할 모델 이름
python train_image_classifier.py --train_dir=\tmp\train_inception_v1_flowers_logs --dataset_name=flowers --dataset_split_name=train --dataset_dir=\tmp\flowers --batch_size=16 --model_name=inception_v1
아나콘다에서 slim 폴더로 이동 후 위 명령어를 실행시키면 다행히 아무 에러 없이 잘 실행됩니다.
위 명령어 실행 시 아무런 파라미터 변수 설정을 안하고 실행시켰기 때문에 네트워크 기본 값으로 학습이 진행 됩니다. 자세한 파라미터 셋팅 값을 확인하고 싶다면 train_image_classifier.py 파일을 열어보면 알 수 있습니다. 위 화면을 보시는 것처럼 step 수가 증가하면서 학습이 되는 것을 볼 수 있을 것입니다.
위 화면은 29260 step 학습이 진행 될 때 캡쳐한 화면 입니다. loss 가 처음 보다 줄어든 것을 확인할 수 있습니다. 29260 step 학습이 진행되기 까지 몇시간이 걸렸을까요? 1 step에 약 3초의 연산 시간이 소요 된다고 나오니 산술적으로 약 24.383시간이 걸렸네요. 아시다시피 딥러닝 모델 학습에는 시간이 많이 걸립니다.
모델 저장 위치로 지정한 폴더에 가보면 위와 같이 모델이 생성된 것을 볼 수 있습니다. model.ckpt-숫자 파일이 모델 파일입니다. 이 모델을 텐소플로우에서는 checkpoint라고 부르는 것 같습니다. 나머지는 파일들은... 잘 모르겠습니다^^; 이 위치로 Tensorboard 를 실행하면 다양한 재밌는 정보들도 볼 수 있는데... 그 정보들이 무엇을 의미하는지는... 잘 모릅니다^^;(공부 할게요) 암튼 이렇게 딥러닝 모델 하나를 만들어 보았습니다.
2) Fine-tuning a model from an existing checkpoint
다운 받았으면 압축을 풀어 inception_v1.ckpt 파일을 \tmp\my_checkpoints 폴더로 복사하세요.
지금 하는 실습에서는 2번의 학습 과정을 실습 할 겁니다. 1번 과정은 다운 받은 모델에서 마지막 layer만 새롭게 학습하는 과정이고, 2번 과정은 1번 학습을 거친 모델을 다시 전체 layer가 학습되도록 하는 과정입니다.
1번 과정 #Fine-tune only the new layers for 1000 steps.
python train_image_classifier.py--train_dir=\tmp\train_inception_v1_flowers_FineTune_logs
--dataset_name=flowers
--dataset_split_name=train
--dataset_dir=\tmp\flowers
--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_flowers_FineTune_logs --dataset_name=flowers --dataset_split_name=train --dataset_dir=\tmp\flowers --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
파라미터 설정 변수가 상당히 많네요. 그 중 위에 빨간색으로 표시한 파라미터가 마지막 layer만 학습하겠다는 변수입니다. 왜 마지막 layer를 새롭게 학습해야 하냐면 다운받은 모델은 ImageNet class 1001개의 분류를 목적으로 하는 모델인데 반해 지금 우리가 학습할 flowers는 class 5개 분류를 목적으로 하기 때문에 마지막 layer의 기존 1001 분류하던걸 없에고 5개로 분류하게 새롭게 만들어야 하기 때문입니다.
1000 step 후 학습이 완료 되었습니다. 지정한 폴더에 모델이 생성된 것을 확인 할 수 있습니다. 이제 2번 과정인 전체 layer 학습을 진행 하겠습니다.
2번 과정 # Fine-tune all the new layers for 500 steps.
python train_image_classifier.py
--train_dir=\tmp\train_inception_v1_flowers_FineTune_logs\all
--dataset_name=flowers
--dataset_split_name=train
--dataset_dir=\tmp\flowers
--model_name=inception_v1
--checkpoint_path=\tmp\train_inception_v1_flowers_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_flowers_FineTune_logs\all --dataset_name=flowers --dataset_split_name=train --dataset_dir=\tmp\flowers --model_name=inception_v1 --checkpoint_path=\tmp\train_inception_v1_flowers_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
1번 과정과 다른 점은 checkpoint_path로 1번 과정에서 생성된 모델로 지정했다는 점입니다. 그리고 마지막 layer만 학습 한다는 파라미터 변수도 삭제 되었죠.
2번 과정을 거친 모델이 생성 되었습니다.
오늘 실습에서 같은 flowers 이미지를 가지고 총 3개의 딥러닝 모델을 학습 시켜 봤습니다. 과연 생성된 모델의 정확도는 얼마일까요?? 다음 포스팅에서 모델 평가(Evaluation) 실습을 하겠습니다.
*질문은 댓글로 주세요.
답글삭제ERROR:tensorflow:==================================
Object was never used (type ):
If you want to mark it as used call its "mark_used()" method.
It was originally created here:
['File "train_image_classifier.py", line 574, in \n tf.app.run()', 'File "C:\\Users\\USER\\Anaconda3\\lib\\site-packages\\tensorflow\\python\\platform\\app.py", line 48, in run\n _sys.exit(main(_sys.argv[:1] + flags_passthrough))', 'File "train_image_classifier.py", line 570, in main\n sync_optimizer=optimizer if FLAGS.sync_replicas else None)', 'File "C:\\Users\\USER\\Anaconda3\\lib\\site-packages\\tensorflow\\contrib\\slim\\python\\slim\\learning.py", line 663, in train\n ready_op = tf_variables.report_uninitialized_variables()', 'File "C:\\Users\\USER\\Anaconda3\\lib\\site-packages\\tensorflow\\python\\util\\tf_should_use.py", line 175, in wrapped\n return _add_should_use_warning(fn(*args, **kwargs))', 'File "C:\\Users\\USER\\Anaconda3\\lib\\site-packages\\tensorflow\\python\\util\\tf_should_use.py", line 144, in _add_should_use_warning\n wrapped = TFShouldUseWarningWrapper(x)', 'File "C:\\Users\\USER\\Anaconda3\\lib\\site-packages\\tensorflow\\python\\util\\tf_should_use.py", line 101, in __init__\n stack = [s.strip() for s in traceback.format_stack()]']
==================================
이런 에러가 뜨네요 ㅠㅠㅠ
어떻게 해야하나요ㅠㅠ