visual attention + visual & sound modeling 기본 개념 배우기

1. show attend and tell

 

입력 이미지가 주어졌을때 CNN 모델로 feature를 추출

 

vector로 만드는 것이 아니라, 14*14의 spatial 정보를 가지는 feature map으로 추출

 

그리고 feature map과 LSTM의 interaction으로 서로 feedback을 통해 attention할 위치를 추론함

 

각각 어디를 봐야할지 집중할 위치를 찾아 매 순간마다 단어 단위로 text를 생성

 

 

 

2. visual attention

 

사람이 이미지를 바라볼때, 전반적인 내용을 한번에 뇌에 담지는 못한다

 

사람은 이미지를 볼때 한곳에 시선이 오래보고있지 않고 시선을 빠르게 움직이면서 물체를 스캔하는 형태로 물체 인지를 한다.

 

 

눈을 훑어보고, 코를 보고 입을 보고 전체적인 모습을 보면서 이게 사람이구나 생각을 함

 

이러한 사람의 attention과정을 기계로 구현한 것을 visual attention이라고 한다

 

중요한 부분을 특히 많이 참조하여 이미지의 내용을 판단하는 것

 

 

global vector 대신에 이미지로부터 CNN을 통해 공간 정보를 가지는 feature map을 추출

 

이 feature map은 14*14 = 196개의 2048차원 벡터 $v_{i}$가 모여있는 형태

 

각각 vector들은 attention의 후보이며 이미지로부터 어떤 부분을 참조할지 나타냄

 

이 feature map은 이미지의 공간 위치 정보를 포함하고 있어서,

 

global vector로 하나 뽑는 것에 비해 어떤 위치에 대한 어떤 물체가 있을지 정보가 더 많이 남아있을 것이다

 

각각의 vector $v_{i}$는 각 위치별로 대응되는 형태로 물체에 대한 위치 정보까지 제공하는 feature vector

 

 

이후 attention map을 만든다

 

feature map과 query feature의 operation으로 attention map을 생성

 

query feature = 어떤 context에 대하여 attention을 뽑고 싶은지, ... 

 

operation = inner product일 수도 있고 혹은 더욱 복잡한 operation일 수도 있음

 

 

 

각각 대응되는 위치마다 convolution하듯이.. 순회하면서 operation을 수행하여 attention map을 구한다

 

 

3. attention 기반의 image captioning

 

show, attend and tell에서 제시한 image captioning

 

 

먼저 image로부터 CNN을 통과시켜 공간정보가 남아있는 feature map을 추출

 

feature map으로부터 어느 영역을 참고하여 captioning을 할지 도출

 

 

처음에 initial state로 h0를 feature map으로부터 생성하고

 

여기서 query vector를 형성하여 feature map으로부터 어느 부분을 attention할지 추출하여 caption을 시작할지 결정

 

그러니까 attention의 distribution을 구함

 

흰색 영역은 높은 attention score

 

검은색 영역은 낮은 attention score

 

높은 score를 가지는 feature들은 높은 weight를 가지고 낮은 score를 가진 feature들은 낮은 weight를 가져서...

 

이 attention score와 feature들 간 weighted sum pooling으로 feature vector추출

 

z는 공간적 정보가 없는, attention score에 따른 feature를 추출한 벡터

 

 

이렇게 구한 attention z와 caption을 시작하라는 start word token을 RNN에 넣어서 hidden state1을 생성

 

 

그렇게 나온 hidden state1으로부터 현재 시점의 output을 예측할 수 있음

 

전체 vocabulary에서 softmax를 취해 가장 확률이 높은 단어를 예측하게 된다

 

동시에 query vector가 추출되어 A 다음에 어떤 단어를 추출하면 좋을지 feature map과의  attention을 구하게 된다

 

 

 

다시, 그렇게 구한 attention score와 이전 시점에 예측한 A라는 단어와 이전 시점의 hidden state를 활용해서

 

다음 단어를 예측하고, 또 query vector를 추출하여 다음에 바라볼 attention을 구하는 과정을 반복한다

 

