Boostcamp AI Tech

[Boostcamp Day-33] Computer Vision - Multi-modal learning

ju_young 2021. 9. 17. 19:37
728x90

Multi-modal learning

multi-modal learning을 한다고 했을 때 첫 번째로 어려운 점은 데이터가 다양해서 표현도 다양하기 때문에 이러한 부분이 학습을 어렵게 한다.


두 번째는 서로 다른 modality에서 오는 정보의 양이 Unbalance하고 feature space에 대한 특징들도 Unbalance하다.


세 번째는 여러 modality를 사용할 경우 방해가 될 수 있다. 이것은 모델을 학습하는 방법에 한계가 있기 때문이다. neural network의 경우에는 multiple modality에 대해서 여러가지 정보를 받아서 더 좋은 결론을 내기 위한 구조를 쉽게 만들 수 있다. 그런데 train이 잘 안되서 결과적으로 편의주의적인 성향을 갖게된다. 그래서 쉬운 data, obvious 한 data에 bias가 되고 조금 까다로운 data는 안써버리게 된다. 그렇기 때문에 하나의 modality에 bais되는 현상이 쉽게 발생하게 된다. 예를 들어 visual data와 audio data를 같이 섞어서 썼는데 audio에서는 중요한 action recognition이라면 어떤 행위를 취했는지 그 행위에 따른 행동에 대한 비디오가 있을 수 있고 소리도 동반될 것이다. 하지만 대부분 visual하게 본다면 판단이 된다. 즉, 눈으로 보면 무엇을 하고 있는지 대부분 안다는 것이다.

따라서 대부분의 경우에는 visual data로 해결이 되기 때문에 bias가 된다는 것이다.


위와 같은 어려움이 있지만 여러 감각 기관에서 오는 센서들을 사용해서 multi-modal learning을 하는 것은 굉장히 중요한 문제이고 이를 통해 기존에 못하던 것을 해결할 수 있는 단서를 제공할 수 있다.

multi-modal learning을 이용한 여러 task에 일정 pattern이 있을 것이다. 예를 들어 하나의 data type에서부터 또 다른 data type이 있을 때 이 두개의 type을 공통된 space로 보내서 서로 maching할 수 있게 사용하는 방법, 하나의 modality를 다른 modality를 translation해주는 방법, 하나의 modality를 또 다른 modalitty로 출력하려고 할 때 다른 modality를 참조하는 방법을 사용할 수 있다.


Visual data & Text

  • Text embedding

문자는 machine learning하기 어렵기 때문에 embedding vector로 표현하여 사용한다. embedding vector는 놀랍게도 다음과 같은 특징을 갖는다. 하나는 2d로 projection을 했다면 거리를 통해 서로의 연관성을 파악할 수 있고 다른 하나는 man과 woman이 있다면 이 둘 사이의 차이 벡터를 얻을 수 있을 것이고 이 차이 벡터를 king이라는 것에 더하면 queen이라는 값을 얻을 수 있다. 다시 말해 두 단어 사이의 관계가 어디에서 시작되는가와 상과없이 연결되는 것이다. 그래서 일반화가 가능한 power가 있다.


  • word2vec - Skip-gram model

