*Tensorflow 1.9 버전 튜토리얼
1. 윈도우에 Tensorflow GPU 버전 설치하기
2 딥러닝 slim 라이브러리 설치, 학습, 평가하기
3. 내 이미지로 학습 하기 ( caltech 이미지 사용 )
4. 학습된 모델 사용하기
1. 윈도우에 Tensorflow GPU 버전 설치하기
2.1 딥러닝 slim 라이브러리 설치 및 이미지 셋 다운로드
2.2 딥러닝 모델 학습하기
2.3 딥러닝 모델 평가하기
3. 내 이미지로 학습 하기 ( caltech 이미지 사용 )
4. 학습된 모델 사용하기 - 이미지 한장 분류하기
드디어... 드디어... 마지막 장입니다. 3장에서 4장을 넘어 오는데.. 많은 시간이 걸렸네요. 개인적으로 많은 일들이 있어서... 이제 다 정리되고 다시 제자리로 돌아왔습니다.
3장까지 잘 따라 오셨다면 이번 장은 아주 쉬울 겁니다. 학습된 모델에 내가 원하는 이미지를 넣어보고 그 결과를 확인해 보겠습니다.
* 여기에 사용된 코드는 slim 폴더에 있는 slim_walkthrough.ipynb 을 참조해서 만들었습니다.
이번 실습에서는 아래 파이썬 코드를 직접 코딩하여 Image_Classification_Caltech256.py 로 저장하겠습니다.
코드 설명은... 음... 저도 잘 모르지만.. 제가 바꾼 코드는 10 라인 checkpoints_dir 를 저희가 사용한 실습 데이터 경로로 정해줬고요. 리눅스였다면 디렉토리 경로를 '/'로 해줘야 하지만 저희는 윈도우에서 사용하고 있기 때문에 '\'를 써야하고 문자열에서의 '\'는 특수 기호이기 때문에 '\\' 이렇게 써줘야지 잘 인식되게 됩니다.
18라인 image_input = tf.read_file("080_0010.jpg")
slim 폴더에 위 파일을 복사해서 넣어 두었습니다. 080_0010.jpg 는 \\tmp\\caltech256\\caltech256_photos 디렉토리의 080.frog 폴더 아래에 있는 파일중 하나입니다. 폴더 이름에서 알 수 있듯이 개구리 사진입니다. 과연 저희가 학습한 모델이 이 사진을 개구리라고 분류할 수 있을까요? (잠시후 확인하시죠)
27라인 logits, _ = inception.inception_v1(processed_images, num_classes=257, is_training=False)
원 코드에는 1001로 되어 있으나 우리의 모델은 257개의 클래스로 분류를 하기 때문에 257로 변경 시켰습니다. 학습된 모델의 클래스와 이 수가 다르면 에러가 발생 되게 됩니다.
31라인 os.path.join(checkpoints_dir, 'model.ckpt-500'),
모델 이름을 적어 주었고요.
45라인 names = os.listdir("\\tmp\\caltech256\\caltech256_photos")
분류된 결과는 인덱스(숫자)로만 출력이 되기 때문에 그 인덱스가 의미하는 라벨이 뭔지를 같이 보여주면 결과를 더 잘 확인 할 수 있습니다. 우리의 인덱스는 위 폴더 이름을 그대로 인덱스로 만들어 졌기 때문에 폴더명을 읽어서 names에 저장하였습니다.
자! 이제 한번 실행시켜 볼까요!
와우! 이미지 창이 하나 떳습니다!
개구리! 아나콘다 프롬프트에는 아무런 결과가 표시 되지 않는군요. 이 이미지 창을 Close 시켜 보겠습니다.
네! 위와 같이 위 이미지를 우리가 학습한 모델을 통과 시킨 뒤의 결과를 확인 할 수 있습니다. 60%의 확률로 080.frog로 예측, 분류를 했습니다.
위의 코드 중 18라인의 이미지 파일을 변경해보면서 테스트 해보시기 바랍니다.
자 Tensorflow, 딥러닝 CNN 네트워크에 대해 하나도 몰라도 slim 이라는 라이브러리를 이용해 딥러닝 모델을 생성 시켜 보았습니다.
다음 연재할 내용은... 뭐가 좋을까요? 고민해 보겠습니다.
질문은 댓글로 주세요~
1. 윈도우에 Tensorflow GPU 버전 설치하기
2 딥러닝 slim 라이브러리 설치, 학습, 평가하기
3. 내 이미지로 학습 하기 ( caltech 이미지 사용 )
4. 학습된 모델 사용하기
1. 윈도우에 Tensorflow GPU 버전 설치하기
2.1 딥러닝 slim 라이브러리 설치 및 이미지 셋 다운로드
2.2 딥러닝 모델 학습하기
2.3 딥러닝 모델 평가하기
3. 내 이미지로 학습 하기 ( caltech 이미지 사용 )
4. 학습된 모델 사용하기 - 이미지 한장 분류하기
드디어... 드디어... 마지막 장입니다. 3장에서 4장을 넘어 오는데.. 많은 시간이 걸렸네요. 개인적으로 많은 일들이 있어서... 이제 다 정리되고 다시 제자리로 돌아왔습니다.
3장까지 잘 따라 오셨다면 이번 장은 아주 쉬울 겁니다. 학습된 모델에 내가 원하는 이미지를 넣어보고 그 결과를 확인해 보겠습니다.
* 여기에 사용된 코드는 slim 폴더에 있는 slim_walkthrough.ipynb 을 참조해서 만들었습니다.
이번 실습에서는 아래 파이썬 코드를 직접 코딩하여 Image_Classification_Caltech256.py 로 저장하겠습니다.
코드 설명은... 음... 저도 잘 모르지만.. 제가 바꾼 코드는 10 라인 checkpoints_dir 를 저희가 사용한 실습 데이터 경로로 정해줬고요. 리눅스였다면 디렉토리 경로를 '/'로 해줘야 하지만 저희는 윈도우에서 사용하고 있기 때문에 '\'를 써야하고 문자열에서의 '\'는 특수 기호이기 때문에 '\\' 이렇게 써줘야지 잘 인식되게 됩니다.
18라인 image_input = tf.read_file("080_0010.jpg")
slim 폴더에 위 파일을 복사해서 넣어 두었습니다. 080_0010.jpg 는 \\tmp\\caltech256\\caltech256_photos 디렉토리의 080.frog 폴더 아래에 있는 파일중 하나입니다. 폴더 이름에서 알 수 있듯이 개구리 사진입니다. 과연 저희가 학습한 모델이 이 사진을 개구리라고 분류할 수 있을까요? (잠시후 확인하시죠)
27라인 logits, _ = inception.inception_v1(processed_images, num_classes=257, is_training=False)
원 코드에는 1001로 되어 있으나 우리의 모델은 257개의 클래스로 분류를 하기 때문에 257로 변경 시켰습니다. 학습된 모델의 클래스와 이 수가 다르면 에러가 발생 되게 됩니다.
31라인 os.path.join(checkpoints_dir, 'model.ckpt-500'),
모델 이름을 적어 주었고요.
45라인 names = os.listdir("\\tmp\\caltech256\\caltech256_photos")
분류된 결과는 인덱스(숫자)로만 출력이 되기 때문에 그 인덱스가 의미하는 라벨이 뭔지를 같이 보여주면 결과를 더 잘 확인 할 수 있습니다. 우리의 인덱스는 위 폴더 이름을 그대로 인덱스로 만들어 졌기 때문에 폴더명을 읽어서 names에 저장하였습니다.
자! 이제 한번 실행시켜 볼까요!
from matplotlib import pyplot as plt
import numpy as np
import os
import tensorflow as tf
from nets import inception
from preprocessing import inception_preprocessing
checkpoints_dir = '\\tmp\\train_inception_v1_caltech256_FineTune_logs\\all'
slim = tf.contrib.slim
image_size = inception.inception_v1.default_image_size
with tf.Graph().as_default():
image_input = tf.read_file("080_0010.jpg")
image = tf.image.decode_jpeg(image_input, channels=3)
processed_image = inception_preprocessing.preprocess_image(image,
image_size,
image_size,
is_training=False)
processed_images = tf.expand_dims(processed_image, 0)
with slim.arg_scope(inception.inception_v1_arg_scope()):
logits, _ = inception.inception_v1(processed_images, num_classes=257, is_training=False)
probabilities = tf.nn.softmax(logits)
init_fn = slim.assign_from_checkpoint_fn(
os.path.join(checkpoints_dir, 'model.ckpt-500'),
slim.get_model_variables('InceptionV1'))
with tf.Session() as sess:
init_fn(sess)
np_image, probabilities = sess.run([image, probabilities])
probabilities = probabilities[0, 0:]
sorted_inds = [i[0] for i in sorted(enumerate(-probabilities), key=lambda x:x[1])]
plt.figure()
plt.imshow(np_image.astype(np.uint8))
plt.axis('off')
plt.show()
names = os.listdir("\\tmp\\caltech256\\caltech256_photos")
for i in range(5):
index = sorted_inds[i]
print('Probability %0.2f%% => [%s]' % (probabilities[index], names[index]))
위 코드를 Image_Classification_Caltech256.py 로 slim 폴더에 저장하고 아나콘다에서 아래와 같이 실행하겠습니다.python Image_Classification_Caltech256.py
와우! 이미지 창이 하나 떳습니다!
개구리! 아나콘다 프롬프트에는 아무런 결과가 표시 되지 않는군요. 이 이미지 창을 Close 시켜 보겠습니다.
위의 코드 중 18라인의 이미지 파일을 변경해보면서 테스트 해보시기 바랍니다.
자 Tensorflow, 딥러닝 CNN 네트워크에 대해 하나도 몰라도 slim 이라는 라이브러리를 이용해 딥러닝 모델을 생성 시켜 보았습니다.
다음 연재할 내용은... 뭐가 좋을까요? 고민해 보겠습니다.
질문은 댓글로 주세요~
작성자가 댓글을 삭제했습니다.
답글삭제slim을 이용한 multi-label classification을 해보시는 건 어떠세요~? 진행중인데 쉽지 않네요 ㅎㅎ
답글삭제정말 좋은 자료 감사합니다. 공부하는 데 큰 도움이 되었습니다!
답글삭제