각 단어마다 어디를 attention해서 caption했는지 알 수 있어서 이 모델은 해석 가능한 모델이다.

 

이러한 해석가능성은 또 하나의 강점이다.

 

왜냐하면 잘못된 결론이 나왔을때, 왜 잘못된 결과가 나왔을지 디버깅 할 수 있는 하나의 장치가 되기 때문

 

결과에 대해 받아들일 수 있는 결과인지 근거로 활용할 수 있는 장점

 

 

각 결과가 dog면 dog를 바라보고 출력했고 girl은 girl을 바라보고 출력했고.. people는 people를 보고 출력했고...

 

제대로 바라보고 출력했는지 확인할 수 있다

 

 

4. GPT-3 & DALL-E

 

attention은 visual attention말고도 self-attention이라고 하여 NLP에서 굉장히 성공한 사례가 되었다

 

GPT-3는 어마어마하게 큰 transformer 기반의 모델에 어마어마하게 많은 데이터를 training하여,

 

내가 원하는 task에 대한 약간의 데이터로 fine-tuning을 하기만 하면 굉장히 좋은 성능을 나타내는 모델

 

GPT-3로 쓴 글을 보면 기계가 쓴건지, 사람이 쓴건지 구분하기 어려울 정도

 

영어-프랑스어 사이 번역도 사람이 번역한 수준으로 품질도 굉장히 높았다

 

 

 

문장을 낚시성 제목으로 바꿔달라는 task

 

흥미있고 사람들의 관심을 끌도록 문장을 바꿔줌

 

 

DALL-E는 text를 주면 해당하는 image들을 그려주는 transformer 기반의 모델

 

그림 그려주는 모델의 원조급

 

text가 담고있는 정보를 잘 이해하여 그림을 다양하게 생성했다

 

사람이 만든건지 기계가 만든건지 구별이 안갈만큼 퀄리티가 높다

 

 

5. transformer

 

self-attention layer를 쌓아 만든 모델

 

다양한 NLP task를 하나의 모델로 모두 해결 가능한 general한 모듈을 만든 것이 큰 기여점

 

GPT-3는 transformer 기반의 1750억개의 parameter를 사용한 모델이다

 

한번 training하는데만 해도 몇십억 단위로 전기세가 들어간다고함...

 

 

transformer 같은 경우 한번 training을 잘 해놓으면..

 

linear layer만 잘 fine tuning시켜서 여러 task에 활용가능하다.

 

text를 transformer에 넣어 linear layer에 통과시키면 classification 가능

 

2개의 text를 주어서 transformer에 통과시키고 linear layer에 통과시키면.. 2개의 text사이 유사도 판별도 가능

 

context에 여러개의 답을 붙여 linear layer에 통과시키면 multiple choice 문제도 해결 가능

 

입력과 output을 어떻게 구성시키느냐에 따라, 하나의 pretrained transformer가 다양하게 활용될 수 있다는 가능성을 보였다.

 

 

 

text에 position embedding으로 각 단어의 위치정보도 함께 input으로 준다

 

그리고 self attention 모듈을 통과하여 layer normalization, feed forward network (=multi layer perceptron..) 을 통과

 

이런 block이 12번 반복된다고 함

 

기존의 모델들과 차이점은 attention module

 

 

6. self-attention

 

visual attention은 text나 외부 데이터 같은 곳에서 query data를 추출하여 이것과 visual data와의 연관성을 보기 위해 

 

visual data를 key로 하여 query와 key의 연관성을 보았다.

 

 

 

하지만 self attention은 하나의 input data에서 query, key, value가 모두 나온다

 

그래서 input data내에서 관계성을 확인하고 싶은 것이다

 

그래서 input data로부터 query로 바꿔주는 transform, key로 바꿔주는 transform, value로 바꿔주는 transform을 사용

 

그리고 query와 key 사이 attention weight를 구한다

 

input내에서도 각각 위치마다 서로 다른 feature들이 있는데 이들의 관계성을 확인하고 싶은 것

 

query와 key사이 모든 관계성을 확인하는 $QK^{t}$

 

