인용이 무려 1927회!ㅇ_ㅇ (23.01.28 기준)
'Vision-and-Language' Task (VL task
for short)
: image나 video를 input으로 받고 text로 output 뽑아서 visual understanding하는 task
Visual Grounding
'Vision-and-Language' Task를 위해서는 보통 visual grounding (language랑 vision stimuli를 aligning하는 것; 각 object들 matching이 되어야 뭔 말인지 아니까~)을 잘 할 수 있어야함.
Self-Supervised Learning for Vision-and-Language
VL task를 잘 수행하기 위해서 물론 visual, linguistic 각각에 대해 understanding하는 것도 중요하지만, 두 representation간의 연관성을 파악하지 못한다면 말짱도루묵.
To pretrin for visual grounding => visual-grounding 잘하는 common model을 만들어보자! 그리고 이 모델로 두 모달간의 관계도 학습해보고, VL task할 때도 잘 써먹어보자~!
1) Conceptual Captions dataset 사용해 pretrain
vision-language alignmnet하기 위한 적합한 데이터셋 필요 (기존 self-supervised learning 방식의 연구들에서 영감)
download: https://ai.google.com/research/ConceptualCaptions/download
2) BERT 구조 확장
vision, language 처리를 각각 개별 stream에서 처리 후 co-attentional transformer layer를 통해서 두 modality간의 communication 제공!
3) pretrain을 위한 proxy tasks
4) transfer learning을 위한 VL downstream task
Videobert (2019,ICCV)와 달리 text, vision 각각 다른 stream 구성한 이유
Ref: Videobert (2019, ICCV)
visual token을 text token처럼 취급하면서 단순히 clustering만 해서 각각의 space를 분리하려고 시도
Text Representation
Image Representations
그.런.데! co-attention의 최초는 따로 있다??
Faster R-CNN (2015, NeurIPS), Referitgame (2014, EMNLP) 에서 이미 co-attentional transformer와 비슷한 구조로 실험한 적이 있음! 아예 똑같단 건 아니고...! 그래서 이 논문은transformer
구조를 썼다는 점이 차별점인가봄.
Masked multi-modal modelling
Multi-modal alignment prediction
=> 각각 어떤 논문인가 대충보려고 했는데 코드 리뷰하다가 지쳐서 포기함ㅎㅎ
- LXMERT: in-domain dataset (i.e. COCO, Visual Genome)을 사용해 pre-training함
- VisualBERT: BERT 그대로 extend한 구조 사용, out-of-domain, in-domain 데이터셋 모두 사용, language만 MLM pre-traing
- Unicoder: image caption retrieval task에 초점.
- VLBERT
- Unified VLP
- UNITER
혹시나 github의 코드로 공부 하려는 사람들을 위해서 구조 파악할 수 있게 큰 거에서 작은 거로 & 파일, 클래스 명 등을 기준으로 설명해보겠음..! 코드 개 많고, 쓸떼없이 class 너무 많고!! 짜증남..!!!!
https://github.com/facebookresearch/vilbert-multi-task
pretrain, finetuning을 어떻게 하나 봅시다!
위 그림에서 3개 loss가 나오는 과정!
이미지와 텍스트에서 임베딩을 뽑습니다
Class BertEncoder에서는 co-TRM을 수행합니다
임베딩 나온걸 task에 사용하도록 pooling해줍니다. (이 과정에서 나온 feature는 alignment에서만 씀)
최종 로스 구하기
strength
=> 이 부분에서 많은 후속연구를 해볼 수 있을 것 같다.
weakness
코드 부분을 어떻게 보고 이해하면 좋을지 알려주신 점이 너무 좋았습니다.
다은님처럼 객체들을 직접 시각화해서 구조를 파악해서 이해한 적이 없었는데 정말 좋은 방법인 것 같습니다!! 짱!!
그리고 저도 본문에 나와 있는 부분들을 모두 꼼꼼하게 다 읽고 확인하는 습관을 들이도록 하겠습니다~!
잘 읽었습니다!