VQA란?
Visual Question Answering의 줄임말로 AI가 이미지를 인식, 인식한 이미지를 바탕으로 이미지에 대한 질문을 했을 때 답을 해줄 수 있는 것을 말한다.
1. 개념
모델이 이미지를 인식하고 질문의 의도를 이해해야하는 등 인간이 해야 하는 복잡한 사고를 해야한다. 이 task를 처리하기 위해서 AI는 이미지 캡셔닝을 잘하는 것보단 더 많은 능력을 필요로 한다. 다음과 같은 능력을 요구한다고 한다.
- 세밀한 인식(이 이미지에서 서로다른 강아지 종은 몇개인가??)
- 물체 감지(얼마나 많은 나무가 있는가?)
- 행동 인식(여자는 웃고 있는가?)
- 지식기반 추론(이것은 채식주의자를 위한 피자인가?)
- 상식 추론( 사람은 1.0/1.0 시력을 갖고 있는가?)
또한 VQA에서 Q(Question)의 형태는 크게 두가지이다.
- open-ended : 열린 질문(질문의 형태가 ~?로 다양)
- multiple-choice : 다지선다형
2. 데이터셋 예시

5개의 한 문장짜리 캡션, 흥미로운 질문 등이 이미지와 함께 제공되어야 한다.
흥미로운 질문으로는 저 고양이의 색깔이 무엇인가? 말고 사진의 저 동물은 어떤 소리를 낼 것 같은가?와 같은 구체적이고 AI의 상상력을 요구하는?질문이어야 한다.
3. answer평가
1) open-ended
저 사진의 색깔은 오렌지인가?는 yes/no로 판단할 수 있지만 open-ended의 경우 하얀색이다. 울고있다. 등의 답변이 필요한 경우도 있다. 이 답변이 정답인지 아닌지 알기 위해서는 다음 공식을 사용한다.
분모가 3이란 뜻은 적어도 3명과 답이 일치하면 정답으로 간주한다는 뜻이다.

2) multi_choice
선지는 4종류이며 18개의 선택지로 구성된다.
- correct : 정답
- plausible : 맞긴 하지만 이미지와는 안맞음
- popular : yes, no, 2, 1등 자주 등장하는 선지
- random : 위의 세개 선지들이 먼저 생성되고 18개의 선지를 구성할 때까지 그냥 랜덤하게 위 셋 중에서 뽑아 만드는 나머지 선지

4. 특징
- yes/no로 대답할 수 있는 질문에는 "Is the ..." , "Are ...", "Does .." 같은 형태가 많다.
- 다양한 답변이 나올 수 있는 질문에는 "What is ...", "What type..." 같은 질문이 많다.
- 답변에는 yes/no, 색깔, left/right 등의 답변이 많다.
- 1단어 : 90%, 2단어 : 6%, 3단어 : 2.5% 정도로 답변 구성을 차지한다.
5. baseline
우리가 머신러닝을 할 때 나이브베이즈 룰을 사용하는 것처럼 VQA모델이 최소한 넘어야 하는 기준이 존재하는데 이를 baseline이라고 한다. baseline을 구하는 방법?은 다음과 같다.
- random: 무작위로 답변을 선택한다.
- prior(“yes”): “yes” 답변이 가장 많기 때문에 항상 yes를 답으로 내놓는다.
- per Q-type prior: 각 질문 종류별로 답변 중 최빈값을 답으로 내놓는다.
- nearest neighbor: 가장 유사한 K개의 질문을 뽑아 그 답변들 중 최빈값을 답으로 내놓는다.
6. 구현
step 1) image Channel
이미지를 위한 embedding 을 제공한다. 보통 두가지를 사용해서 임베딩 값을 구한다.
- L : CNN인 VGGnet에 이미지 입력, 이 net의 마지막 hidden layer의 크기인 4096차원의 output이 embedding으로 사용된다.
- norm L : 위와 비슷하지만 l_2정규화된 활성함수를 사용한다.
step 2) Question Channel
질문을 위한 embedding을 제공한다.
- Bag-of-Words Question(BoW Q): 질문의 최빈 1000개의 단어와 30차원의 BoW를 사용하여 1030차원의 질문 embedding을 만든다.
- LSTM Q: 1024차원이다.
- deeper LSTM Q: 2048차원이다
step 3) Multi-Layer Perceptron(MLP)

- BoW Q + I에 대해서는 단지 합친다.
- LSTM Q + I, deeper LSTM Q + norm I에 대해서는 이미지 embedding은 차원을 맞추기 위해 1024차원으로 변환된 후 LSTM embedding과 element-wise하게 곱해진다.
etc. 더 알아볼 점
음 우선 VQA의 개념이 뭔지, 어떻게 데이터셋을 구하고 어떤 방식으로 모델 성능평가를 하는지 대충 감이 온다. 그러나 method 관련 부분을 더 심도깊게 다뤄야 할 필요가 있을 것 같고, 멀티모달도 같이 공부를 해야할 것 같다. 더불어 데이터셋을 내가 직접 구축한다면 어떻게 라벨링할 것인지, 다른 데이터셋은 어떻게 라벨링 했는지도 확인해야 할 것 같고 baseline도 뭘 쓸 건지 고민해보면 좋을 것 같다.