이들 중 가장 관계성이 높은 weight를 추출하기 위해 softmax를 취한다

 

value와 곱하여 어떤 feature를 추출해서 output으로 넘길지 계산하는 것이 self-attention

 

그렇지만 하나의 attention만 사용하면, 몇몇 feature들 사이의 관계성만 볼 수 있다고 생각하였다

 

 

그래서 다양한 attention head를 사용하는 multi-head attention을 제안

 

다양한 관점에서 바라보는 attention을 사용하여 하나의 input feature내의 다양한 attention을 확인하고자 하였다

 

scaled dot-product attention은 앞에서 계산한 하나의 attention

 

$softmax(\frac{QK^{t}}{\sqrt{d_{k}}})V$를 말한다.

 

여러 관점에서 확인하는 attention을 모두 concat한 다음에 linear layer로 통과

 

multi head attention, skip connection, layer normalization, fully connected layer의 조합으로 하나의 transformer block이 형성

 

이들을 적절히 쌓아 만든 것이 GPT-3

 

 

7. sound representation

 

기존의 전통적인 음향 표현법은 waveform, power spectrum, spectrogram

 

 

waveform이 1d time sequence 표현

 

power specturm은 주파수 도메인에서 각 주파수가 얼마나 들어있는지 전체적인 표현

 

spectrogram은 매 시간마다 짧은 구간내에서 power spectrum의 분포를 2d로 보여준 것

 

여기서 x축은 시간 y축은 주파수

 

시간에 따른 주파수의 변동을 나타낸 것이 spectrogram

 

 

8. fourier transform

 

입력 신호에서 각 주파수의 정현파가 얼마나 포함되어 있는지 분석하는 기법이다

 

 

주어진 sin 함수에서 시간축의 input data를 내적하여 각 주파수가 얼마나 들어있는지 측정

 

그래서 각 주파수별로 얼마나 강도가 있는지 나타낸게 power spectrum

 

하지만 time series의 1d wave form을 주파수 축으로 모두 옮긴다면, 주파수 성분이 얼마나 들어있는지는 알지만

 

시간에 관련된 정보는 없어서.. 해당 주파수가 시간 상에 어디에 등장하는지는 알수가 없다

 

그래서 사용되는 방법이 short-time fourier transform(STFT)

 

 

매우 짧은 구간 내에서 fourier 변환을 하여 단시간 내에서 주파수 특성을 분석하는 방법

 

A: 20~25ms정도 나타내는 구간인데 여기서 fourier transform을 수행

 

그러면 우측의 power spectrum을 얻는데 다음 시점의 spectrum을 얻기 위해 B:10ms만큼 sliding window를 함

 

그리고 다시 A:20~25ms정도의 간격 내에서 fourier transform을 수행

 

B만큼 건너뛰면서 A간격만큼 fourier transform을 반복적으로 수행하는 방법

 

근데 B만큼 건너뛰면 구간구간마다 짤리는 부분이 생긴단 말이지 

 

연속적이지 않고 이산적으로 건너뛰니까..

 

 

 

그래서 짤리는 부분에 의해 결함이 생기는데 이를 줄이는 방법이 hamming window라고 함

 

A window 내에서 가운데 부분만 중요하게 보고 끝 부분들은 음성이 거의 없는 것처럼 취급하여 끝 부분에서 signal이 급격하게 바뀌는 것을 감소시킴

 

그리고 나서 fourier transform으로 power spectrum으로 바꾼다고 함

 

 

9. spectrogram

 

이렇게 짧은 윈도우 내에서 추출된 power spectrum을 시간 축으로 쌓아 만드는 것이 spectrogram

 

 

x축은 시간 축, y축은 주파수 축

 

색깔은 각 시간에서 해당 주파수의 magnitude

 

 

각 한줄 한줄을 따보면 위와 같이 나온다고 함

 

대부분의 음성 인공지능 모델에서 입출력으로 사용되는 표현이 spectrogram이다.

 

이전 1d waveform을 사용하는 것보다 성능이나 메모리 측면에서 장점이 많아 여전히 입출력으로 활용

 

