본문 바로가기
C.W.K.
Stream
Lesson 07 of 07 · published

실전 — 영상과 메타데이터를 함께 쓰는 모델

~8 min · functional

Level 0Keras 도제
0 XP0/97 lessons0/20 achievements
0/120 XP to next level120 XP to go0% complete

서로 다른 종류의 특징을 한 모델에서 합친다

상품을 예측하는 모델에는 사진뿐 아니라 가격, 카테고리, 판매자 평점이 함께 필요할 수 있어. 픽셀과 구조화된 값은 같은 특징 공간에 있지 않으므로 한 텐서로 단순히 쌓으면 안 돼. 영상은 합성곱 경로가 필요하고 10차원 메타데이터는 Dense 레이어가 알맞아. Functional API는 두 입력을 각자 처리한 뒤 하나의 학습 가능한 모델로 묶어줘.

갈라서 처리하고, 합친 뒤 예측해

코드 블록은 이 트랙의 패턴을 모두 모아. 이름을 붙인 입력 두 개를 만들고, 영상 경로는 Conv → pool → GlobalAveragePooling2D를 거쳐 64차원 특징 벡터를 내. 메타데이터 경로는 Dense 레이어로 처리한 다음 layers.concatenate로 두 벡터를 합쳐 공통 헤드에서 예측해. GlobalAveragePooling2D는 공간 차원을 고정 길이 벡터로 바꾸므로 입력 영상 크기와 무관하게 메타데이터와 연결할 수 있게 해.

멀티모달 모델에서는 어디서 입력을 합칠지가 중요한 선택이야. 이 예제는 각 종류를 독립적으로 처리하다 출력 헤드 근처에서 합치는 후기 융합을 사용해. 구조가 단순하고 경로별로 조정하기 쉬우며 메타데이터 경로를 건드리지 않고 사전 학습 영상 백본을 바꿀 수도 있어 좋은 기본값이야. 깊은 레이어 전에 입력을 섞는 초기 융합은 표현력이 더 클 수 있지만 학습과 디버깅이 어려워. 후기 융합으로 시작하고 두 입력의 깊은 상호작용이 필요하다는 증거가 있을 때만 바꿔.

Code

멀티모달 모델 — CNN 영상 경로와 Dense 메타데이터 경로의 후기 융합·python
# Image branch
image_input = keras.Input(shape=(64, 64, 3), name="image")
x = layers.Conv2D(32, 3, activation="relu")(image_input)
x = layers.MaxPooling2D(2)(x)
x = layers.Conv2D(64, 3, activation="relu")(x)
x = layers.GlobalAveragePooling2D()(x)
image_features = layers.Dense(64, activation="relu")(x)

# Metadata branch
meta_input = keras.Input(shape=(10,), name="metadata")
meta_features = layers.Dense(32, activation="relu")(meta_input)

# Merge and predict
combined = layers.concatenate([image_features, meta_features])
x = layers.Dense(64, activation="relu")(combined)
x = layers.Dropout(0.3)(x)
output = layers.Dense(5, activation="softmax")(x)

model = keras.Model(
    inputs=[image_input, meta_input],
    outputs=output,
)

External links

Exercise

코드 블록의 영상+메타데이터 모델을 만든 뒤 회귀 모델로 바꿔. 마지막 헤드를 활성화 함수 없는 layers.Dense(1)로 교체하고 loss='mse'로 compile해. 영상 경로는 Conv 세 개와 Dense 하나로 구성하고 합성 데이터에서 다섯 에포크 동안 손실이 줄어드는지 확인해.

Progress

Progress is local-only — sign in to sync across devices.
이 페이지에서 버그를 발견하셨거나 피드백이 있으세요?문제 신고

댓글 0

🔔 답글 알림 (로그인 필요)
로그인댓글을 남기려면 로그인해 주세요.

아직 댓글이 없어요. 첫 댓글을 남겨보세요.