본문 바로가기

AI_딥 러닝_시각지능

AI_파이썬_시각지능_CNN_남이 만든 CNN모델(Pretrained )

남이 만든 CNN 모델! (Pretrained CNN)


쉽지만 중요한 코너!

이미 '잘 만들어진' 모델들을 가져다가 사용해보자.


Keras Update


!pip install keras-nightly
Collecting keras-nightly
  Downloading keras_nightly-3.7.0.dev2025010203-py3-none-any.whl.metadata (5.8 kB)
Requirement already satisfied: absl-py in /usr/local/lib/python3.10/dist-packages (from keras-nightly) (1.4.0)
Requirement already satisfied: numpy in /usr/local/lib/python3.10/dist-packages (from keras-nightly) (1.26.4)
Requirement already satisfied: rich in /usr/local/lib/python3.10/dist-packages (from keras-nightly) (13.9.4)
Requirement already satisfied: namex in /usr/local/lib/python3.10/dist-packages (from keras-nightly) (0.0.8)
Requirement already satisfied: h5py in /usr/local/lib/python3.10/dist-packages (from keras-nightly) (3.12.1)
Requirement already satisfied: optree in /usr/local/lib/python3.10/dist-packages (from keras-nightly) (0.13.1)
Requirement already satisfied: ml-dtypes in /usr/local/lib/python3.10/dist-packages (from keras-nightly) (0.4.1)
Requirement already satisfied: packaging in /usr/local/lib/python3.10/dist-packages (from keras-nightly) (24.2)
Requirement already satisfied: typing-extensions>=4.5.0 in /usr/local/lib/python3.10/dist-packages (from optree->keras-nightly) (4.12.2)
Requirement already satisfied: markdown-it-py>=2.2.0 in /usr/local/lib/python3.10/dist-packages (from rich->keras-nightly) (3.0.0)
Requirement already satisfied: pygments<3.0.0,>=2.13.0 in /usr/local/lib/python3.10/dist-packages (from rich->keras-nightly) (2.18.0)
Requirement already satisfied: mdurl~=0.1 in /usr/local/lib/python3.10/dist-packages (from markdown-it-py>=2.2.0->rich->keras-nightly) (0.1.2)
Downloading keras_nightly-3.7.0.dev2025010203-py3-none-any.whl (1.3 MB)
   ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 1.3/1.3 MB 18.1 MB/s eta 0:00:00
Installing collected packages: keras-nightly
Successfully installed keras-nightly-3.7.0.dev2025010203

Library Loading


from keras.applications.vgg16 import VGG16, preprocess_input, decode_predictions

import numpy as np
import matplotlib.pyplot as plt

Load Pretrained Model

  • "잘 만들어진" 모델 바로 가져오기!

vgg_model = VGG16(include_top=True,       # VGG16 모델의 아웃풋 레이어까지 전부 불러오기
                  weights='imagenet',     # ImageNet 데이터를 기반으로 학습된 가중치 불러오기
                  input_shape=(224,224,3) # 모델에 들어가는 데이터의 형태
                  )
Downloading data from https://storage.googleapis.com/tensorflow/keras-applications/vgg16/vgg16_weights_tf_dim_ordering_tf_kernels.h5
553467096/553467096 ━━━━━━━━━━━━━━━━━━━━ 5s 0us/step

vgg_model.summary()


from keras.utils import plot_model

plot_model(vgg_model, show_shapes=True, show_layer_names=True, show_layer_activations=True)
#이미지가 매우 커 출력값은 생략하도록 한다.


이미지 파일을 업로드 해둔 곳으로 가자!


구글 드라이브에 수집한 이미지를 업로드!

순서

  1. 구글링하여 이미지를 수집합니다.
  2. 본인의 구글 드라이브에 my_data 폴더를 생성합니다.
  3. my_data 폴더 안에 img1 폴더를 생성합니다.
  4. 1번 단계에서 수집한 이미지를 img1 폴더에 업로드 합니다.
  5. 30초 정도 기다립시다.
  6. 아래의 코드들을 실행합니다.

Connect Colaboratory with my Google Drive

  • Colaboratory와 본인의 구글 드라이브를 연결하는 과정
  • 아래 코드를 실행하여 폴더가 올바르게 생성 되었는지 확인

from google.colab import drive

drive.mount('/content/drive')
Mounted at /content/drive

!ls
drive  model.png  sample_data

!cd /content/drive/MyDrive/my_data; ls
img1  my_mnist

Load Image

  • 업로드 한 이미지 하나를 불러와 확인해본다

import glob
from keras.preprocessing import image

files = glob.glob('/content/drive/MyDrive/my_data/img1/*')
files
['/content/drive/MyDrive/my_data/img1/1.jpg',
 '/content/drive/MyDrive/my_data/img1/2.jpg',
 '/content/drive/MyDrive/my_data/img1/3.jpg',
 '/content/drive/MyDrive/my_data/img1/4.jpg',
 '/content/drive/MyDrive/my_data/img1/5.jpg',
 '/content/drive/MyDrive/my_data/img1/6.jpg',
 '/content/drive/MyDrive/my_data/img1/7.jpg']

