9. Multi-modal Learning

유승우·2022년 5월 13일
3

9. Multi-modal Learning

Multi-modal Learning


  • 사람이 여러 개의 감각기관을 활용하여 문제를 해결하듯이 딥러닝에도 이를 적용해보자.
  • 한 type의 데이터가 아닌 다른 특성을 갖는 데이터 type들을 같이 사용하는 활용하는 학습법 e.g.) Text , audio data

  • 각각의 데이터들은 서로 다른 타입으로 자료구조와 가지고 있는 특성 모두 다르기 때문에, multi-modal learning을 쉽게 하지 못하는 방해요소가 된다.
    • Aduio는 1D vector, Image는 2D vector, Text는 embedding vector

  • 또한, 서로 다른 modality에서 오는 정보의 양과 feature space의 특징들이 unbalance하기 때문에 1:N구조 형태를 띈다.
    • 아보카드 모양의 armchair를 찾아 달라는 텍스트는 여러 이미지와 매칭될 수 있다.

multi-modal의 한계

  • multiple modality를 활용하여 좋은 성능을 내게끔 유도할 수 있지만 모델 학습 방법에 따라 오히려 결과가 안 좋아지기도 한다.
    • 우리 일상의 대부분의 문제는 시각적인 정보만을 가지고도 해결이 되기 때문에 다른 task와 결합하여 사용한다면 오히려 bias가 생길 수 있다.

      e.g. 시각적 정보와 다른 task와 결합했을 때보다 시각적 정보만을 활용했을 때가 더 결과가 좋더라~

  • 하지만, 이러한 어려움이 있음에도 여러 개의 감각 기관에서 오는 데이터를 사용하여 multi-modal learning하는 것은 중요하다.
    • 이전의 못하던 문제들을 해결하거나 해결할 수 있는 중요한 단서를 찾을 수 있다.

  • multi-model learning에는 위와 같이 3 가지의 방법이 있다.

  • Matching

    • 서로 다른 데이터를 공통된 space로 보내어 매칭하는 방법
  • Translating

    • 하나의 modality를 다른 하나의 modality로 translating하는 방법
  • Referencing

    • 하나의 modality로부터 다른 modality를 출력하려 하는데 또 다른 modality를 참조하는 방법

Visual data & Text


  • Text embedding

  • 문자들을 기계학습 하기 위해 컴퓨터가 알아들을 수 있는 단어 밀집 벡터 형태로 표현하는 것

  • 단어들에 대한 임베딩 벡터가 형성이 되었을때, 2 dimension 형태의 space에 projection하여 각 단어 간 거리(유사도)를 측정할 수 있다.
  • 또한, 위의 그림에서 남자와 여자의 거리를 안다면 king에서 그 차이를 빼서 queen을 구할 수 있다.
  • 이 말은 각 단어의 시작과 상관없이 연결이 되는 일반화 능력을 가진다고 할 수 있다.

