Image Caption

cosmicdev·2021년 8월 15일
0

About

이미지 캡션 생성은 자연어로 이미지를 묘사하는 작업이다.
캡션 생성 모델은 객체 탐지 모델을 기반으로 탐지된 객체를 설명하는 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

단어를 임베딩으로 전환

영단어는 캡션 생성을 위해 임베딩으로 전환돼야 한다. '임베딩'이란 이미지나 단어를 벡터 또는 숫자로 표현한 것이다. 그렇게 되면 연산이 가능해진다.

이미지 캡션을 생성하는 방법

이미지 캡션을 생성하는데 여러 방법이 있는데,

  • 컨볼루션 신경망과 순환 신경망의 결합
    RNN은 새로운 문장을 만들기 위해 CNN 기능과 결합될 수 있다.

    이미지를 벡터로 임베딩하는 CNN과 결합된 LSTM decoder. 이미지 캡션을 생성한다.
  • 캡션 우선 순위
    여러 캡션 중 하나를 고르게 되는데, 이미지에 따라 순위가 정해지고 캡션이 선택된다.
    데이터셋에 이미지가 많이 포함될수록 좋다.
  • 조밀한 캡션 생성
    Dense captioning, 한 이미지에 여러 캡션을 생성하는 것

    Ref)https://cs.stanford.edu/people/karpathy/densecap/
  • 어텐션 기반의 캡션 생성
    어텐션을 기반으로 한 캡션 생성 방식이 정확도가 더 높아서 최근에 많이 사용되고 있다.

    이 방법은 캡션 시퀀스에 어텐션 모델을 훈련시켜서 더 나은 결과를 만들어낸다.
profile
Innovation is mine

0개의 댓글