Boostcamp AI Tech

[Boostcamp Day-33] Computer Vision - Image Captioning

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

Image captioning


Encoder

image captioning은 전체적으로 CNN으로 feature tensor를 만들어 RNN으로 넘겨준다. 여기서 CNN이 encoding하는 역할을 한다고해서 아래와 같이 encoder라는 class를 정의하고 있다.

Decoder

decoder를 통해 2048x14x14의 output이 나오면 이것을 이제 RNN에 넣어준다. 그리고 이 RNN에 넣어주는 부분을 decoder라고 한다. 여기서는 RNN을 사용하는 것 뿐만아니라 attnetion module을 사용한 구조를 살펴볼 것이다.

우선 feature와 start token이 decoder에 들어가게 될 것이고 a라는 word를 parsing한다. 그리고 그 다음 part로 정보를 넘겨주면 똑같은 decoder를 사용하고 이전에 나온 a를 input으로 넣어준다. 또한 이전에 출력된 attention도 같이 input으로 넣어준다. 이러한 순서를 반복한다.


이렇게 한 단어 한 단어를 parsing할 때마다 RNN 구조의 decoder가 많은 word class를 가진 classification network라고 할 수 있다. 예를 들어 10,000개를 사용했다고 하면 이 10,000개의 단어 중에 어떤 단어를 출력할 것인가를 softmax로 판별을 하는 문제인데 하나의 decoder에서 best score로 a라고 나왔다면 a의 종속적인 결과를 계속 만들어내게되면 최적의 결과를 얻을 수가 없을 것이다. 왜냐하면 전체적인 sequence의 word들을 보았을때 a보다 더 적합한 word가 있었을 수 있기 때문이다. 이러한 문제를 막기위해 beam search라는 방법이 제안되었다.

  • Beam search

먼저 beam search의 parameter 중 k=3이라고 했다면 각 decode step에서 best score 3개를 고른다. 그리고 아래와 같이 3개를 시작으로 나올 sentence의 경우를 모두 고려하여 best score인 sequence를 선택한다.

728x90