W에서 각 row가 word embedding vector이다. 이 W와 W`을 학습하는 model이다.


이 Skip-gram model은 주변 N개의 word를 예측하는 task를 학습한다. 이 의도는 하나의 word에 대해서 주변 word와의 관계성을 학습하기위해 유도하는 것이다.


  • Image tagging

주어진 이미지에 대해서 tagging을 생성할 수 있고 tag를 이용해서 image를 찾을 수도 있다.


pre-trained unimodal models들을 합쳐주는 것이고 각 모델에나온 fix된 dimension을 가진 vector를 서로 호환되게 joint embedding 학습을 해준다. 만약 text와 image가 서로 연관성이 있다면 vector간의 distance가 작다던지 연관성이 없다면 distance가 크다던지 하는 특징을 갖는다.


다음과 같이 text와 image가 embedding space에서 distance가 작게 나오게 학습이 진행된다. 이러한 것을 Metric learning이라고 한다.


image tagging에서의 또 다른 놀라운 특성은 다음과 같이 visual과 text data의 연관성을 이용할 수 있다는 것이다. 아래 그림에서 dog 이미지에 dog text를 빼고 cat text를 더해주면 cat image가 나오는 것처럼 말이다.


또 다른 적용 사례로 다음과 같이 완성된 food image가 있을 때 해당하는 recipe를 찾아주거나 반대로도 해줄 수 있다.


이를 구현하기 위해서는 순서가 있는 문장(sentence)이 있어야해서 RNN계열의 model에 넣어 하나의 vector로 만들어주고 fc layer를 통해 embedding vector를 만들어준다. 그리고 image는 CNN model을 통해 하나의 vector를 만들어주고 text의 embedding vector와 동일한 dimension의 vector를 만든다. 그 다음 이 두 개를 cosine similarity loss를 사용하여 image와 recipe가 서로 연관성이 있다면 높게 연관성이 없다면 낮게 학습한다. 두 번째 loss로는 high-level semantic(semantic regularization loss)를 사용하여 cosine similarity loss로 해결이 안되는 부분을 가이드해주는 regularization으로 사용될 수 있다.


  • Image captioning

image가 주어지면 image를 잘 설명하는 text description을 생성하는 방법이다.


image에서 sentence를 변환하는 문제라고 생각할 수 있고 image에는 CNN을 sentence에는 RNN을 사용하는 것이 적합할 것이다.


CNN과 RNN을 합치는 방식을 show and tell이라고 부른다.

  1. Encoder : imagenet에서 pre-train된 CNN model을 사용
  2. Decoder : LSTM module에 시작 token을 넣어 마지막 token이 나오는 architecture를 가짐

show and tell은 하나의 fix된 dimension vector에서 image caption 전체를 한 번에 prediction한다. 하지만 sentence에서 각 단어마다 어떤 부분을 더 중요하게 보는가를 고려해야한다. 이런 방법은 show, attend and tell이라 부른다.


show, attend and tell에서는 input image를 넣어주고 CNN을 통해 14x14의 공간 정보를 유지하고 있는 feature map을 추출하고 RNN에 넣어준다. RNN은 반복해서 하나의 word를 생성할 때마다 14x14의 feature map을 reference하여 예측을한다.


RNN에서 매 단어를 생성할때마다 어디를 reference해야하는지 attention을 해야한다. 만약 다음과 같이 사람의 얼굴을 본다고 할때 사람은 특징적인 부분부터 훑어가는데 이러한 것을 attention의 기본이라 한다.


attention machanism은 feature가 들어오면 RNN을 통과시켜 어디를 reference해야하는지 heatmap으로 만들어주고 이 heatmap과 feature map을 잘 합쳐서 z라는 vector를 만들어준다. 이런 방법을 Soft attention embedding이라 부른다.


이런 attention machanism이 inference를 할 때 이미지가 주어지면 공간 정보가 있는 feature를 뽑고 LSTM에 condition으로 넣어준다. 그 다음 어떤 부분을 attention 할지 spatial attention을 weight로 출력한다. 이 weight와 feature를 inner product하여 하나의 vector로 만들게 된다. 그리고 이 vector를 RNN에 condition으로 넣어주고 start word token을 넣어준다. 아래 그림에서의 z1, y1을 h1에 넣어주는 것인데 이 h1이 y1 다음에 나올 word를 예측하여 출력해주고 그 다음 word를 reference하여 예측하기 위해 s2라는 것을 feature에 넣어서 z2를 만든다. 이런 식으로 반복하여 sentence가 생성된다.


  • Text-to-image by generative model

반대로 sentence가 주어졌을 때 image를 생성한다고 하면 하나의 image가 나오는 것이 아닌 여러 이미지가 나온다. 즉, 1 to N 으로 나온다. 그렇기 때문에 generative model이 꼭 필요하다고 한다.


Generator Network : 먼저 text 전체를 고정된 차원의 벡터를 만들어주고 gaussian random code를 같이 붙여준다. 이 gaussian random code의 역할은 결과가 항상 똑같은 input이 들어갔을 때 항상 똑같은 output이 나오는 것을 방지해준다.

Discriminator Network : 생성된 이미지가 들어가면 encoder를 통해 spatial feature가 뽑히고 이전 sentence 정보를 합쳐서 가짜인지 진짜인지 판단할 수 있게 학습된다.

  • Visual question answering - Multiple streams

image stream과 question stream이 존재하는데 question은 text의 sequence를 RNN으로 encoding하고 고정된 차원 벡터를 출력하게된다. image는 pre-train된 neural network를 사용하여 고정된 차원 벡터를 출력한다. 이 두개의 벡터를 point-wise multiplication을 해서 서로 interaction할 수 있도록 한다. 이러한 방식으로 end-to-end training을 수행한다.


Visual data & Audio

  • Sound representation

기본적으로 처음에는 Waveform과 같은 형태로 되어있지만 neural network나 machine learning에서는 Spectrogram이나 MFCC와 같은 Acoustic feature를 사용한다.


  • Fourier transform

가장 많이 사용되는 Spectrogram 표현으로 변환하는 방법으로 signal processing에서 대표적이다. 또한 Short-time Fourier transform (STFT)이라는 방법으로 사용되는데 시간축 t에 대해서있는 waveform 전체에 대해서 Fourier transform을 적용하면 주파수 축으로 옮겨간다. 이러면 시간에 따른 변화를 알 수 없게 된다. 그렇기 때문에 Short-time Fourier transform (STFT)를 사용하는 것이다.

Fourier transform를 적용할 때 다음과 같이 A 부분을 Hamming window를 적용하면 가운데만 강조하는 B 부분을 유도해준다.


Spectrogram으로 다 바꾼 것을 stacking을 할 것이다. 그 이전에 Fourier transform을 왜 하는지 살펴보면 time 축에 input signal이 주어지면 Fourier transform을 통한 삼각함수가 어느 정도의 성분으로 들어있는지 분해하는 tool이라고 볼 수 있다.


Spectrogram 하나하나를 세로로 stacking한다. 그러면 시간에 따라서 주파수가 어떻게 변하는지 눈으로 볼 수 있게 된다.


  • SoundNet

오디오의 표현을 어떻게 학습할 것인가에대한 방법론이다. 라벨링되지않은 비디오만 주어진 데이터셋만 가지고 pre-train된 visual recognition networks를 사용한다. 하나는 object가 어떤 것이 들어있는지에 대한 distribution을 출력하고 두 번째는 현재 비디오가 어떤 장면에서 촬영되고 있는지 distribution을 출력해준다. 비디오는 대부분 오디오와 동반하고 있기 때문에 Raw Waveform 형태로 추출하여 1D CNN 구조에 넣어준다. 그리고 마지막에 두 개의 head로 나눈다. 이 두 개의 head는 각각 object distribution과 scene distribution을 따라하도록 KL divergence를 사용하여 학습을 진행한다. 이러한 학습 방법을 teacher-student라고 불린다.


학습된 soundnet을 원하는 target task가 있다면 응용할 수 있다. 그럴 때 pool5에 있는 feature를 추출하여 사용한다. 이것이 sound를 표현하는 대표적인 feature이다라고 생각하고 이 위에 또 다른 classifier를 올려놔서 우리가 풀고싶은 어떤 특이한 target task를 학습해서 사용한다.

  • Speech2Face

음성에서부터 사람의 얼굴을 상상해내는 network이다.


  • Image-to-speech synthesis

반대로 image를 넣어주면 speech를 출력해주는 형태의 application이다.


구조는 다음과 같이 image가 들어가면 CNN을 통해 14x14 feature map으로 만들어준다. 그리고 show,attend and tell에서 사용했던 것과 같은 구조를 동일하게 활용한다. 하지만 image에서부터 word 단위를 바로 추출하는 것이아닌 sub-word unit이라는 natural language가 아닌 것으로 출력해준다. 이 unit에서부터 음성으로 복원하는 model을 Tacotron 2라는 것으로 사용한다.


그리고 가운데 unit을 양쪽과 호환이 잘 되게 유도를 해야한다. 방법은 다음과 같이 speech2face처럼 speech-to-unit model을 사용하여 unit을 출력해주는 것이다.


  • Sound source localization

소리 input이 주어지고 이미지를 주었을 때 이 소리가 어디에서 나는지 영상에서 찾는 것이다.


비디오 프레임과 그에 해당하는 오디오가 주어지고 localization score가 출력되는 구조이다. 이미지에서는 visual net.을 사용하여 spatial feature map을 출력하고 audio net.에서는 고정된 차원 벡터를 출력한다. 그리고 attention net.에서 feature map과 벡터간의 내적을 통해서 위치간의 관계성을 파악한다. 이를 학습하기 위해 Fully supervised learning, 즉, localization map이 존재하면 loss를 걸어 줄수가 있다.


unsupervised한 학습을 할 수 있는데 visual net.에서 추출한 feature map과 localization score를 weighted sum pooling을 하는 것이다. 그러면 attended visual feature의 결과가 나오게 된다.

728x90