Show and Tell: Lessons learned from the 2015 MSCOCO Image Captioning Challenge

Image captioning 즉 image를 text로 변환하는 작업은 매우 흥미로운 일이다.
이것은 이미지 인식과 자연어처리의 조합이다.
Image captioning은 이미지에 대해 정확하게 기술하는 captions을 생성한다.


지금까지 최신의 Image Captioning 기법은 구글에서 제안한 방법이다.
아래 사이트에 자세한 정보가 나와 있다.

https://research.googleblog.com/2016/09/show-and-tell-image-captioning-open.html

사실 이것은 2014년 11월에 발표한 유명한 논문인 "Show and Tell: A Neural Image Caption Generator" 을 개선 시킨 것이다.

이 논문은 아래와 같이 수식으로 표현할 수 있다. 사진 I 와 잘 학습된 파라미터 W가 주어지면 설명문 S 즉 caption을 생성하는 것이다.


이것을 그림으로 표현하면 아래와 같다.
즉 image가 입력되면 googlenet 등과 같이 image의 특징을 잘 추출하는 model을 적용하여 특징 벡터를 뽑고 이를 LSTM의 최초 입력으로 집어 넣는다.


그러면 다음 step에서는 S0와 이전 step에서 생성한 C(-1), h(-1)이 LSTM의 입력이 되어 가장 확률이 높은 단어 S1이 선택되고 이는 다음 step(1)의 입력 단어가 된다.


이런 과정은 문장의 끝을 나타내는 token이 나타날 때까지 계속된다.


그렇다면 BeanSearch는 무엇일까?
BeamSearch는 아래 그림과 같이 확률이 높은 k 개의 단어를 기억하고 있는 것이다.


그리고 다음 step에서 이 k개의 단어를 입력으로 넣는다.
실제 논문에서는 k 개를 beam of size라고 하며 20개를 사용했다. k = 1인 경우는 2 BLEU만큼의 성능 저하가 있었다.


자 기본적인 Show and Tell은 끝났고 2016년 9월에 발표된 구글의 논문은 위에서 살펴본 것보다 좀 더 발전된 버전이다. \제목은 "Show and Tell: Lessons learned from the 2015MSCOCO Image Captioning Challenge"

자 그런데 대체 논문의 제목처럼 2015 MSCOCOCO Image Captioning Challenge에 참가해서 어떤 교훈을 얻었을까? 나는 어떤 차이가 있었는지 궁금하다. 사실 22개월의 갭이 있으니 엄청난 차이가 있을 것이다. 그 사이에 여러 기법들과 모델들이 개발되었으니 그것만 적용해도 성능 개선이 클 것이다. 자 그럼 무엇을 개선했나?
표로 정리하면 아래와 같다.



논문 내용은 사실 거의 2014년도 버전과 비슷하고 MSCOCO에 참가한 내용을 기술한 5장을 보면

첫 째, 기존에는 GoogleLenet을 사용했는데 여기에 Batch Normalization을 적용했더니 성능이 BLEU-4 에서 2 points 개선되었다.

둘 째, 기존에는 GoogleLeNet을 pre-trained 하여 사용했는데 이는 overfitting을 방지하는 효과가 있었다.
학습 시에는 GoogleLeNet은 fix하고 LSTM part만 학습하였다.
MS COCO에서는 LSTM을 학습하는 동안 image model 의 파라미터도 fine tunning 하여 MS COCO training set에 포함되어 있는
이미지에 좀 더 잘 맞는 모델을 생성할 수 있었다.
학습 시에 LSTM parameters이 어느 정도 잘 학습 된 후에 Image parameters를 학습하는 것이 좋다.
그렇지 않으면 LSTM의 gradients의 noise로 인해 image parameters가 이상한 방향으로 학습되어 결코 회복되지 않는 현상이 발생했다.

셋 째, cheduled Sampling LSTM은 image가 주어졌을 때 caption을 생성한다. LSTM은 caption에서 이전 단계의 word와 model의 현재 state가 주어졌을 때 caption의 각 word를 예측하기 위해 학습된다. inference 시 새로운 이미지가 입력되면, 이전 단계의 word는 unknown 이기 때문에 이전 단계에서 예측한 word가 현재 단계의 word input 이 된다.
따라서, training 과 inference 사이에 차이가 발생한다.
최근에 "Scheduled sam-pling for sequence prediction with recurrent neural network"라는 논문을 통해 true previous word를
사용하여 fully guided scheme에서 주로 모델이 직접 생성한 word를 대신 사용하는 less guided scheme을 제안하였다. 이를 curriculum learning strategy라 한다.

넷 째, Ensembling은 간단하게 성능을 향상시키는 방법으로 오랫동안 사용되어 왔다.
간단하게 설명하면, 동일한 task에 대해 여러 모델을 별도로 학습한 뒤, 각 모델의 inference 결과를 종합하여 판단하는 것이다.

다섯 째, beam Size Reduction
기존에는 beam size 가 오직 k = 1 or 20 이 두 개의 size에 대해서만 고려했다.
MS COCO에 맞는 최적의 k 값을 찾기 위한 실험을 하였고 k = 3 일 때 가장 성능이 좋았다.
beam size가 커짐에 따라 더 많은 후보 문장을 생성하고 가장 likelihood 가 높은 값을 선택할 수 있어서 좋은 결과를 낼 수 있다.
상대적으로 작은 크기의 beam size로 좋은 성능을 얻은 것은 model이 overfitting 되었거나 학습을 할 때 사용한
objective function이 사람이 판단하는 것과 일치하지 않았다는 의미이다.
beam size를 줄이는 것은 문장 검색을 적게 한다는 것으로 생성된 문장이 새로운 의미를 갖게 한다.

k 값이 커지면 학습에 사용된 문장들에 과적합 되어 실제 inference 시 새로운 이미지가 들어왔을 때
오히려 성능이 더 저하될 수 있다.

● 참고한 자료
https://www.slideshare.net/ssuser06e0c5/a-neural-image-caption-generator





댓글

이 블로그의 인기 게시물

google vision API 사용하기

Convolutional Sequence to Sequence Learning

FPN