Multi-modal Learning 이란 한 가지 type의 data가 아니라 여러가지 type의 data 를 함께 사용하는 방법이다.
Data 표현 상태가 제각각이다.
정보의 양과 feature space가 unbalance.
아래 예시를 보면 1개의 text가 있지만, 이에 대응되는 Image는 N개가 존재.
Matching: 서로 다른 modality를 공통된 space로 보내서 match
Translating: 하나의 modality를 다른 modality로 translate
Referencing: 하나의 modality로 output을 내는데, 그때 다른 modality를 참조
Characters are hard to use in machine learning -> word 레벨로 기본 unit을 설정
Word는 embedding vector로 표현
위 그림을 보면 word를 embedding하여 low dimension(2D)에 projection을 한 것을 볼 수 있다.
이때 연관이 있는 단어 cat & kitten은 가깝에 매칭이 된다.
놀라운 것은 단어끼리의 상관관계가 같으면 embedding vector에서도 같게 나타난다.
man 과 woman의 차이 벡터 만큼 king에 더해주면 queen을 가리키는 것을 확인할 수 있다. 이는 generalization(일반화) 가 가능하다는 것을 의미한다.
: word embedding vector
: Input. 그림을 보면 노드처럼 생긴게 하나의 word인데 이를 one-hot 벡터로 나타냄
$ h_i$ : word embedding vector가 추출된 hidden layer
Output layer : 와 을 곱해서 나온 결과로 전후에 어떤 단어가 나오는지 패턴을 학습
Matching을 하기 위한 embedding vector를 학습하는 방법
아래 예시처럼 Tag를 Image로 만들거나, Image로부터 Tag를 생성
Text Data를 Word2vec을 이용하여 하나의 d-dimensional feature vector 형태로 표현.
Image Data 역시 d-dimensional feature vector 형태로 표현
Joint embedding : 두 vector가 연관성이 높으면 작은 distance를 가진다던지, 호환성이 있도록 학습.
Metric learning in visual-semantic space
Text, image를 같은 embedding space에 mapping
embedding간의 distance를 줄이는 방향으로 학습 (push)
만약 matching되지 않는 경우엔 distance를 키움 (pull)
Distance를 기반으로 학습하기 때문에 metric learning 이다
위 그림을 보면, 풀밭에 있는 개 사진에서 dog embedding을 빼고 cat embedding을 더했더니 풀밭에 있는 고양이 사진이 나옴
--> Dog을 제외한 나머지 embedding vector는 유지됐기 때문!
Food image에서 recipe를 추출하거나, recipe에서 food image를 얻어낼 수도 있다
Recipe에는 ingredient, instruction의 순서가 정해져있기 때문에 RNN 계열의 model로 ingredient, instruction를 fixed vector로 만듬
Joint embedding의 loss는 cosine similarity loss를 사용해 food image와 recipe가 연관이 있다면 cosine similarity를 높게 만든다
2번째 loss로 semantic regularization loss를 사용해 cosine similarity loss로 해결되지 않는 부분의 guide를 줘서 high-level semantics를 해결
Multi-modal을 translation으로 활용하는 방법
Encoder
Image는 pre-trained ImageNet을 사용해 fixed dimensional vector로 변환
Fixed dimensional vector를 condition으로 제공, token을 input으로 넣어 LSTM은 단어를 출력함
Show, attend and tell
CNN의 출력을 fixed dimensional vector가 아니라 14x14의 공간정보를 가지고 있는 feature map으로 출력
RNN은 word를 생성할 때마다 feature map을 reference해서 어떤 부분이 활성화돼있을때 어떤 word를 출력해야되는지 예측
Attention: 특징적인 부분부터 훑어봄
Spatial한 feature map이 들어오면 RNN의 condition으로 사용해 어디를 참조해야 하는지 heatmap으로 만들고, 이를 feature map과 결합하여 z라는 결과를 출력. 이때 weighted sum을 사용.
Input image를 CNN을 거쳐 feature map으로 만듬
Feature map을 LSTM의 condition으로 넣음
어떤 부분을 reference할지 결정하는 spatial attention s1 을 만듬
s1을 weight로 사용해, feature map과 inner product해서 pixel dimensional vector z1 을 만듬
s2 를 다시 feature map와 inner product해서 z2 라는 condition 생성
y2 는 이전에 출력했던 단어인 'A'를 사용해 RNN에 넣어줌
다음 단계의 expected distribution인 s3 와 output word d2 를 생성
Text-to-image by generative model
text -> image는 1:N mapping이기 때문에 generative model이 필요!!
Generator
Text 전체를 fixed dimensional vector로 만들고, gaussian random code를 붙여서 같은 input에 대해 항상 똑같은 output이 나오는 것을 방지
이후 decoder를 거쳐 image를 generate
Disriminator
Input image를 encoder에서 low dimensional spatial feature로 만들고, generator에서 썼던 sentence 정보를 붙임
Sentence condition 하에, input image가 True/False인지를 판별하도록 discriminator를 학습시킴
Cross modal 중 referencing을 이용하는 task
영상과 질문이 주어지면 답을 도출
질문 : text 형태로 RNN을 거침
영상 : pre-trained NN을 거침
2개의 embedding vector가 interact할 수 있도록 해줌
Sound data는 1-D signal로 존재 --> Spectogram, MFCC 등의 형태로 변환해서 사용
waveform 전체에 대해 FT(fourier transform)을 적용하면 시간축 t 에 대한 waveform을 주파수축 f 로 옮길 수 있음
Window는 discrete하게 일정 간격을 띄어서, 적당히 overlap시켜서 결정
Fourier transform으로 time 축의 input signal의 삼각함수를 분해해서 각 삼각함수가 어느정도 성분으로 들어있는지 비교해서 frequency 축에 출력
--> Power spectrum에서 각 frequency가 어느정도 들어있는지 확인 가능
Spectogram: 각 spectrum을 세로로(시간축을 따라) stack --> 시간에 따라 주파수 성분이 어떻게 변해가는지 눈으로 확인 가능
i.e. 색이 연할수록 해당 주파수 성분이 적고, 진할수록 많은 등
Keyword: Melspectogram, MFCC
위에서 알아본 Matching 형태
Sound tagging: 소리로 해당 장면을 인식
SoundNet
Video dataset의 image 는 pre-trained visual recognition network를 사용, object와 scene을 판별
Video dataset의 audio 는 1-D CNN에 입력, 2개의 head에서 object, scene을 판별 후 KL-div로 image 부분의 출력과의 오차를 줄임
Image network는 fixed, audio network는 학습하기 때문에 teacher-student 방식
--> Visual knowledge를 sound에게 transfer
Raw waveform을 사용한 것이 특징(아직 MFCC 등이 발달하기 이전)
Pool5가 학습된 대표적 feature라고 생각했기 때문에 target task에서는 pool5에 classifier를 추가해서 target task를 수행
Speech2Face : 음성에서 그 사람의 얼굴을 유추
이를 위해 module network를 적극 활용
VGG-Face Model: 얼굴 image가 들어오면 fixed dimensional vector로 표현
Face Decoder: face feature가 들어오면 정규화된 무표정의 정면 얼굴을 reconstruct
Video의 image에서는 face recognition network의 input으로 넣어 face feature를 추출
Video의 audio는 spectogram으로 만든 후 Speech2Face model을 통과시켜 feature vector를 추출 후 face feature를 따라하도록 teacher-student식 학습(joint embedding learning을 응용)
Annotation이 필요없는 self-supervised learning
Image-to-speech synthesis : Image를 넣으면 speech가 출력
Image는 CNN으로 14x14 feature map을 추출
이후 Image-to-Unit model로 sub-word unit을 추출(완전한 word가 아니라 token 형식에 더 가까움)
Unit-to-Speech model(TTS, text to speech)에서 sub-word unit을 speech로 출력
Speech-to-Unit에서 나온 unit을 model 중간의 learned unit에 넣어줌
Image-to-Unit, Unit-to-Speech model은 각각 image-unit, unit-speech를 기반으로 학습.
Sound source localization : Sound가 image의 어떤 곳에서 발생하는건지 알려주는 task
Image, audio 모두 CNN으로 feature map 출력
Image feature와 sound feature의 내적으로 localization score
학습은 어떻게..?
Video는 pair로 annotate 됐다 할 수 있다.
그래서 Image feature map과 localization score를 weighted sum pooling 해서 image에 weight를 준다.
이후 sound feature와 attended visual feature를 metric learn해서 같은 video에서 나왔으면 같게, 다른 video에서 나왔으면 다르게 만듬
Attended visual feature는 localization score에서 가장 weight가 높은 부분을 닮고있다. 이를 sound feature와 train해서 한 video에서 나왔다고 model에게 알려줌
Looking to listen at the cocktail party
칵테일 파티 효과(cocktail party effect) : 파티의 참석자들이 시끄러운 주변 소음이 있는 방에 있음에도 불구하고 대화자와의 이야기를 선택적으로 집중하여 잘 받아들이는 현상에서 유래한 말
위 그림처럼 크게 visual stream, audio stream, fusion, output seperation의 4가지 부분으로 나뉨.
각각의 얼굴을 face embedding을 해서 feature vector로 출력
Spectogram으로 speech에 대한 정보를 추출
Face feature, speech feature를 concat 후 complex mask 형태로 출력
Complex mask는 각각 spectogram을 어떻게 분리할지 결정하기 때문에, complex mask와 spectogram을 곱해서 seperated speech spectogram을 출력 후 다시 waveform으로 복원
Metric은 L2 loss를 사용
(1) Multi-modal learning에서 feature 사이의 semantic을 유지하기 위해 어떤 학습 방법을 사용했나요?
(2) Captioning task를 풀 때, attention이 어떻게 사용될 수 있었나요?
(3) Sound source localization task를 풀 때, audio 정보는 어떻게 활용되었나요?