이미지 캡션 생성은 자연어로 이미지를 묘사하는 작업이다.
캡션 생성 모델은 객체 탐지 모델을 기반으로 탐지된 객체를 설명하는 text를 생성하기 위해 사용된 템플릿과 결합해서 동작했다. 이는 Convolution neural network와 RNN의 결합으로 대체됐다.
위와 같이 이미지가 주어지, pre-trained된 CNN에 의해 추출된 feature들이 RNN에 입력으로 사용되어 이미리를 설명하는 캡션을 만든다.
RNN이 잘 학습하기 위헤서, LSTM를 사용했는데, LSTM은 vanishing or exploding gradient를 해결할 수 있는 것으로 알려졌다. LSTM은 memory cell C를 3개의 gate(input, forget, output)으로 조절하면서 학습을 진행한다. 기존 RNN에서 사용된 역전파에서의 체인룰에 의한 곱셈이 덧셈으로 변환하여 vanishing or exploding gradient를 해결할 뿐만 아니라, RNN에 비해 긴 메모리를 저장할 수 있는 장점이 있다.
위의 그림은 이 논문에서 NIC (Neural Image Captioning)을 학습시킨 방법으로, pre-trained된 (이 논문에서는 InceptionV3를 사용했다.) CNN classifier를 사용해서 x(-1)에 넣는다. 먼저 S0는 단어로 시작해서, 문장의 시작을 알리고 이 입력을 embedding한 결과와 CNN classifier의 x(-1) 값으로 output을 계산한다. 계산된 output에서 argmax를 취해서 가장 확률이 높은 값을 선택해서 다음 입력으로 집어넣는다.가 나올 때까지 반복하거나, max_len을 초과할 때 까지 예측을 한다.
Ref) https://wewinserv.tistory.com/78
영단어는 캡션 생성을 위해 임베딩으로 전환돼야 한다. '임베딩'이란 이미지나 단어를 벡터 또는 숫자로 표현한 것이다. 그렇게 되면 연산이 가능해진다.
이미지 캡션을 생성하는데 여러 방법이 있는데,