Computer >> 컴퓨터 >  >> 프로그래밍 >> Python

Python과 TensorFlow로 사전 훈련된 모델을 활용해 이미지 특징(Feature)을 추출하는 방법

TensorFlow는 사전 훈련된(pre-trained) 모델을 활용하여 이미지의 특징(feature)을 손쉽게 추출할 수 있습니다. 이 과정에서는 미리 정의된 특징 추출기(feature extractor) 모델을 hub.KerasLayer 메서드에 연결하여 사용합니다.

전이 학습(Transfer Learning)의 기본 개념

합성곱 신경망(Convolutional Neural Network, CNN)은 최소 하나 이상의 합성곱 계층(convolutional layer)을 포함하는 신경망으로, 이를 활용해 학습 모델을 구축할 수 있습니다.

이미지 분류에서 전이 학습의 핵심 아이디어는 다음과 같습니다. 어떤 모델이 대규모의 일반적인 데이터셋으로 훈련되었다면, 해당 모델은 시각적 세계를 위한 범용(generic) 모델로 효과적으로 재사용될 수 있습니다. 즉, 모델이 이미 특징 맵(feature map)을 학습한 상태이기 때문에, 사용자가 처음부터 대규모 데이터셋으로 거대한 모델을 새로 훈련시킬 필요가 없습니다.

TensorFlow Hub란?

TensorFlow Hub는 사전 훈련된 TensorFlow 모델들이 모여 있는 저장소(repository)입니다. 이곳에서 제공하는 모델을 불러와 학습 모델을 세밀하게 조정(fine-tuning)할 수 있습니다.

이 글에서는 TensorFlow Hub의 모델을 tf.keras와 함께 사용하는 방법과 이미지 분류 모델을 활용하는 방법을 살펴봅니다. 사전 훈련된 분류기 모델에 이미지를 입력하면 별도의 훈련 없이도 해당 이미지가 무엇인지 예측할 수 있으며, 전이 학습을 통해 커스텀 이미지 클래스에 맞게 모델을 미세 조정할 수도 있습니다.

아래 코드는 Google Colaboratory(Colab) 환경에서 실행됩니다. Colab은 브라우저에서 바로 Python 코드를 실행할 수 있게 해주며, 별도의 설정 없이 GPU(그래픽 처리 장치)를 무료로 사용할 수 있습니다. Colaboratory는 Jupyter Notebook을 기반으로 만들어졌습니다.

예제 코드

print("특징 추출 시작")
feature_extractor_model = "https://tfhub.dev/google/tf2-preview/mobilenet_v2/feature_vector/4"
feature_extractor_layer = hub.KerasLayer(
    feature_extractor_model, input_shape=(224, 224, 3), trainable=False)
feature_batch = feature_extractor_layer(image_batch)
print(feature_batch.shape)

코드 출처 − https://www.tensorflow.org/tutorials/images/transfer_learning_with_hub

실행 결과

특징 추출 시작
(32, 1280)

코드 설명

  • TensorFlow Hub에서 제공하는 사전 훈련된 MobileNet V2 모델을 특징 추출기로 지정합니다.
  • hub.KerasLayer를 통해 특징 추출 레이어를 생성하고, trainable=False로 설정하여 레이어의 가중치가 훈련 중에 업데이트되지 않도록 고정합니다.
  • 입력 이미지 배치(image_batch)는 32장의 224×224×3 크기를 가진 이미지로 구성되어 있습니다.
  • 추출된 특징의 차원은 (32, 1280)으로 출력되며, 이는 각 이미지가 1280차원의 특징 벡터로 변환되었음을 의미합니다.