*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 딥러닝 모델 학습하기
2.3 딥러닝 모델 평가하기
3. 내 이미지로 학습 하기 ( caltech 이미지 사용 )
4. 학습된 모델 사용하기
5. Python Tkinter GUI 응용 프로그램 만들기
이제 딥러닝 모델 학습 실습을 해보겠습니다. 학습 방법은 2가지가 있는데 첫번째는 'Training a model from scratch' 방법입니다. 스크래치가 뭔지 찾아보니 '밑바닥' 이란 뜻이더군요. 즉 완전 새롭게 모델을 만드는 방법입니다. 두번째는 'Fine-tuning a model from an existing checkpoint' 인데 이미 잘 만들어진 모델에 추가 이미지를 학습 시켜 모델을 만드는 방법입니다. 이 두가지 방법에 대해 실습을 진행해 보겠습니다.
지난 시간에 다운 받았던 flowers 이미지 셋을 가지고 inception_resnet_v2 모델로 새롭게 학습시켜 보겠습니다.
--train_dir=\tmp\train_inception_resnet_v2_flowers_FineTune_logs
--dataset_name=flowers
--dataset_split_name=train
--dataset_dir=\tmp\flowers
--model_name=inception_resnet_v2
--checkpoint_path=\tmp\my_checkpoints/inception_resnet_v2_2016_08_30.ckpt
--checkpoint_exclude_scopes=InceptionResnetV2/Logits,InceptionResnetV2/AuxLogits
--trainable_scopes=InceptionResnetV2/Logits,InceptionResnetV2/AuxLogits
--max_number_of_steps=1000
--batch_size=32
--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 딥러닝 모델 학습하기
2.3 딥러닝 모델 평가하기
3. 내 이미지로 학습 하기 ( caltech 이미지 사용 )
4. 학습된 모델 사용하기
5. Python Tkinter GUI 응용 프로그램 만들기
이제 딥러닝 모델 학습 실습을 해보겠습니다. 학습 방법은 2가지가 있는데 첫번째는 'Training a model from scratch' 방법입니다. 스크래치가 뭔지 찾아보니 '밑바닥' 이란 뜻이더군요. 즉 완전 새롭게 모델을 만드는 방법입니다. 두번째는 'Fine-tuning a model from an existing checkpoint' 인데 이미 잘 만들어진 모델에 추가 이미지를 학습 시켜 모델을 만드는 방법입니다. 이 두가지 방법에 대해 실습을 진행해 보겠습니다.
1) Trainng a model from scratch
지난 시간에 다운 받았던 flowers 이미지 셋을 가지고 inception_resnet_v2 모델로 새롭게 학습시켜 보겠습니다.
python train_image_classifier.py
--train_dir=\tmp\train_inception_resnet_v2_flowers_logs # 모델 저장될 폴더
--dataset_name=flowers # 이미지 셋 이름
--dataset_split_name=train # 학습에 사용할 이미지 선택
--dataset_dir=\tmp\flowers # 이미지 셋 위치
--model_name=inception_resnet_v2 # 사용할 모델 이름
python train_image_classifier.py --train_dir=\tmp\train_inception_resnet_v2_flowers_logs --dataset_name=flowers --dataset_split_name=train --dataset_dir=\tmp\flowers --model_name=inception_resnet_v2
아나콘다에서 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_resnet_v2 모델로 flowers 분류 학습을 해봤으니 비교를 위해 같은 모델로 ImageNet이 미리 학습된 모델을 다운 받겠습니다. 실제 ImageNet top5 95.3% 정확도를 가진 모델입니다.
다운 받았으면 압축을 풀어 inception_resnet_v2_2016_08_30.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_resnet_v2_flowers_FineTune_logs
--dataset_name=flowers
--dataset_split_name=train
--dataset_dir=\tmp\flowers
--model_name=inception_resnet_v2
--checkpoint_path=\tmp\my_checkpoints/inception_resnet_v2_2016_08_30.ckpt
--checkpoint_exclude_scopes=InceptionResnetV2/Logits,InceptionResnetV2/AuxLogits
--trainable_scopes=InceptionResnetV2/Logits,InceptionResnetV2/AuxLogits
--max_number_of_steps=1000
--batch_size=32
--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_resnet_v2_flowers_FineTune_logs --dataset_name=flowers --dataset_split_name=train --dataset_dir=\tmp\flowers --model_name=inception_resnet_v2 --checkpoint_path=\tmp\my_checkpoints\inception_resnet_v2_2016_08_30.ckpt --checkpoint_exclude_scopes=InceptionResnetV2/Logits,InceptionResnetV2/AuxLogits --trainable_scopes=InceptionResnetV2/Logits,InceptionResnetV2/AuxLogits --max_number_of_steps=1000 --batch_size=32 --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_resnet_v2_flowers_FineTune_logs\all
--dataset_name=flowers
--dataset_split_name=train
--dataset_dir=\tmp\flowers
--model_name=inception_resnet_v2
--checkpoint_path=\tmp\train_inception_resnet_v2_flowers_FineTune_logs
--max_number_of_steps=500
--batch_size=32
--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_resnet_v2_flowers_FineTune_logs\all --dataset_name=flowers --dataset_split_name=train --dataset_dir=\tmp\flowers --model_name=inception_resnet_v2 --checkpoint_path=\tmp\train_inception_resnet_v2_flowers_FineTune_logs --max_number_of_steps=500 --batch_size=32 --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) 실습을 하겠습니다.
*질문은 댓글로 주세요.
안녕하십니까? 덕분에 Windows10에 텐서플로를 설치하고 따라하고 있는데요.
답글삭제2.1 까지는 문제없이 잘 따라했으나, 1) Trainng a model from scratch에서 올려주신 명령어를 사용하면, Please switch to tf.summary.histogram. 이 나오면서 경고가 많이 나오며, Please switch to tf.summary.merge. 이라는 말이 나오네요.
결국 에로를 뿜으며 동작이 안되는데요. 혹시 해결방안을 얻을 수 있을까요???
음... 혹시 사용하시는 컴퓨터의 RAM과 GPU의 메모리가 어떻게 되시나요? 예제에서 사용된 컴퓨터는 RAM 256GB, GPU 12GB 에요. 그리고 예제에서 사용된 CNN 네트워크가 Inception_Resnet 이라서 메모리를 엄청나게 많이 필요로 하거든요. 메모리 문제라면 다른 네트워크 가령 vgg 같은걸로 예제를 돌려보면 좋을 거 같습니다.
삭제답변 주셔서 감사합니다.
삭제저는 i7-3770, RAM 16GB, GTX1050 2GB를 사용하고 있습니다.
혹시 제가 일어나는 오류내용을 보내드리면 혹시 메모리가 부족해서인지 아니면 다른 부분에서 문제가 있는지 판독을 좀 부탁드려도 되겠습니까?
답변이 늦어 죄송합니다. 요즘 너무 바빠서..ㅜㅜ GPU가 2GB 밖에 안되네요. 메모리 부족으로 딥러닝이 안돌아가는거고요. vgg 로 돌려 보시고 그것도 에러 나면 batch size를 더 낮게 설정해야하는데... 언제 한번 낮은 사양에서도 돌아가는 예제를 만들어 볼게요!
삭제저도 윗분과 같은 에러에 시달리고 있습니다 ㅠㅠ
답글삭제Inception_Resnet 대신 어떤 모델을 사용해야 할까여?
vgg 모델 사용하면 되는데요... 낮은 사양에서 제가 돌려본게 아니라서... 확신할 수 없어요!
삭제안녕하세요! 아직서툴러서 실수하는 부분이 많은데 포스팅이 정말 많은 도움이 되네요!ㅎㅎ 그런데 혹시 1) Training a model from scratch 에서 학습을 종료시키려면 어떻게 해야하나요??
답글삭제가장 중요한 것을 적지 않았었네요! Ctrl + C 누르면 학습이 중지 됩니다.
삭제감사합니다!ㅎㅎ
삭제포스팅 정말 도움이 많이 됩니다 ^^
답글삭제FineTune 을 이용하여 1000번 학습하고 보았더니
model.ckpt-1000.data-00000-of-00001
model.ckpt-1000.index
model.ckpt-1000.meta
라는 파일이 생성되었는데 .data, .index, meta 각 파일은 어떤 용도의 파일인지
알 수 있을까요?
그리고.. 포스팅에서 .ckpt 파일이 체크포인트라고 하셨는데
Finetune 하고 난 것은 .ckpt 뒤에 "-1000.data-00000-of-00001" 처럼 더 확장자? 같은 것이 더 있습니다.
그럼 실제 체크포인트 파일은 어떤 건가요?
질문이 길어져서 죄송합니다 ^^; 좋은 하루 되세요 ~
안녕하세요 ㅎㅎ
삭제위 본문에도 적어 놓았지만... 전 잘 몰라요 ㅎ
model.ckpt 파일은 학습된 모델들(변수값 weight값 등)이 저장되어 있고 나중에 saver.restore('파일명')으로 불러와서 사용할 수 있습니다
삭제안녕하세요. 엄청난 포스팅 덕분에 fine-tunning 까지 성공했습니다!
답글삭제(tensorflow 가 업데이트 되고, 이제slim도 업데이트 되어서 tensorflow를 최신버전으로 설치해야하네요!)
혹시 다른 네트워크도 실험해보셨나요?? 사실 저는 AlexNet을 학습시켜보고 싶어서 블로그를 찾게 되었는데, alexnet_v2나 vgg_16 과 같은 다른 네트워크는 오류가 나네요 ㅠ
slim에서 제공하고 네트워크는 다 잘 돌아가고요... 다만 사용하시는 컴퓨터 사양(특히 GPU 메모리)에 따라 오류가 날 수 있어요.
삭제concat() got an unexpected keyword argument 'axis'
답글삭제텐서플러 0.11, 0.12 버전에서 실행해도 이런 에러가 뜨네요 ㅠ
저도 동일한 에러가 뜨는데 해결 방법 없을까요?
삭제이런 에러는 본적이 없는데요... 더 자세한 상황을 말씀해주시면 감사하겠습니다.
삭제참고로 Tensorflow 1.1 버전에 맞게 새로 포스팅 했으니 참고해주세요
3번 step까지 잘따라왔습니다. 학습 시키는 방법 많이 궁금했는데 감사합니다.
답글삭제실제 학습된 모델은 어떤식으로 활용되는 지요? 별도의 tool / program으로 provsion을 해야 하는지요 ?
4장에서 예제 코드를 올릴 예정입니다만...
삭제파이썬 코드로 분류하고자 하는 이미지를 학습된 모델에 넣어 보고 그 결과를 출력하는
정도로 사용됩니다.
vgg 모델로 fine-tuning 과정을 해보려고 하는데 ValueError: No variables to optimize. 이런 에러가 발생하네요.. 혹시 해결방법이 있나여?
답글삭제