전이학습 실습해 보기¶

학습 내용¶

  • 환경 설정 및 라이브러리 로드
  • 데이터 준비
  • 모델 구성 및 전이 학습 적용
  • 이미지 객체 인식

전이학습에 대한 이해 및 ResNet 이해해 보기¶

객체 인식¶

  • 전이학습
  • "전이학습"은 한 작업에서 학습한 모델을 다른 관련 작업에 맞게 조정하는 기계 학습 기법입니다.
  • 처음부터 모델을 학습하는 대신, 일반적으로 대규모 데이터셋에서 학습된 사전 학습된 모델을 시작점으로 사용

ResNet 예제¶

  • ResNet50은 딥러닝 분야에서 널리 사용되는 심층 신경망(Deep Neural Network) 아키텍처 중 하나
  • ResNet(Residual Network)은 2015년 마이크로소프트 리서치 팀이 개발한 모델
  • 딥러닝에서 흔히 발생하는 기울기 소실 문제(Vanishing Gradient Problem)를 해결하기 위해 도입

특징¶

  • 깊은 네트워크: ResNet50은 "50"이라는 숫자가 나타내듯이, 총 50개의 층(layer)으로 구성되어 있습니다. 이러한 깊은 구조는 이미지의 매우 복잡한 패턴을 학습하는 데 적합. (예: ResNet101, ResNet152 등)
  • 높은 성능: ResNet은 ImageNet 데이터셋에서 매우 높은 성능을 기록하며 이미지 분류, 객체 탐지, 이미지 세분화 등 다양한 컴퓨터 비전 작업에서 널리 사용
In [2]:
# 필요한 라이브러리를 가져옵니다.
import tensorflow as tf
from tensorflow import keras
from tensorflow.keras.preprocessing import image
import numpy as np
from tensorflow.keras.applications.resnet50 import preprocess_input, decode_predictions
from keras.applications.imagenet_utils import preprocess_input
In [4]:
# 이미지를 로드하고 전처리하는 함수
def preprocess_image(image_path):
    img = image.load_img(image_path, target_size=(224, 224))
    img = image.img_to_array(img)     # 이미지를 배열로 변환
    img = np.expand_dims(img, axis=0) # 모델이 기대하는 형태로 만든다.(1,224, 224,3)
    img = preprocess_input(img)       # 이미지 데이터를 모델에 적합한 형태로 전처리
    return img
In [5]:
# 이미지 객체 인식을 수행하는 함수
def predict_objects(image_path):
    # 사전에 훈련된 ResNet50 모델을 불러옵니다.
    model = keras.applications.resnet50.ResNet50(weights='imagenet')

    # 이미지를 전처리합니다.
    img = preprocess_image(image_path)

    # 이미지를 모델에 입력하여 예측을 수행합니다.
    preds = model.predict(img)

    # 예측 결과를 해석합니다.
    decoded_preds = decode_predictions(preds, top=3)[0]

    # 예측 결과를 출력합니다.
    for _, label, confidence in decoded_preds:
        print(f"{label}: {confidence * 100}%")
In [6]:
from IPython.display import Image

파일 테스트¶

In [7]:
# 이미지 파일 경로를 지정합니다.
image_path = 'Dog_rawPixel01.jpg'

# 이미지 표시
Image(image_path)
Out[7]:
No description has been provided for this image
In [8]:
# 이미지 객체 인식을 수행합니다.
predict_objects(image_path)
Downloading data from https://storage.googleapis.com/tensorflow/keras-applications/resnet/resnet50_weights_tf_dim_ordering_tf_kernels.h5
102967424/102967424 ━━━━━━━━━━━━━━━━━━━━ 1s 0us/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 2s 2s/step
Downloading data from https://storage.googleapis.com/download.tensorflow.org/data/imagenet_class_index.json
35363/35363 ━━━━━━━━━━━━━━━━━━━━ 0s 0us/step
standard_poodle: 93.5053288936615%
miniature_poodle: 4.46309819817543%
golden_retriever: 0.6950932554900646%

