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

    답글삭제
    답글
    1. 감사합니다. 다음편도... 화이팅!

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

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

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

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

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

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

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

      삭제

가장 많이 본 글