track 전체를 실전에 투입
이 capstone 은 같은 feature space 에 안 사는 두 modality 를 융합해 — pixel 이랑 structured field. 상품 listing 을 떠올려: 사진 + 가격·카테고리·판매자 평점, 정확한 예측에 *둘 다* 필요한 경우. 이걸 한 tensor 로 그냥 쌓을 순 없어 — image 는 convolutional stack 을 원하고, 10 차원 metadata 벡터는 Dense layer 를 원해. Functional API 가 각 modality 에 제 처리 경로를 주면서도 하나의 학습 가능한 model 로 묶어주는 거야.
갈래 → 융합 → 예측
코드 블록이 표준 레시피고, 이 track 의 모든 패턴이 합쳐진 거야: 이름 붙은 입력 둘 (lesson 03), Conv → pool → GlobalAveragePooling2D 로 평평한 64 차원 feature 벡터까지 내리는 image branch, Dense layer 의 metadata branch, 그다음 layers.concatenate 로 융합 하고 공유 head 가 예측. 숨은 주역은 GlobalAveragePooling2D — 공간 차원을 고정 길이 벡터로 접어서 입력 이미지 크기와 무관하게 두 branch 가 concat 호환이 되게 만들어.
multi-modal 설계를 지배하는 결정 하나: *어디서* 융합하나. 이 model 은 *late fusion* — 각 modality 를 독립 처리하다 head 근처에서야 만나. 이게 옳은 default: 단순하고, branch 마다 따로 튜닝 가능하고, metadata 경로 안 건드리고 pretrained image backbone 으로 갈아끼울 수 있어. *early fusion* (deep layer 전에 modality 섞기) 은 표현력이 더 클 수 있지만 학습·디버깅이 더 어려워. late 로 시작하고, modality 가 더 깊이 상호작용해야 한다는 증거 있을 때만 early 로 옮겨.