여기서 만들어지는 frequency는 linear frequency라고 한다

 

하지만 사람은 log scale의 frequency에 민감하다고 함

 

사람은 저주파수에 대해 구별하지 못하고 고주파수에 대해서는 민감하게 반응

 

(근데 누구는 저주파수에 구별 잘한다는데.. 누구말이 맞는거여)

 

그래서 frequency를 log scale로 압축한 표현을 melspectrogram이라고 함

 

 

 

 

10. scene recognition by sound

 

image와 sound의 joint embedding을 이용한 application

 

어떤 장소에 대한 video를 촬영하면 그에 대응하는 환경 소음이 따라붙는데 이 소음으로부터 현재 위치, 장소를 판별할 수 있을까?

 

 

sound만으로 현재 장소를 인식한 scene recognition

 

video와 동시에 촬영된 음성간 joint embedding을 사용

 

서로 연관된 이미지와 sound의 embedding vector의 거리는 가까워야하며 전혀 무관한 이미지와 video는 거리가 멀어야한다.

 

11. spectrogram to waveform

 

waveform에서 spectrogram으로 만들었지만, 그 반대도 완벽하게 복원 가능할까?

 

 

 

이거는 매우 어렵다고 함

 

시간축으로는 매우 짧은 일정 단위 구간 내에서, frequency로는 풍부한 표현을 가지고 있어서 

 

neural network에서 출력으로 사용하기에 매우 좋은데

 

출력을 하면 듣고 싶은데 소리를 들을려면 waveform으로 바꿔야함

 

 

12. vocoder

 

어렵긴하지만 waveform으로 근사적으로 변환시키는 것은 가능하긴함

 

TTS = text to speech

 

text를 입력하면 인공지능이 말로 표현

 

이를 위해 반드시 vocoder가 필요

 

왜냐하면 output인 spectrogram이 나오면 재생 가능한 waveform으로 바꿔줘야하니까

 

기존 vocoder는 fourier transform같은 수학적 원리에 기반하여 최대한 선명한 waveform이 나오도록 사람이 손으로 디자인

 

하지만 최근 대세는 neural vocoder

 

이렇게 변환하는 것 마저도 neural network를 사용

 

 

 

spectrogram에서 waveform으로 전환하는 관계식을 학습한 neural vocoder를 많이 사용

 

 

13. WaveNet Vocoder

 

대표적인 neural vocoder

 

WaveNet은 1d CNN

 

매우 큰 receptive field(hidden node가 input에서 어느정도 영역을 보고 결정되었는지 field size)

 

 

위 그림 같은 경우 빨간색 동그라미 hidden node를 결정하기 위해 빨간색 네모 8개의 input size를 보고 결정

 

매우 긴 term의 정보를 고려하기 위해 receptive field가 커야한다

 

하지만 receptive field를 키울려고 CNN을 쌓을려고 한다면 매우 많이 쌓아야한다

 

그래서 layer를 적게 쌓으면서도 큰 receptive field를 가져갈 수 있을지..

 

그러한 idea가 위에서 나온 dilation component로.. 몇개씩 건너 뛰어가면서 convolution을 수행하는 것이다

 

이렇게 하면 효과적으로 몇개의 layer만 쌓아도 상대적으로 큰 receptive field를 가져갈 수 있다고 한다

 

 

기존의 CNN과 다른 점은 무조건 receptive field를 크게 가져간다고 좋은 것은 아닌데..

 

왜냐하면 소리가 중간에 끊겼는데도 receptive field가 커서 그것도 output으로 가져갈 수 있으니까

 

현재 시점에서는 끊기지 않은 소리만 집중하여 특징에 반영되는게 성능에 좋을 수도 있는데

 

이를 gated activation으로 해결

 

연관이 없는 부분은 끊어버리고 연관이 있는 부분만 output으로 가져가는 방식을 사용

 

 

14. Tacotron 2

 

WaveNet vocoder를 활용한 대표적인 TTS모델

 

