DEEP.I - Lab

오프라인 공간의 지능화를 꿈꾸는 딥아이 연구실입니다.

Python/Tensorflow

[Tensorflow] 사전 학습된 VGG16 모델로 이미지 분류하기

Jongwon Kim 2020. 12. 13. 17:59
반응형

이젠 Imagenet의 방대한 데이터로 사전 학습된 신경망 모델만으로도 충분한 분류 성능을 기대할 수 있게 되었습니다. 물론, 특정한 객체를 집중적으로 분류하기 위해서는 추가 데이터를 통한 미세 학습이 (Find-Tuning)이 필요합니다.

 

이번 포스팅에서는 학습 모델 구축 이전 대략적인 성능 평가를 할 수 있는 사전 학습 모델로 이미지 분류를 Tensorflow로 구현해 보록 하겠습니다. 

 

 

그림 1. 이미지넷 데이터 성능평가 결과

 

텐서 플로우 설치나 사전 학습 모델 불러오는 방법의 상세 설명은 이전 포스팅을 참고하시면 됩니다.

 

deep-eye.tistory.com/7

 

[Tensorflow] 아나콘다 가상환경에서 텐서플로우 설치하기

2019년 말, 텐서플로우 2.0 버전이 배포되면서 머신러닝 분야에서 텐서플로우의 열기는 더욱 더 뜨거워졌습니다. 새로워진 텐서플로우 설치를 시작으로 CNN (Convolutional Neural Network) 기반의 이미지

deep-eye.tistory.com

deep-eye.tistory.com/9

 

[Tensorflow] 텐서플로우에서 사전 학습된 VGG16 모델 불러오기

텐서플로우 설치 포스팅에 이어 사전 학습된 VGG 모델을 활용하는 방법을 살펴보겠습니다. VGG Network는 2014년 이미지넷 인식 학술대회에서 2등을 한 신경망 구조입니다. 본격적으로 층이 깊어지기

deep-eye.tistory.com

 

0. 소스코드 다운로드

github.com/DEEPI-LAB/python-TensorFlow-Tutorials.git

 

DEEPI-LAB/python-TensorFlow-Tutorials

Contribute to DEEPI-LAB/python-TensorFlow-Tutorials development by creating an account on GitHub.

github.com

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와 같이 출력됩니다.

 

그림 2. VGG16 출력

 

출력된 1000개의 벡터 중 가장 높은 값을 최종 예측값으로 판단하게 됩니다. 마스크를 쓴 pug 이미지에 대한 결괏값은 69.5% 스코어를 가지는 pug가 가장 높은 값으로 예측되었습니다. 분류에 성공했습니다. 

 

 

 

 

Your Best AI Partner DEEP.I
AI 바우처 공급 기업
객체 추적 및 행동 분석 솔루션 | 제조 생산품 품질 검사 솔루션 | AI 엣지 컴퓨팅 시스템 개발

인공지능 프로젝트 개발 외주 및 상담
E-mail: contact@deep-i.ai
Site: www.deep-i.ai
 

딥아이 DEEP.I | AI 기반 지능형 기업 솔루션

딥아이는 AI 기술의 정상화라는 목표를 갖고, 최첨단 딥러닝 기술 기반의 기업 솔루션을 제공하고 있으며, 이를 통해 고도의 AI 기반 객체 탐지, 분석, 추적 기능을 통합하여 다양한 산업 분야에

deep-i.ai

 

 

반응형