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

2017년 1월 6일 금요일

윈도우에서 Tensorflow slim 모델 사용하기 - 2.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 이미지 사용 )
4. 학습된 모델 사용하기
5. Python Tkinter GUI 응용 프로그램 만들기




 지난 포스팅에서 3가지 방식으로 딥러닝 모델을 학습 시켜 보았습니다. 이번 포스팅에서는 그 3가지 모델의 정확도를 평가해보겠습니다.

3가지 모델의 종류는 아래와 같고, 순서대로 평가 해 보겠습니다.

1번 모델 : Flowers로부터 새롭게 만든 모델
2번 모델 : 이미 잘 만들어진 모델로부터 Flowers로 마지막 layer만 학습해 만든 모델
3번 모델 : 2번에서 만든 모델로부터 전체 layer를 학습해 만든 모델


아나콘다에서 slim 폴더로 이동한 후 아래 명령어로 1번 모델을 평가해보겠습니다

python eval_image_classifier.py
--alsologtostderr
--checkpoint_path=\tmp\train_inception_resnet_v2_flowers_logs\
--dataset_dir=\tmp\flowers
--dataset_name=flowers
--dataset_split_name=validation
--model_name=inception_resnet_v2

python eval_image_classifier.py –alsologtostderr --checkpoint_path=\tmp\train_inception_resnet_v2_flowers_logs\ --dataset_dir=\tmp\flowers --dataset_name=flowers --dataset_split_name=validation --model_name=inception_resnet_v2
 eval_image_classifier.py 파일이 --checkpoint_path 로 지정된 폴더의 모델을 평가하는 명령어 입니다. 실행을 해보면 아래와 같은 에러가 발생합니다.


 eval_image_classifier.py 161번 라인에서 AttributeError: 'dict' object has no attribute 'iteritems' 라는 에러 메시지가 뜹니다.


Spyder로 해당 파일을 열어서 161번 라인을 위와 같이 기존 names_to_values.iteritems() 를 names_to_values.items() 로 바꾸고 저장후 다시 실행해 보겠습니다.

또 에러가 나네요. 이번엔 186번 라인입니다.


 기존 eval_op=names_to_updates.values(), 을 eval_op=list(names_to_updates.values()), 로 아래와 같이 바꾸고 저장 후 다시 실행합니다.


모델 평가 결과를 확인해 보겠습니다.


 마지막 부분에 보면 eval/Recall@5[1] 이라고 나온 부분은 ImageNet 처럼 모델에서 예측 확률이 가장 높게 나온 5개 class 중에 하나가 맞으면 맞다고 보는 정확도 측정 방법입니다. [ ] 안에 있는 값이 예측 정확도인데 무려 1 -> 100% 라는 말입니다! 근데 놀라지 마세요. Flowers 이미지는 원래 5개 중에서 하나를 맞추는 것이기 때문에 당연히 100% 예측 정확도가 나옵니다. 그 다음 줄에 있는 eval/Accuracy[0.8975] 에 있는 값이 실 예측 정확도 입니다. 89.75%가 나오는 것으로 평가 됩니다.

다음은 2번 모델을 평가하겠습니다.

python eval_image_classifier.py
--alsologtostderr
--checkpoint_path=\tmp\train_inception_resnet_v2_flowers_FineTune_logs\
--dataset_dir=\tmp\flowers
--dataset_name=flowers
--dataset_split_name=validation
--model_name=inception_resnet_v2
python eval_image_classifier.py –alsologtostderr --checkpoint_path=\tmp\train_inception_resnet_v2_flowers_FineTune_logs\ --dataset_dir=\tmp\flowers --dataset_name=flowers --dataset_split_name=validation --model_name=inception_resnet_v2
2번 모델의 위치만 --checkpoint_path에 지정해주고 실행시킵니다.


80.75% 분류 예측 정확도가 나옵니다.

3번 모델을 평가 하겠습니다.

python eval_image_classifier.py
--alsologtostderr
--checkpoint_path=\tmp\train_inception_resnet_v2_flowers_FineTune_logs\all\
--dataset_dir=\tmp\flowers
--dataset_name=flowers
--dataset_split_name=validation
--model_name=inception_resnet_v2
python eval_image_classifier.py –alsologtostderr --checkpoint_path=\tmp\train_inception_resnet_v2_flowers_FineTune_logs\all\ --dataset_dir=\tmp\flowers --dataset_name=flowers --dataset_split_name=validation --model_name=inception_resnet_v2

3번 모델은 88.5%의 분류 예측 정확도를 보였습니다.


Steps
학습 시간
모델 정확도
1번 모델
29233
24.383 시간
89.75 %
2번 모델
1000
0.27 시간
80.75 %
3번 모델
500
0.41 시간
88.5 %

 다시 정리해보면 1번 모델이 가장 높은 정확도를 보였지만 3번 모델은 1번 모델에 비해 약 24분의 1의 학습 시간만으로 1번 모델과 거의 비슷한 모델 정확도를 얻을 수 있었습니다. 3번 모델을 500 step 보다 더 많은 step으로 학습을 계속 시킨다면 1번 모델보다 더 높은 정확도가 나올거 같네요.(직접 한번 해보세요)

 지금까지 Tensorflow slim (TF-Slim)을 이용한 딥러닝 이미지 분류기 모델의 이미지 준비부터 모델 학습, 평가 까지 실습을 다 해보았습니다.

 다음에는 예제에 포함되어 있지 않은 Caltech 이미지(257 label class)를 어떻게 TF-Slim을 사용해서 딥러닝 모델을 만드는지 실습해 보도록 하겠습니다.

댓글 12개:

  1. 중간에 발생하는 에러 수정까지 단계별로 기술해주셔서
    예제를 정말 쉽게 따라할 수 있도록 만들어주셨군요.
    좋은 내용에 감사드립니다.
    다음 편도 기대하고 있겠습니다 ^^

    답글삭제
    답글
    1. 네 도움 되었다니 뿌듯합니다. 빨리 다음 편을 올려야 하는데...^^;

      삭제
  2. 좋은 자료 올려주셔서 감사합니다..
    하나하나 설명도 정말 잘해주시고 이유도 잘 설명해 주셔서 잘따라 가고 있습니다.
    좋은 내용에 정말 감사드립니다.
    다음편도 기대하고있습니다 화이팅!!

    답글삭제
  3. 그대로만 따라해도 돌아가는 보기드문 포스팅이네요 ㅋㅋ
    정말 감사합니다!!

    답글삭제
    답글
    1. 네 한땀 한땀 정성스럽게... 작성했습니다 ㅋㅋ

      삭제
  4. 좋은 포스팅 감사합니다!^^

    답글삭제
  5. 아주 좋은 포스팅 보고 있습니다
    3절부터 기대 기다리고 있습니다 !!!!

    답글삭제
    답글
    1. 네 다들 기다리시고 계신데..
      빨리 올리도록 할게요!

      삭제
  6. 좋은 포스팅 감사합니다 ^^
    위 평가에서.. 특정 이미지 파일에 대해서
    평가를 해 보려고 하면 어떻게 할 수 있을까요?

    답글삭제
    답글
    1. 이것도 예제 코드는 만들어 놓았는데...
      포스팅할 시간이 잘 나지 않네요~
      조금만 기다려 주세요~~

      삭제

가장 많이 본 글