그렇다면 워드 임베딩을 어떻게 학습시킬까?

  • word2vec ( Skip-gram model )

    1. W에서 하나의 raw는 하나의 워드 임베딩 벡터가 되고, 원 핫 벡터로 이루어져 있다고 생각하면 된다.

    2. input인 벡터가 가중치와 곱해져서 1에 해당하는 특징만 hidden layer로 들어가게 된다.

    3. 이후 hidden layer와 W`를 곱해서 output layer로 주변에 어떤 단어들이 나오는지 패턴을 학습한다.

    • 따라서, word2vec은 한 단어를 기준으로 주변의 단어들을 예측하는 모델이다.
      • 이는 하나의 단어와 주변의 단어 간 관계성을 학습하는 것

1. Joint embedding


  • Matching 방법

  • Application - Image tagging

    • 주어진 이미지의 태그를 생성할 수 있고, 반대로 태그를 이용해 이미지를 찾을 수 있다.
  • Combining pretrained unimodal model

  • pretrained 된 unimodal model을 합쳐서 사용
  1. Text가 주어졌을때 word2vec과 같이 text와 관련된 모델을 사용하여 텍스트를 하나의 feature vector 형태로 표현한다.
  2. image 데이터가 주어졌을때 image와 관련된 모델을 사용하여 하나의 feature vector 형태로 표현한다
  3. 이 때 두 task에서 나오는 벡터의 차원은 같아야 하며, 이 둘을 joint embedding space에서 융합하게 된다.
  • Metric learning in visual-semantic space

  • joint embedding space를 학습하기 위해서 그 둘이 유사하다면 거리를 줄이는 방향으로(push), 유사하지 않다면 거리를 벌리는(pull) 방향으로 학습을 진행한다.

  • 이렇게 학습하게되면 아래의 사진과 같이 재밌는 관계성이 생긴다.

  • 강아지 사진의 임베딩 벡터에서 강아지라는 단어의 임베딩 벡터를 빼고, 고양이라는 단어의 임베딩 벡터를 더하면 고양이와 매칭되는 사진을 출력할 수 있다.

    • 원본 강아지 - 강아지 + 고양이 = 배경 + 고양이
  • 레시피 & 요리

  • Joint embedding을 이용하면 요리 레시피와 음식을 연결해주는 형태로 만들 수 있다.
  • 레시피 텍스트를 넣으면 음식 이미지가 나타나고, 반대로도 가능하다.

  1. 재료가 어떤 순서로 추가가 되느냐에 따라 요리가 달라지기 때문에 이를 rnn 계열의 신경망을 통해 하나의 fixed dimensional vector를 추출한다.
  2. 마찬가지로 레시피에도 순서가 있으므로, fixed dimensional vector를 추출한다.
  3. 이미지는 CNN backbone network를 이용해 하나의 feature vector를 만들어주는데 위의 text dimension과 같게 만들어준다.
  4. 이 두 특징 벡터들을 cosine 유사도 loss를 통해 학습하고, semantic regularization loss를 통해 코사인 유사도로 해결이 되지 않는 부분들을 보완해준다.

2. Cross modal translation


  • Image captioning

  • 하나의 이미지가 들어오면 그 이미지를 잘 설명하는 텍스트 설명을 생성하는 것

  • 따라서, 이미지로부터 텍스트를 생성해야하기 때문에 이미지는 CNN, 텍스트는 RNN을 사용하여 이 둘을 잘 합치는 것이 중요하다.

1. Show and tell

  • CNN과 RNN을 합친 방식

  • encoder

    • 이미지가 input으로 들어오면 이를 fixed dimensional vector로 바꿔주기 위해서 Imagenet에서 pretrained 된 CNN network를 encoder로 사용한다.
    • 이를 다음 RNN의 condition으로 제공한다.
  • decoder

    • 앞서 제공받은 condition과 시작 토큰을 LSTM에 넣어 첫 단어를 생성하고, 이 첫 단어를 다음 step의 input으로 사용하는 것을 반복하여 end 토큰까지 추출한다.
  • show, attend, and tell

  • 이전의 show and tell 은 하나의 fixed dimensional vector에서 이미지 전체를 한번에 예측하게 되는데, 더 알맞은 텍스트를 생성하기 위해서는 각 단어에 맞는 부분을 더 중요하게 볼 필요가 있다.

  • 따라서, show , attend, tell에서는 각 단어에 대한 중요도를 영상 전체에서 하나로 표현하기 보다는 국지적인 부분에 대해 중요도를 측정하여 조금 더 정확한 문장을 출력할 수 있게 설계하였다.

  • architecture

  1. input 이미지를 14 x 14 의 공간적인 정보만을 담고 있는 feature map을 추출한다.
  2. RNN에서는 14 x 14 feature map을 참조하여 각 단어를 생성한다.
  • Soft Attention

  • 사람의 시선을 기록하기 위해 눈, 코, 입 등 사람 얼굴의 특징적인 부분을 추출하는 것과 같다.

  • 전체적인 흐름은 다음과 같다.

    1. input 이미지에서 feature map을 추출
    2. feature map과 RNN을 통해 attention(heatmap) 생성
    3. feature map과 heatmap의 내적을 통해 최종 단어 추출
  • 조금 더 자세히 보자.

  1. 이미지가 주어지고 feature map을 생성한 뒤 LSTM에 condition으로 입력
  2. LSTM에 condition을 넣음으로서 이미지의 어느 부분이 중요한지 spatial weight를 생성(s1)
  3. spatial weight와 feature map 간 내적을 통해 z인 픽셀 dimension 생성(z1)
  4. 생성된 z는 다음 h1의 condition으로 넣고, 동시에 start word token(y1)도 입력
  5. h1에서 받은 word token과 공간 특징들을 가지고 알맞은 첫 단어 생성(d1)
  6. h1에서 다시 어떤 부분을 attention 할지에 대한 spatial weight를 생성(s2)
  7. 이를 다시 3 ~ 4번을 통해 다음 번 단어와 새로운 spatial weigth를 생성
  • 위의 과정을 end word token이 생성될 때까지 반복

2. Text-to-image by generative model

  • 지금껏 이미지가 주어지면 텍스트를 생성하는 것을 해봤지만 이를 반대로도 할 수 있다.

  • 다만, 반대인 경우 1:N구조가 되므로 이 때 generative model을 사용한다.

  • Architecture

  • 텍스트 전체를 어떤 네트워크를 통해 fixed dimensional vector를 만들고, 이 앞에 Gaussian random code를 추가해줌으로써 항상 같은 output이 나오는 것을 방지한다.

  • Generator

    • 이는 conditional Gan과 같은 구조로 condition, sentence의 정보가 같이 generator에 들어가 이미지를 생성한다.
  • Discriminator

    • 생성된 이미지를 받아 encoder를 통해 spatial한 feature를 추출하고, input으로 들어왔던 sentence의 condition을 참조하여 이미지가 real인지 fake인지 판단한다.

3. Cross modal reasoning


1. Visual question answering

  • 다른 modality를 참조하는 reasoning task

  1. Image stream
    • pretrained 된 네트워크를 사용해 fixed dimensional vector 추출
  2. Question stream
    • Text sequence를 RNN으로 encoding하여 fixed dimensional vector를 추출
  3. 이 둘을 point-wise-multiplication하여 두 임베딩 feature를 합친다. (join embedding space)
  4. 이 후 fc layer와 softmax를 통해 output 생성
  5. 이 과정을 end-to-end로 학습한다.

Visual data & Audio


  • sound의 표현 방식은 Waveform과 같이 1d signal로 주어진다.
  • 이를 머신러닝에 이용하기 위해 Acoustic feature로 변환하여 사용한다

Fourier transform(FT)


  • 시간 축의 input signal이 주어지면 FT를 통해 다양한 주기 함수들을 합하고 분해하여 표현하는 것

  • Short-time Fourier transform

  • Waveform에서 spectrogram으로 변환시키기 위해 사용한다.

  • Waveform 전체를 주파수 축으로 변환하게 되면 시간에 따른 변화를 관찰할 수 없다.

  • 따라서, window 구간 내에서만 Fourier transform을 적용하여 spectrogram으로 만들어준다.

  • 또, 여기에서 바로 FT를 적용하는 것이 아닌 Hamming window를 사용하여 boundary에 대한 weight를 약하게 해줌과 동시에 가운데 부분만 강조한다. (elementwise product)

  • spectrogram

  • 한 window에서 FT로 구한 값들을 세로로 stacking하면 시간에 따른 주파수 성분을 확인할 수 있다.
  • 밝은 부분이 주파수 성분이 많은 부분이다.

1. Joint embedding


  • text와 마찬가지로 audio에 대해서도 joint embedding을 할 수 있다.
  • sound tagging

  • sound를 통해 어떤 장소에서 일어나는지 장면을 인식할 수 있다.

SoundNet


  • Image

    • input으로 Video data를 받은 뒤, Video의 RGB frame을 pretrained model에 넣어 Object Distribution을 추출하고, 현재 비디오가 어떤 장면에서 촬영되고 있는지 Scene Distribution을 출력
  • Audio

    • Video는 영상 뿐만 아니라 Audio를 동반하는 경우가 많으므로, 그래서 audio를 raw waveform으로 추출해서 1D CNN에 넣어준다.
    • 맨 마지막에 2개의 head로 분리하여 각각 Scene distribution과 Object distribution을 따라하게끔 KL을 최소화 하는 방향으로 학습한다.
  • 이렇게 학습된 SoundNet을 우리가 원하는 특정 target task에 응용할때는 pool5의 feature를 추출하여 사용한다. → 맨 마지막 layer를 사용하지 않는 이유는 pool5가 조금 더 일반화 성능이 좋을 거라고 예상.

2. Speech2Face


  • Voice를 듣고 그 사람의 얼굴을 생성해 내는 모델

  • 인터뷰 비디오를 보면 사람의 얼굴과 목소리가 나타나있기 때문에 이 둘을 각각 Face recognition model과 Speech2Face model을 통과시켜서 feature vector를 뽑는다.
  • 이후 두 feature vector 가 서로 호환이 되도록 학습하여 speech feature가 face feature를 따라하도록 학습을 진행한다.
  • Face decoder는 이미 face feature에 호환이 되도록 학습이 되어있으므로, 추가적인 학습 없이 바로 넣어준다. → 실제 학습은 Speech2Face model 부분만 학습을 진행한다

3. Image-to-speech synthesis


  • 이미지를 통해 speech를 생성하는 모델

  1. 이미지가 들어오면 CNN을 통해 14 x 14 feature map 생성 후 show, attend, and tell에서 사용했던 구조 그대로 사용
    • 대신, 이미지로부터 바로 word를 추출하는 것이 아닌 sub-word units를 출력한다.
  2. units에서부터 음성을 복원하는 unit-to-speech model을 따로 학습한다.

  1. 이후 speech-to-unit model로 speech로 부터 unit을 추출하고, 이를 speech unit을 각각 image와 unit-to-speech 모델을 학습한다.

4. Sound source localization


  • 영상에서 소리가 나면 어디서 소리가 나는지 위치를 추출하는 것

  1. Audio net에서 fixed dimensional vector를 추출하고, visual net에서는 fixed dimensional vector가 아닌 spatial feature를 추출하여 attention network에 넘겨준다.

  1. sound feature와 visual featrue를 내적함으로써 Localization score를 추출한다.

  1. GT와 localization score의 차이를 여러가지 Loss를 사용하여 를 학습시킨다.

  1. visual net에서 생성된 spatial feature map과 localization score를 weighted sum하고 pooling하여 Attended visual feature를 출력한다.

  1. 마지막으로 생성된 attended visual feature와 sound feature를 metric learn 하여 학습시킨다. (unsupervised loss)
    • 같은 비디오에서 나온 경우는 이 두 feature가 비슷해야 하고, 다른 비디오에서 나왔다면 이 두 feature는 달라야 한다.
    • 이를 통해 특정 sound feature가 발생하는 부분이 주로 특정 부분이더라~ 하는 것을 보고서 이 둘이 비슷해지도록 유도할 수 있게된다.(supervised loss)
    • 이렇게 semi supervised learning을 구현할 수 있다.

  • Architecture

  1. 먼저 n개의 face가 등장한다면 각각의 얼굴을 face embedding하여 feature vector 추출
  2. audio를 spectrogram으로 만들어주고, speech에 대한 정보를 추출
  3. 뽑혀진 n명의 사람의 얼굴 특징과 speech 특징을 concat한다.
  4. 각각의 spectrogram을 어떤식으로 분해해야 하는지 complex masks형태로 각각 출력한다.
  5. 이러한 complex masks를 original spectrogram에서 곱해주어 filtering된 최종 seperated speech spectrogram을 생성하고, 이를 다시 waveform으로 복원한다.
  • 이후 Loss는 L2_loss를 사용하는데, 이를 사용하려면 clean한 spectrogram이 필요하다.
  • 하지만, 한 영상에 여러 사람의 목소리가 이미 합성이 되어있으므로 이를 분리하기는 사실상 불가능하다.
  • 이를 해결하기 위해 두 개의 영상을 이어붙이고, 소리는 더해주어 학습데이터를 생성한다..??

0개의 댓글