이젠 Imagenet의 방대한 데이터로 사전 학습된 신경망 모델만으로도 충분한 분류 성능을 기대할 수 있게 되었습니다. 물론, 특정한 객체를 집중적으로 분류하기 위해서는 추가 데이터를 통한 미세 학습이 (Find-Tuning)이 필요합니다.
이번 포스팅에서는 학습 모델 구축 이전 대략적인 성능 평가를 할 수 있는 사전 학습 모델로 이미지 분류를 Tensorflow로 구현해 보록 하겠습니다.
텐서 플로우 설치나 사전 학습 모델 불러오는 방법의 상세 설명은 이전 포스팅을 참고하시면 됩니다.
0. 소스코드 다운로드
github.com/DEEPI-LAB/python-TensorFlow-Tutorials.git
git clone https://github.com/DEEPI-LAB/python-TensorFlow-Tutorials.git
1. 사전학습된 VGG16 모델 불러오기
import cv2
from tensorflow.python.keras.applications.vgg16 import VGG16
from tensorflow.python.keras.preprocessing.image import img_to_array
from tensorflow.python.keras.applications.vgg16 import preprocess_input, decode_predictions
# 사전 학습된 모델 불러오기
model = VGG16(weights='imagenet')
imagenet 데이터로 학습된 가중치를 갖는 VGG16 모델을 불러와줍니다. VGG16은 224x244 x3의 이미지를 입력으로 하는 신경망 구조입니다. 따라서 분류를 위해 입력되는 이미지는 VGG16에 맞게 전처리 해주어야합니다.
2. 이미지 전처리
# 분류를 위한 이미지 불러오기
image = cv2.imread("dog.jpg")
# 이미지 리사이징
image = cv2.resize(image,dsize=(224,224))
image = img_to_array(image)
image = image.reshape((1, image.shape[0],image.shape[1],image.shape[2]))
image = preprocess_input(image)
VGG16 모델의 경우, Tensor flow에서 입력을 위한 전처리 함수들을 제공하고 있으며 아래와 같이 진행됩니다.
이미지 크기 변경 -> 데이터 자료형 변경 -> 텐서 형태로 변경
3. 이미지 분류기 입력
# 클래스 예측
yhat = model.predict(image)
# 클래스 디코딩 (STRING)
label = decode_predictions(yhat)
# 클래스 부여 (최상위 스코어 클래스)
label = label[0][0]
# Result
print("%s (%.2f%%)" % (label[1], label[2]*100))
imagenet 데이터는 총 1000개의 클래스를 갖는 데이터입니다. 따라서 model.predict 함수를 통해 예측된 결과는 1000개의 클래스에 대한 확률 값으로 그림 2와 같이 출력됩니다.
출력된 1000개의 벡터 중 가장 높은 값을 최종 예측값으로 판단하게 됩니다. 마스크를 쓴 pug 이미지에 대한 결괏값은 69.5% 스코어를 가지는 pug가 가장 높은 값으로 예측되었습니다. 분류에 성공했습니다.
Your Best AI Partner DEEP.I
AI 바우처 공급 기업
객체 추적 및 행동 분석 솔루션 | 제조 생산품 품질 검사 솔루션 | AI 엣지 컴퓨팅 시스템 개발
인공지능 프로젝트 개발 외주 및 상담
E-mail: contact@deep-i.ai
Site: www.deep-i.ai
'Python > Tensorflow' 카테고리의 다른 글
[Tensorflow] keras를 이용한 MNIST, CIFAR 이미지 분류 데이터셋 다운로드 (0) | 2020.12.30 |
---|---|
[Tensorflow] VGG16 모델을 이용하여 CNN 이미지 분류기 학습하기 (0) | 2020.12.27 |
[Python] tensorflow에서 GPU, CPU 사용가능 칩셋 여부 확인하기 (0) | 2020.11.08 |
[Tensorflow] 사전 학습된 VGG16 모델에서 특징맵 추출하기 (0) | 2020.10.23 |
[Tensorflow] 텐서플로우에서 사전 학습된 VGG16 모델 불러오기 (0) | 2020.07.10 |