결과¶

  • 스탠다드 푸들: 93.5053288936615%
  • 미니어처 푸들: 4.46309819817543%
  • 골든 리트리버: 0.6950932554900646%
In [9]:
# 이미지 파일 경로를 지정합니다.
image_path = 'life_unsplash.jpeg'

# 이미지 표시
Image(image_path)
Out[9]:
No description has been provided for this image
In [10]:
# 이미지 객체 인식을 수행합니다.
predict_objects(image_path)
1/1 ━━━━━━━━━━━━━━━━━━━━ 2s 2s/step
mosquito_net: 32.021260261535645%
crib: 20.114001631736755%
quilt: 18.42556595802307%
  • 결과
  • 모기장: 32.021260261535645%
  • 아기 침대: 20.114001631736755%
  • 이불: 18.42556595802307%
In [11]:
# 이미지 파일 경로를 지정합니다.
image_path = 'Deer_un.jpeg'

# 이미지 표시
Image(image_path)
Out[11]:
No description has been provided for this image
In [ ]:
# 이미지 객체 인식을 수행합니다.
predict_objects(image_path)
1/1 [==============================] - 1s 1s/step
ibex: 57.7500581741333%
impala: 12.893131375312805%
gazelle: 10.757070779800415%
이벡스(Ibex): 이벡스는 산악 지형에 서식하는 동물로, 주로 유럽, 아시아, 아프리카 지역에서 발견됩니다. 큰 뿔과 특이한 외모를 가지고 있으며, 주로 암벽이나 절벽에서 생활합니다.

임팔라(Impala): 임팔라는 아프리카 대륙에서 서식하는 큰 영양 동물로, 주로 사바나와 숲 지역에서 발견됩니다. 얇은 몸과 날씬한 다리를 가지고 있으며, 높은 점프력과 빠른 속도로 알려져 있습니다.

가젤(Gazelle): 가젤은 아프리카와 아시아 지역에서 발견되는 작은 동물로, 주로 사막과 초원에서 서식합니다. 가늘고 우아한 몸과 긴 다리를 가지고 있으며, 빠른 속도와 재빠른 움직임으로 유명합니다.

추가적인 학습해 보기¶

  • 다양한 사전 학습 모델 비교: VGG, ResNet, Inception, EfficientNet 등 다양한 사전 학습 모델을 사용하여 성능 차이를 비교
  • 고정 특징 추출 vs. 미세 조정(Fine-Tuning): 전이 학습을 할 때 사전 학습된 모델의 일부 층을 고정한 채로 사용하는 것과 전체 모델을 미세 조정하는 것의 성능 차이를 분석
  • 데이터 증강(Data Augmentation): 이미지의 회전, 이동, 확대/축소, 색상 변화 등 다양한 증강 기법을 사용하여 모델의 일반화 성능을 향상
  • 강화 학습(Reinforcement Learning)과의 통합: 이미지 인식 기술을 강화 학습 알고리즘과 결합하여, 예를 들어 자율주행차의 시각 시스템에서 물체 인식을 강화할 수 있는 방법을 탐구
  • 모델 설명력 향상: 이미지 인식 모델이 특정 예측을 내린 이유를 시각화하거나 설명하는 기술(예: Grad-CAM, LIME)을 탐구
  • 모델 압축 및 경량화: MobileNet, SqueezeNet 등과 같은 경량 모델을 탐구하고, 프루닝(pruning), 양자화(quantization), 지식 증류(Knowledge Distillation) 등의 기법을 통해 모델을 최적화하는 방법을 연구
  • 실시간 이미지 인식: 실시간 응용을 위한 모델의 속도와 정확도 균형을 맞추기 위해 다양한 최적화 기법을 실험
  • 다중 모달 데이터 통합: 텍스트, 오디오, 비디오 데이터와 함께 이미지 데이터를 사용하여 보다 풍부한 정보 표현을 위해 다중 모달 학습 기법을 연구
In [ ]: