Image Captioning

일반적인 이미지 캡셔닝 모델은 모두 CNN을 이미지 인코더로, RNN을 문장 디코더로 사용하는 supervised version으로, 입력 이미지에 대한 ground truth 캡션을 생성할 확률을 높이는 방향으로 학습이 됩니다. Image-caption pair 데이터를 수집하는데 많은 비용이 드는 만큼 semi-supervised version의 모델들이 필요성이 대두되었지만, 이전까지 제안되었던 모델들은 모두 image-sentence pair을 많든 적든 필요로 합니다. 이 논문에서는 최초로(?) unsupervised version의 이미지 캡셔닝 모델을 제안합니다. 심지어 image set, sentence corpus, visual concept detector(본 논문에서는 object detector를 visual concept detector로 지칭함)를 거의 필요로 하지 않는다고 합니다. 캡션이 이미지의 함축적인 의미를 잘 내포하기 위해서 이미지와 캡션을 같은 latent space에 project하여 서로 reconstruct하는 방식을 사용합니다. 잘 이해가 가지 않지만 아래에 설명을 통해 차근차근 이해해봅시다.

기존의 이미지 캡셔닝 모델들은 image-sentence pair로 학습(supervised)이 되었는데, 이는 모두 수작업으로 해야 하므로 많은 노동력을 필요로 합니다. 실제로 MS COCO 데이터셋의 경우에도 ImageNet이나 Open-Images 데이터셋에 비하면 아주 적은 편에 해당합니다. 더군다나 이미지 캡셔닝 데이터셋의 클래스의 수는 100개가 채 되지 않습니다. 따라서 클래스에 해당하지 않는 이미지에 대해서는 캡셔닝을 하기가 어려워집니다. 결국 image-caption pair에 대한 의존성을 줄이고 novel object에 대해서는 캡셔닝을 할 수 있는, 즉, 모델 자체를 일반화하는 문제의 중요성이 대두됩니다.

근래에 이를 위한 여러 연구가 여럿 이루어졌습니다.

1

1) image-caption pair에 속하지는 않지만, image recognition dataset에는 속하는 object에 대해서 캡션을 생성하는 방법 (b)

2) image-caption pair에서 습득한 지식을 일반화하여 새로운 도메인에 적용하는 방법 (c)

3) image -> pivot language(한국어) -> target language(English) : image에 대한 캡션을 pivot language로 먼저 생성한 후, 이를 target language로 translate하는 방법 (d)

4) 외부의 말뭉치를 이용하여 모델을 pre-train하는 semi-supervised learning 방법 (e)

앞선 연구들이 기존의 image-caption pair를 모델의 입력으로 주는 방식에서 개선된 면이 있긴 하지만, 결국 image-caption pair를 어느정도 필요로 하긴 한다는 것입니다. 논문에서 제안하는 모델은 image-caption pair이 아닌 별도의 image set과 external corpus만을 필요로 합니다.

최근 하나의 언어로만 구성된 말뭉치로 학습된 unsupervised machine translator이 제안된 바 있습니다. 여기서 핵심 아이디어는 하나의 인코더를 공유하여 source language와 target language를 동일한 공간에 mapping한다는 점입니다. 논문에서도 이와 유사한 방식을 채택하지만 이미지와 문장의 서로 다른 modality로 인해 하나의 encoder를 공유하지는 못합니다.

논문에서 사용하는 방법론은 아래와 같습니다.

1) adversarial text generation: 전체적인 흐름을 살펴봅시다. 이미지가 CNN을 거쳐가면 Image feature를 뽑아낼 수 있고, 이를 이용하여 Generator에서는 문장을 생성합니다. Disciminator는 생성된 문장과 말뭉치의 문장을 구별하려하고, Generator은 Discriminator를 속일 수 있는 문장을 만들어내면서 좋은 문장을 생성할 수 있게 됩니다.

2) reward to generator: Generator에서 생성된 캡션이 이미지의 visual concept를 내포하게 하기 위해서 생성된 단어가 이미지의 visual concept와 일치할 때 Generator에 reward가 주어집니다.

3) Bi-directional reconstruction: 생성된 캡션이 내포하는 의미가 이미지와 상응하게 하기 위해서 이미지와 문장을 동일한 latent space에 project합니다. latent sapce 상의 image feature를 이용하여 캡션을 decode하고, 이를 다시 image feature를 reconstruct하는데 사용합니다. 또한 말뭉치의 단어를 encode하여 생성된 문장을 reconstruct할 수 있습니다.

논문에서는 또한 Image captioning model initialization pipeline을 제안합니다. 방법은 다음과 같습니다.

1) 먼저, 말뭉치 문장 속의 concept word를 입력으로 주고 concept-to-sentence 모델을 학습시킵니다.

2) Visual concept detector를 사용하여 이미지 내의 visual concept들을 뽑아냅니다.

3) visual concept을 concept-to-sentence 모델의 입력으로 주면 각각의 학습 이미지에 대해 가상의 캡션(pseudo caption)을 생성할 수 있습니다.

4) pseudo image-sentence pair을 이용하여 모델을 학습시킵니다. (supervised이지만 실제 image-sentence pair가 아님)


모델

모델은 크게 Encoder, Generator, Discriminator로 이루어집니다.

2

Encoder

\(f_im = CNN(I)\)

Encoder은 이미지 \(I\)를 입력으로 받아 이미지 feature \(f_im\)를 추출하기 위한 CNN으로, 본 논문에서는 Inception-V4를 사용하였습니다.


Generator

Generator은 Encdoer로부터 받은 이미지 feature를 LSTM을 이용하여 자연어 문장으로 decode합니다.

3

  • \(FC\): Fully Connected layer
  • \(f_im\): image feature
  • \(x_t\): LSTM input
  • \(W_e\): word embedding matrix
  • \(s_t\): one-hot vector representation of the generated word
  • \(n\): length of the generated sentence
  • \(p_t\): probability over the dictionary at the \(t\)-th time step
  • \((h^g)_t\): LSTM hidden state (of generator)
  • \(\sim\): sampling operation

Discriminator

4

  • \(q_t\): probability that the generated partial sentence \(S_t\) is regarded as real by the discriminator

  • \((h^d)_t\): LSTM hidden state (of discriminator)

  • \(n\): length of the generated sentence

Discriminator은 LSTM으로 Generator가 생성한 문장과 말뭉치의 문장 중 어느 것이 진짜인지를 구별하는 역할을 합니다. 생성된 문장을 진짜로 판별할 확률을 출력으로 내보냅니다.


학습과정

Advesarial Caption Generation

Generator가 이미지 feature를 입력으로 문장을 만들면, Discriminator은 이 문장이 생성된 문장인지, 말뭉치에서 가져온 진짜 문장인지를 구별합니다. Generator은 Discriminator가 진짜 문장을 구분해낼 수 없게끔 더 좋은 문장을 생성해내야 합니다. 이를 위해 매 time-step마다 Generator에게 adversarial reward를 줍니다.

5

이를 최대화할수록 Generator은 더 좋은 문장을 생성해낼 수 있게 됩니다. adversarial loss는 adversarial reward를 term으로 사용하여 아래와 같이 정의됩니다.

6

Visual Concept Distillation

Generator에 adversarial reward를 주면 문법적 규칙을 잘 따르는 문장을 생성해낼수 있게 되지만, 입력 이미지에 상응하는 문장을 만들어내지는 못합니다. 따라서 모델이 생성한 단어가 입력 이미지의 visual concept와 일치한다면 그에 대해서도 reward를 주기로 합니다. 이를 concept reward라고 합니다. 이미지가 visual concept detector에 입력되면 그 출력으로 visual concept \(c_i\)와 confidence score \(v_i\) 한쌍을 내보냅니다. 이 때, \(t\)번째 생선된 단어 \(s_t\)에 대한 concept reward는 아래와 같이 정의됩니다.

7

  • \(N_c\): total number of detected visual concepts
  • \(I\): Indicator function

Bi-directional Image-Sentence Reconstruction

Adversarial reward와 concept reward만을 사용할 경우, visual concept detector만이 이미지와 문장을 잇는 유일한 통로가 되기 때문에 이것이 문장의 퀄리티를 크게 좌우하게 됩니다. 하지만 현재의 visual concept detector은 novel object에 대한 concept을 detect할 수 없습니다. 따라서 더 나은 일반화를 위해 이미지와 문장을 동일한 latent space에 project하여 서로 reconstruct할 수 있게 합니다. 결과적으로 생성된 캡션은 이미지가 내포하는 잠재적 의미를 지닐 수 있습니다.

1) Image reconstruction 생성된 캡션은 이미지의 핵심을 담고 있다고 간주되므로, 생성된 문장으로부터 이미지 feature를 reconstruct할 수 있습니다. 생성된 문장을 discriminator를 통해 다시 인코딩 하는데, 마지막 hidden state가 fully connected layer를 거치면 common latent space에 project할 수 있습니다. 이렇게 project된 feature를 \(x’\)이라고 할 때, discriminator을 학습시키기 위한 image reconstruction loss는 아래와 같이 정의됩니다.

image reconstruction loss

8

Generator에게 주어지는 image reconstruction reward는 image reconstruction loss에 반대 부호를 취한것으로 간주할 수 있습니다.

2) Sentence reconstruction Discriminator를 통해 인코딩된 문장을 동일한 latent space에 project할 수 있습니다. 이는 다른 관점에서 image representation으로 볼 수 있고, 이를 이용하여 Generator에서 기존의 문장을 reconstruct할 수 있습니다. 이러한 과정을 통해 latent space상의 이미지와 문장을 aligning함과 동시에 image representation로부터 문장을 어떻게 decode할 것인지를 학습합니다.

sentence reconstruction loss

9

이는 cross-entropy loss의 형태를 취하고 있습니다.

3) Integration

10

Generator를 먼저 살펴봅시다. Generator에서 샘플링 연산은 미분불가능한 연산이므로, policy gradient을 이용하여 학습할 수 있습니다. 또한 역전파를 통해 sentence reconstruction loss의 그래디언트가 Generator에 전달됩니다. 이 두가지 그래디언트가 지속적으로 Generator를 업데이트 합니다.

11

  • \(\theta\): trainable parameters in the generator
  • \(\gamma\): decay factor
  • \(b_t\): baseline reward estimated using self-critic
  • \(\lambda_c\), \(\lambda_im\), \(\lambda_sen\): hyperparameters controlling the weights of different terms

Discriminator의 경우에는 adversarial loss와 image reconstruction loss를 통해 업데이트 됩니다.

12


Initialization

본 논문에서는 Generator와 Discriminator를 사전 학습하는 초기화 파이프라인을 제시합니다. Generator에서 생성되는 pseudo caption을 이용하여 모델을 초기화 합니다. 단계는 다음과 같습니다.

1) OpenImages 데이터셋의 object 클래스를 가지고 concept dictionary를 만듭니다.

2) 말뭉치의 문장을 이용하여 concept-to-sentence(con2sen) 모델을 먼저 학습시킵니다. 전체적인 flow는 다음과 같습니다.

문장 속 concept words -> 1-layer LSTM -> feature representation -> 1-layer LSTM -> 전체 문장

3) visual concept detector를 이용하여 각각의 이미지 속 concept을 detect합니다. detected concept을 con2sen모델의 입력으로 주면 pseudo caption을 생성할 수 있게 됩니다.

4) Generator를 pseudo image-caption pair로 학습시킵니다. 이렇게 생성된 image captioninig 모델을 feature-to-sentence(feat2sen)로 지칭하며, Generator를 초기화 하는데 사용합니다. Discriminator의 파라미터는 말뭉치의 문장을 학습하면서 초기화됩니다.


정리

13

논문에서는 unsupervised를 위해 필요한 명확한 세 가지의 학습 목표를 보입니다.

  • 생성된 캡션이 말뭉치의 실제 문장과 최대한 유사하게 보이도록 할 것. -> generated corpus와 external corpus를 두고 adversarial learning.
  • 문장 속에 이미지 내의 물체 정보를 담을 것. -> 문장에서 이미지에 대한 정보가 등장하면 concept reward 주는 방식으로 동작.(Reinforcement Learning의 아이디어)
  • 동일하다고 판단되는 이미지와 문장의 feature를 latent space상에서 가까운 distance에 둘 것. -> 양방향 reconstruction을 수행하면서 동일한 semantic을 지니는 feature들 끼리 align.

기존에 제시되었던 Image captioning task를 다루는 방법들은 결국 Supervised라는 틀을 벗어나지 못했습니다. 이 논문에서 등장하는 Unsupervised에 대해서도 사실 정말 Unsupervised가 맞을까라는 의구심이 드는 점도 있었지만, 어느 정도 Unsupervised의 방식에 대한 돌파구를 확인할 수 있었습니다.

Visual concept과 Sentence를 동일한 latent space에 project하고, GAN을 통해 의미론적으로 유사한 feature간의 reconstruction을 통한 align은 흥미롭긴 하지만 Visual concept, Generated sentence, sentence from corpus를 모두 align하려는 시도 때문에 Objective function과 더불어 parameter가 증가하는 한계를 보였습니다.

정리하자면, Image와 Text representation을 동일한 의미공간으로 임베딩하고 그 연관성을 또 다른 loss function을 통해 정의함으로써 Unsupervised learning이 됨을 보았습니다.