img = image.load_img(files[-1], color_mode='rgb', target_size = (224,224) )
img = image.img_to_array(img)
img = img.reshape((-1,224,224,3))
print(f'preprocess 전: 최대값={np.max(img)}, 최소값={np.min(img)}')

img = preprocess_input(img)
print(f'preprocess 후: 최대값={np.max(img)}, 최소값={np.min(img)}')

features = vgg_model.predict(img)
print(decode_predictions(features, top=3))

plt.imshow(image.load_img(files[-1]))
plt.show()


Load Images

  • 업로드 한 이미지 전체를 확인해본다

images = []

for path in files :
    img = image.load_img(path, color_mode='rgb', target_size=(224,224) )
    img = image.img_to_array(img)
    img = preprocess_input(img)
    images.append(img)

images = np.array(images)

features = vgg_model.predict(images)
predictions = decode_predictions(features, top=3)

for i in range(images.shape[0]) :
    print(predictions[i])
    plt.imshow(image.load_img(files[i]))
    plt.show()

 

# 이미지는 용량이 매우 커 생략하기로 한다.
1/1 ━━━━━━━━━━━━━━━━━━━━ 5s 5s/step
[('n02280649', 'cabbage_butterfly', 0.1937402), ('n02281406', 'sulphur_butterfly', 0.11953507), ('n11939491', 'daisy', 0.083615504)]

[('n03991062', 'pot', 0.3786741), ('n12620546', 'hip', 0.11216143), ('n02280649', 'cabbage_butterfly', 0.08562447)]

[('n04209239', 'shower_curtain', 0.5381697), ('n03089624', 'confectionery', 0.14557941), ('n03930313', 'picket_fence', 0.07652541)]

[('n11939491', 'daisy', 0.9972742), ('n02219486', 'ant', 0.0011028049), ('n02206856', 'bee', 0.0006321555)]

[('n02280649', 'cabbage_butterfly', 0.23353593), ('n02281406', 'sulphur_butterfly', 0.1769382), ('n02279972', 'monarch', 0.11460436)]

[('n02280649', 'cabbage_butterfly', 0.19825938), ('n11939491', 'daisy', 0.12249449), ('n12057211', "yellow_lady's_slipper", 0.10233914)]

[('n03930313', 'picket_fence', 0.63343644), ('n04604644', 'worm_fence', 0.07614482), ('n02843684', 'birdhouse', 0.047126565)]​

Easy, but Very Important Exercise!

  • 강아지 이미지를 수집합시다. (다른 것으로 해도 됨.)
  • 본인이 판단하기에 잘 될 법한 강아지 이미지 10개를 찾아봅시다.
  • 본인이 판단하기에 잘 안 될 법한 강아지 이미지 10개를 찾아봅시다.

  • 경로 설정
    1. my_data 폴더 안에 img2 폴더를 생성합니다.
    2. 수집한 이미지를 img2 폴더에 업로드 하세요.

import glob

files = glob.glob('/content/drive/MyDrive/my_data/img2/*')
files
['/content/drive/MyDrive/my_data/img2/1.jpg',
 '/content/drive/MyDrive/my_data/img2/2.jpg',
 '/content/drive/MyDrive/my_data/img2/3.jpg',
 '/content/drive/MyDrive/my_data/img2/4.jpg',
 '/content/drive/MyDrive/my_data/img2/5.jpg']

images = []

for path in files :
    img = image.load_img(path, color_mode='rgb', target_size=(224,224) )
    img = image.img_to_array(img)
    img = preprocess_input(img)
    images.append(img)

images = np.array(images)

features = vgg_model.predict(images)
predictions = decode_predictions(features, top=3)

for i in range(images.shape[0]) :
    print(predictions[i])
    plt.imshow(image.load_img(files[i]))
    plt.show()

# 이미지는 용량이 매우 커 생략하도록한다.
1/1 ━━━━━━━━━━━━━━━━━━━━ 5s 5s/step
Downloading data from https://storage.googleapis.com/download.tensorflow.org/data/imagenet_class_index.json
35363/35363 ━━━━━━━━━━━━━━━━━━━━ 0s 0us/step

[('n02085936', 'Maltese_dog', 0.5005949), ('n02113624', 'toy_poodle', 0.10207428), ('n02098413', 'Lhasa', 0.09226305)]

[('n02091244', 'Ibizan_hound', 0.57619363), ('n02091831', 'Saluki', 0.12810868), ('n02091134', 'whippet', 0.10292074)]

[('n02097474', 'Tibetan_terrier', 0.30071172), ('n02111500', 'Great_Pyrenees', 0.23559931), ('n02105641', 'Old_English_sheepdog', 0.09268171)]

[('n02085782', 'Japanese_spaniel', 0.54784787), ('n02086079', 'Pekinese', 0.38067418), ('n02112018', 'Pomeranian', 0.047537852)]

[('n02089078', 'black-and-tan_coonhound', 0.9804248), ('n02088632', 'bluetick', 0.007853577), ('n02088238', 'basset', 0.0062168045)]