text를 입력으로 주면 mel-spectrogram으로 바꿔주고 1d waveform으로 바꿔주는 system

 

 

 

 

input text가 주어지면... embedding으로 잘 바꾼 다음에 서로의 연관성을 LSTM으로 학습하여 mel spectrogram으로 전환

 

 input text가 Bidirectional LSTM을 거쳐서 attention을 사용하여 mel spectrogram을 생성

 

복잡한데 이런 디자인으로 어쨌든 성능이 잘 나왔다

 

아무튼 input text에서 mel spectrogram으로 바꿔주는 모듈들은 상당히 많다

 

아무튼 mel spectrogram이 나오더라도 1d waveform으로 바꾸는 것이 쉽지가 않은데 여기서 사용한 것은 wavenet vocoder

 

wavenet vocoder에 mel spectrogram이 들어오면 1d waveform으로 바꿔주는 이 모듈을 미리 학습시킨 다음에 따로 붙여준 형태

 

 

15. speech2face

 

전화할 때 상대방의 얼굴을 본 적이 없는데, 수화기 건너편의 얼굴을 목소리만으로 상상할 수 있을까?

 

목소리가 두껍고 걸걸하면 우락부락하게 생겼을 것 같고 

 

여자목소리면 어쨌든 여자다라고 할 수 있을거고

 

사람에게 이 task를 시켜보면 통계적으로 유의미할 정도로 어느정도 맞추긴 한다고함

 

이를 기반으로 사람의 목소리로 얼굴을 맞추는 인공지능을 연구한 시도

 

 

인터넷으로부터 얻은 많은 인터뷰 데이터로 목소리와 얼굴 이미지의 pair를 많이 만들고

 

이로부터 spectrogram을 뽑은 다음 voice feature를 뽑고

 

face에 대해 feature를 뽑은 다음 face와 voice 사이 joint embedding을 활용하여 

 

face feature로부터 reconstruction시켜주는 face decoder를 미리 학습시켜놓은 다음,

 

joint embedding으로 face와 voice가 서로 호환성이 높게 잘 학습된 feature를 face decoder에 넘겨주면 얼굴이 생성

 

 

이랬을 때 original과는 분명 다르지만 나름 느낌을 잘 살린 스켈레톤 이미지로 복원을 해줬다

 

 

16. speech separation

 

두 사람의 목소리가 섞이고 있을때...

 

 

오른쪽 사람에 집중하면.. 그 사람의 얼굴 정보를 활용하여 해당 목소리가 잘 분리되어 나온다고 함

 

 

Looking to Listen at the Cocktail Party: A Speaker-Independent Audio-Visual Model for Speech Separation | Papers With Code

 

Papers with Code - Looking to Listen at the Cocktail Party: A Speaker-Independent Audio-Visual Model for Speech Separation

Implemented in 5 code libraries.

paperswithcode.com

 

 

비디오 영상에서 사람의 목소리로부터 자동 번역을 해준다거나 그래야하는데.. 여러 사람의 목소리가 섞이면 자동 번역 성능이 떨어질 것

 

그래서 분리해서 번역하면 성능이 올라갈 수 있을 것이다

 

재미있는 부분이 데이터는 어떻게 만들까?

 

두 사람 목소리가 섞이는 비디오와 한사람의 목소리만 있는 비디오가 있어야하지 않을까?

 

이 연구에서는 한사람만 이야기하는 비디오 2개를 강제로 합성해서 두 사람이 이야기 하는 비디오로 만들었다고 함

 

 

 

spectrogram을 input으로 사용하고 관심있는 사람의 얼굴 embedding을 넣어주며 목소리에 대한 mask가 분리되어 나오는 형태

 

이를 original spectrogram에 곱해주어 waveform으로 전환

 

 

17. lip motion generation

 

 

전혀 다른 speech를 다른 video에 합성하여 만든 애니메이션

 

매우 고퀄리티라서 모르고 보면 구별하기 힘들정도임

 

국가 원수의 한마디에 정세가 바뀔 수 있는데.. 정직하게 사용하자는 책임의식이 필요

TAGS.

Comments