VGG16 으로 5초만에 아방이 예측 파이썬 치트코드

  • 이번에는 keras에 기본적으로 포함되어 있는 VGG16으로 실제 제차인 아방이를 맞춰보도록 하겠습니다.
VGG

VGG16으로 빠르게 물건 예측하기

  • vgg는 imagenet으로 미리 훈련시켜놓은 모델이며, 이를 기반으로 새로운 이미지 데이터를 판별해 낼수 있습니다. 2014년 당시는 개선율이 꽤 좋았기 때문에 종종 쓰이는 모델입니다.
In [10]:
from keras.models import Model
from keras.preprocessing import image
from keras.optimizers import SGD
from keras.applications.vgg16 import VGG16, decode_predictions
import matplotlib.pyplot as plt
import numpy as np
import cv2

모델 로딩

  • 로딩은 VGG16을 불러오기만 하면 모든게 완성이 됩니다.

  • 케라스의 도큐멘트에 따르면 다음과 같은 어플리케이션을 쓸 수 있습니다.

Model Size Top-1 Accuracy Top-5 Accuracy Parameters Depth
Xception 88 MB 0.790 0.945 22,910,480 126
VGG16 528 MB 0.713 0.901 138,357,544 23
VGG19 549 MB 0.713 0.900 143,667,240 26
ResNet50 98 MB 0.749 0.921 25,636,712
ResNet101 171 MB 0.764 0.928 44,707,176
ResNet152 232 MB 0.766 0.931 60,419,944
ResNet50V2 98 MB 0.760 0.930 25,613,800
ResNet101V2 171 MB 0.772 0.938 44,675,560
ResNet152V2 232 MB 0.780 0.942 60,380,648
ResNeXt50 96 MB 0.777 0.938 25,097,128
ResNeXt101 170 MB 0.787 0.943 44,315,560
InceptionV3 92 MB 0.779 0.937 23,851,784 159
InceptionResNetV2 215 MB 0.803 0.953 55,873,736 572
MobileNet 16 MB 0.704 0.895 4,253,864 88
MobileNetV2 14 MB 0.713 0.901 3,538,984 88
DenseNet121 33 MB 0.750 0.923 8,062,504 121
DenseNet169 57 MB 0.762 0.932 14,307,880 169
DenseNet201 80 MB 0.773 0.936 20,242,984 201
NASNetMobile 23 MB 0.744 0.919 5,326,716
NASNetLarge 343 MB 0.825 0.960 88,949,818
In [29]:
model = VGG16(weights = 'imagenet', include_top=True)
sgd = SGD(lr=0.1, decay=1e-6, momentum=0.9, nesterov=True)
model.compile(optimizer=sgd, loss='categorical_crossentropy')

자동차인지 아닌지 애매한 물건 맞춰보기

  • 이미지가 굉장히 작으며, 224픽셀로 늘리더라도 알아보기가 힘듭니다.
In [5]:
from pylab import imread
import matplotlib.pyplot as plt
image = imread('augmentation/cifar_0_23.jpeg') 
plt.imshow(image)
Out[5]:
<matplotlib.image.AxesImage at 0x20e978fd4a8>
In [3]:
im = cv2.resize(cv2.imread('./augmentation/cifar_0_24.jpeg'), (224,224))
im = np.expand_dims(im, axis = 0)

예측 결과 확인

  • 예측결과로 보아하니, 정말 상관없는것들로만 예측을 하였습니다.
  • petri_dish는 아래와 같은 접시로 뭐 그다지 비슷하지조차 않습니다.
  • 실제 모델을 예측한것또한 많은 클래스에 복잡하게 흩어진것을 알수있습니다. alt text
In [19]:
out = model.predict(im)
print('Predicted:', decode_predictions(out, top=3)[0])
plt.plot(out.ravel())
plt.show()
Predicted: [('n03920288', 'Petri_dish', 0.11389699), ('n04357314', 'sunscreen', 0.10069153), ('n04270147', 'spatula', 0.08029666)]

고화질 사진으로 예측결과 확인

  • 제 차를 한번 예측해보겠습니다. 신형 아방이입니다. 예쁘죠?
  • 아 나만 예쁜가?
In [30]:
im = cv2.resize(cv2.imread('./avante.jpg'), (224,224))
im = np.expand_dims(im, axis = 0)

image = imread('./avante.jpg') 
plt.imshow(image)
Out[30]:
<matplotlib.image.AxesImage at 0x20ec695d2b0>

예측결과 확인

  • minivan, sports_car, grille 등으로 제대로 예측한걸 알수있습니다.
  • 자동차의 그릴이 하도 크게 나온지라, 이를 예측을하기도 하네요.
  • 최근 현대차의 매력은 큰 그릴 아시지요? 깔깔
In [31]:
out = model.predict(im)
print('Predicted:', decode_predictions(out, top=3)[0])
plt.plot(out.ravel())
plt.show()
Predicted: [('n03770679', 'minivan', 0.28277415), ('n04285008', 'sports_car', 0.14808415), ('n03459775', 'grille', 0.11750594)]

답글 남기기