https://arxiv.org/abs/2209.15323
SmallCap: Lightweight Image Captioning Prompted with Retrieval Augmentation
Recent advances in image captioning have focused on scaling the data and model size, substantially increasing the cost of pre-training and finetuning. As an alternative to large models, we present SmallCap, which generates a caption conditioned on an input
arxiv.org
이번 글에서는 입력이미지를 기반으로 데이터스토어에서 캡션을 검색하고 그를 기반으로 새로운 캡션을 생성해내는 SMALLCAP 논문리뷰를 진행하겠습니다.
Key Point
1. 재학습없이 retrieved caption을 프롬프트로 사용해서 domain transfer가 가능한 lightweight IC 모델, SMALLCAP
2. 데이터스토어 데이터 구성 변경으로 재학습 없이 domain-tranfer 가능 → 검색 증강방식의 또다른 새로운 방법 제시
Introduction
- 최근 Image Captioning(이하 IC) 모델들의 발전동향은 데이터셋의 크기와 모델의 사이즈를 키우는 방식으로 진행되었습니다.
- 하지만 이는 높은 계산비용이 든다는 단점이 있습니다.
- 모델의 학습비용을 줄이기 위해서 ClipCap, I-Tuning과 같은 모델에서는 사전훈련된 Vision 인코더, Language 디코더를 동결시키고 이 둘을 연결하는 매핑만 훈련하는 방식으로 훈련가능 파라미터의 수를 줄여서 계산 비용을 줄이려는 연구들이 진행되어왔습니다.
- 하지만 여전히 각각의 유스케이스에 대해서 개별적인 훈련이 필요하다는 한계가 존재합니다.
- 따라서 본 논문에서는 입력이미지를 기반으로 텍스트 데이터스토어에서 이와 관련된 캡션을 검색하고 검색한 캡션을 바탕으로 이미지에 대한 캡션을 생성하는 SMALLCAP을 제안합니다.
- 별도의 학습없이 검색기반의 프롬프트를 활용해서 새로운 지식에 접근 (training-free) 하기 때문에
- 사전학습된 모델이 준비되면 데이터 스토어를 다음과 같이 교체할 수 있습니다.
- 새로운 도메인으로 바꾸거나
- 크기를 키우거나 다양성을 높이거나
- 1로 바꾸면 새로운 도메인의 특징이 되는 스타일이나 개념에 접근해서 이에 따른 캡션을 생성할 수 있으며 (즉, 파인튜닝 과정을 대체)
- 2의 경우 모든 도메인에 적용할 수 있는 일반적 지식에 접근할 수 있습니다. (사전학습 과정을 대체)
- 새로운 도메인과 대규모 데이터를 학습없이 기존의 모델에 적용할 수 있게된 셈입니다.
- 자연스럽게 이런 방식을 사용하게 되면 훈련 계산비용이 많이 들지 않겠죠.
- 위의 방식으로 COCO벤치마크 기반에서 훈련된 SMALLCAP은 파라미터 크기는 83% 적으면서 다른 경량모델과 동등한 성능을 보였다고 합니다.
- in-domain에서는 다른 경량모델들과 경쟁적이고 out-of-domain에서는 큰 차이로 성능 능가했습니다.
- 이 결과는 이전 모델들이 새로운 도메인에 모델을 적용하기 위해서 파인튜닝을 해야만했던 한계를 극복할 수 있다는 것을 보여줌과 동시에 멀티모달 task를 위한 검색 증강의 가능성 입증했다고 볼 수 있겠네요 !
Proposed Approach
- 논문에서 제안된 방법에 대해서 더 자세하게 살펴봅시다.
- 본 논문에서 제안하는 모델의 전체 아키텍처는 다음 그림과 같습니다.
Model
- 모델의 전체적인 구조는 최근 IC 모델들이 자주 사용하는 인코더-디코더 구조를 띄고 있습니다.
- 사전 학습된 uni-modal 모델들을 인코더(CLIP)-디코더(GPT-2) 구조로 사용합니다.
- 각 uni-modal 모델들은 다른 벡터 공간에서 연산되기 때문에 이를 이어주기 위해서 Multi-head cross-att. 사용했습니다.
- 이를 통해 디코더의 각 계층이 인코더의 출력값(이미지 임베딩)에 attend 할 수 있게됩니다. (=이미지를 기반으로 텍스트를 생성할 수 있다는 의미)
- 이 때 인코더, 디코더 가중치는 Frozen 시키고 Cross-Att. layer만 무작위로 초기화해서 훈련(Only trainable)시키는 방식을 사용합니다.
- 훈련되는 매개변수의 양을 수식으로 살펴보면 다음과 같습니다.
- Cross-Att. layer의 projection 차원($d$)은 GPT-2 모델의 hidden dimension($d_{model}$)과 Cross-Att. head의 개수($h$)로 결정됩니다. ($d = d_{model}/ h$)
- default로 $d_{model}=768, h= 12$로 해서 $d=64$
- 임의의 값으로 변경도 가능
- 즉, 내가 훈련시킬 매개변수의 양을 조절할 수 있다는 의미
- 이처럼 Cross-Att. layer만 학습이 진행되므로 컴퓨팅 자원이 많이 들지 않고 사전훈련된 CLIP, GPT-2는 Frozen 시키기 때문에 일반화 성능도 높일 수 있다고 합니다.
Prompting with the Retrieved Captions
- Retrieval-augmented language generation(검색증강 언어생성)은 외부 데이터스토어에서 검색되는 추가정보에 기반해서 생성모델을 조건화하는 방법을 의미합니다.
- 이미지 캡셔닝 분야에서 검색증강 방식은 연구되지 않았던 분야라고 합니다.
- 본 논문에서는 훈련없이 domain transfer와 generalization을 수행하기 위해서 검색 증강을 최초로 사용하였습니다.
- CLIP 모델의 비전, 텍스트 인코더를 사용해서 두 모달리티를 공유 벡터공간으로 매핑하고 입력 이미지와 데이터스토어의 내용을 인코딩해서 코사인 유사도를 기반으로 가장 가까운 이웃 검색을 수행해서 데이터스토어에서 이미지와 가장 유사한 텍스트 k개를 검색합니다.
- 기존의 image-to-image retrieval 방식들은 데이터스토어 안에 이미지캡셔닝 데이터로만 구성이 되어있었는데
- 본 논문에서 사용하는 데이터스토어 안에는 이미지캡션, 비디오캡션, 오디오캡션 등 이미지를 설명할 수 있는데 사용될 수 있는 텍스트는 모두 포함되어있다고 합니다.
- 검색된 k개의 텍스트를 이용해서 아래의 프롬프트를 완성합니다.
Similar images show
{caption 1}
{caption 2}
...
{caption k}
This image shows
- 디코더는 위의 프롬프트를 입력으로 받아들이고 인코더를 통해 인코딩된 이미지 피처와 task demonstration을 조건부로 캡션을 생성하게 됩니다.
$$ L_{\theta} = \sum_{i=1}^{M} \log P_{\theta}(y_i|y_{< i}, {X}, {V}) $$
- $y_i$: 프롬프트 캡션 토큰
- $\bold{X}$: task demonstration
- $\bold{V}$: 인코딩된 이미지 피처
- 본 논문에서는 훈련없이 그냥 단순히 데이터스토어를 변경(추가 or 교체 ..)하는 것으로 일반화 성능을 높이거나 domain transfer를 할 수 있다고 주장합니다. (해당 부분은 아래의 실험결과를 통해 자세히 살펴보도록 하겠습니다.)
Main Experiments
Experimental Setup
- 모델 초기화 및 구조
- 인코더: CLIP-ViT-B/32, 디코더: GPT-2Base 허깅페이스에서 제공하는 모델로 초기화
- 각 GPT-2 레이어에 12개의 Cross-att. layer 추가됨. → 그리고 Only Cross-att. layer trainable
- 훈련 매개변수 제어
- $d=64, 16, 8, 4$
- $d$ 값에 따른 훈련가능 매개변수개수: 16 → 7M, 8 → 3.6M, 4 → 1.8M
- trainable params. 7M 기준 total params.(frozen CLIP, GPT-2 포함) 218M
- training setup
- COCO 데이터셋을 사용해서 훈련
- AdamW 옵티마이저를 이용하고 초기 학습률은 1e-4, 배치 크기는 64.
- 10 에포크 동안 훈련하며 검증 세트에서 CIDEr 점수가 최적인 체크포인트 선택.
- 단일 NVIDIA A100 GPU에서 최대 8시간 소요.
- 각 이미지당 4개의 캡션 사용해서 훈련
- neighbor search 방식: CLIP-ResNet-50x644 표현을 기반으로 하며 FAISS를 사용
- 추론 중에는 빔 검색 디코딩을 사용하며, 검색 및 프롬프트 포함 평균 추론 시간은 0.22초.
- 평가 메트릭
- COCO 평가 패키지를 사용하여 BLEU-4, METEOR, CIDEr, SPICE 메트릭을 계산.
Benchmark Results
COCO
- COCO 벤치마크에서의 SMALLCAP의 결과를 기존의 Lightweight-training models과 대규모 데이터로 사전학습된 V&L 모델과 비교하였습니다.
nocaps
- 이를 통해 훈련없이 데이터스토어에 데이터를 추가하는 것만으로 새로운 도메인으로의 transfer 가능성을 확인할 수 있습니다.
Training-Free Use of Data
- 이 섹션은 데이터스토어에 새로운 데이터를 추가함으로써 발생하는 SMALLCAP의 새로운 데이터에 대한 성능을 평가하는 부분입니다.
- 여기서 제시하는 모든 실험은 데이터스토어의 데이터 구성만 변경하고 모델은 고정해서 실험 진행하였고
- 이 실험의 목적은 다양한 캡션 데이터세트(Flick30k, VizViz, MSR-VTT)로 측정하는 out-of-domain 성능입니다.
In-domain data
- 학습 없이 다른 도메인으로의 전이가 데이터셋 변경으로 가능함을 보여주고 있습니다.
Augmenting the Datastore
- in-domain의 데이터양을 늘렸을때의 성능 확인실험
- 추가한 데이터 정보
- W (대규모이지만 자동으로 레이블이 지정됨)
- H (소규모이지만 깨끗함)
+ Web Data
- 이 경우 In-domain 데이터만 데이터스토어에 있는 경우보다 세 가지 데이터셋에서 모두 성능 향상
+ Human-labeled Data
- In-domain 데이터에 Human-labelled 데이터를 추가하면 Flickr30k 및 MSR-VTT에서 성능이 향상되지만 VizWiz에서는 성능 향상이 나타나지 않음.
- MSR-VTT에서는 웹 데이터만 추가했을 때보다 성능이 높아짐
- 이는 Human-labelled 데이터가 비디오 캡션과 같은 다양한 작업의 텍스트를 포함하고 있기 때문이라고 말하고 있음
+ Web + Human-labeled Data
- 웹 데이터와 인간 라벨 데이터를 모두 사용하여 도메인 내 데이터를 증강하는 경우, 두 데이터 소스를 결합하더라도 모든 데이터 세트에 도움이 되지 않는다는 결론
4.2에서 데이터셋을 W + H를 모두 사용했을 때 도메인 (in, near, out, entire) 성능이 모든 분야에서 향상되었는데 F30K, VW, MV의 데이터셋에서 성능 확인을 해본 결과, 단순히 인도메인 데이터에 데이터를 추가한다고 성능이 향상되는 것이 아닌 거 같다.는 생각을 해보았습니다
이 결과를 F30K, VW, MV 데이터셋에 한해서만 그렇다고 생각해야 하는건지 .. 즉, 특정한 데이터셋에서는 In-domain의 데이터의 양을 늘린다고 해서 단순히 성능이 높아지지 않을 수 있다라고 생각을 해야하는건가? 이 말은 즉슨, 일반적으로는 In-domain에서는 데이터의 양을 늘리면 (+ W + H) 성능이 높아지는 것이라고 생각을 해야하는건지 의문이 들었습니다.
Domain-agnostic Datastore
- 도메인에 관련없는 데이터에서도 좋은 성능을 낼 수 있을까?
데이터스토어에 있는 데이터가 꼭 인도메인이어야만 좋은 성능을 낸다기 보다는 대용량의 데이터가 많이 들어있는것이 더 좋아보인다.
인도메인 + W + H가 가장 좋은 성능을 낼 것이라고 생각했는데 아닌 점이 좀 인상깊다. → 데이터의 양 >>>질 인 거 같은 느낌을 받았다. (마치 ChatGPT가 모델 크기도 키우고 데이터의 양도 엄청 키워서 좋은 성능을 낸 것 처럼 ..)
→ 그냥 잘 사전훈련된 모델을 가지고 데이터 스토어의 양을 엄청나게 많이 하는 것이 도움이 될 수 있을것 같다는 생각이 들었다. (물론 고품질 대용량의 데이터라면 더 좋은 성능을 내겠지만)
→ 아래를 더 읽어보니 Human-labeled data는 다양한 도메인에서 text를 자유롭게 구성한 데이터셋임을 확인했다. 캡션 품질이 고퀄리티라고 하더라도 다른 도메인에 대한 내용들이 조금씩 섞이면서 데이터 분포에 변화가 생겨서 오히려 혼란(? 스러워져서 그런 것이 아닐까 (고퀄리티의 Only indomain human labeled data가 Web과 들어갔다면 더 좋지 않았을까..?)
Results with the Best Configuration
- 지금까지 세 데이터셋(Flickr30k, VizWiz, MSR-VTT)에 대해 서로 다른 구성의 데이터스토어에서 SMALLCAP의 성능을 확인했는데 이 성능을 ClipCap, CaMEL, 기존 V&L 모델 과 비교
- 기존의 lightweight-training model(ClipCap, CaMEL)은 도메인 밖의 일반화에 한계가 있지만 SMALLCAP은 데이터스토어의 컨텐츠를 스왑하기만 하면 domain transfer가 가능해진다.
ClipCap과 CaMEL도 각 세개의 데이터셋으로 파인튜닝해서 결과를 확인해봤으면 파인튜닝 시간 및 컴퓨팅 비용대비 성능 비교가 더 잘돼서 Retrieval augmentation 방식의 유효성을 더 잘 보여줄 수 있지 않았을까..? (V&L은 파인튜닝해서 성능을 비교했으니까..!)
아직 SOTA V&L에는 훨씬 못미치는 성능인 부분이 좀 아쉽다 .. → Retrieval Aug.가 컴퓨팅 자원을 줄이면서 다른 도메인으로의 전이를 시킬 수있다는 가능성을 보여줬다는 것에는 동의하지만 V&L 성능을 따라잡을 수 있을까..?
Discussion
Qualitative Examples
- Retrieved된 캡션을 바탕으로 힌트를 얻어서 이미지에 적합한 문장을 생성해내는 것을 확인할 수 있음
- 두번째 고양이 예시의 경우 잘못 Retrieved 된 부분은 걸러서 생성
- retrieved captions을 통해서 tutu, Swanson(brand name), Pokemon을 정확히 맞췄는데 coco 데이터에서 tutu랑 Swanson는 전혀 나온적이 없었고 Pokemon는 6번밖에 나온적이 없었다.
Analysis of the Retrieved Captions
- datastore의 setting을 In-domain + Web + Human-labeled로 하여 각 데이터셋의 관계와 영향력을 실험
- MSR-VTT는 비디오 domain의 데이터셋인만큼 비디오 데이터셋에서 많이 retrieval
- VizWiz가 독특한 데이터셋인만큼 in-domain retrieval의 비중이 컸다.
- Human-labeled data는 다양한 domain에서 text를 자유롭게 구성할 수 있었다.
- 위 표는 다양한 Human-labeled data들이 성능에 얼마나 연관/영향을 미치는지를 측정하였다.
The Impact of Retrieval
- without retrieval: retrieval caption없이 prompt를 “This image show”만 넣은 경우
- smallcap이 단순히 retrieval caption을 되새김해서 caption을 만드는것은 아닌지를 확인하기 위해 visual modality를 없애서 visual features을 0으로 인코딩하여 실험하였더니 성능이 현저히 떨어졌다.
Alternative Decoders
☃️ Review
지난 번에 LLM 관련 프로젝트를 진행하면서 hallucination을 방지하기 위해서 LangChain 프레임워크를 사용해본적이 있었는데
LangChain 프레임워크를 사용할 때 DB에 있는 문서에서 사용자의 질문과 유사도를 비교해서 문서를 추리고
해당 문서에서 사용자의 질문에 대한 답변 생성했었는데
그 때 사용한 LangChain 프레임웤과 비슷한 느낌(? 을 받았습니다.
검색방식을 text-image에 적용을 해서 조건부 캡셔닝st로 접근한 점이 인상깊었던 것 같습니다.
논문에서도 "검색 증강의 방식을 다양한 멀티모달로의 확장 가능성"을 언급하고 있는데
데이터스토어에 다양한 형태의 데이터가 포함될 수 있기 때문에 다른 멀티모달로의 작업에 확장성에 대한 연구를 진행할 수 있을 것 같다는 생각을 해보았습니다.(ex. 비디오-오디오..)
또한 데이터스토어 구성 데이터에 따른 성능 실험결과들을 보면서 데이터스토어에 포함된 데이터의 구성을 변경함으로써 domain-transfer에 대한 가능성을 엿볼 수 있었는데요.
BLIP에서 CapFilt 방법으로 noisy Large-scale Web Data를 걸러내서 데이터셋을 bootstrapping하는 방식을 사용했던 것처럼 CapFilt 모듈을 SMALLCAP에 접목시켜서 데이터스토어의 데이터를 고품질 대용량으로 채우는 방식에 대한 연구를 진행하는 것에 대해서도 생각해보았습니다.
혹은 IC, V&L에서 소개되었던 다양한 모듈들(Controllable, CapFilt, …)을 검색기반 프롬프트의 SMALLCAP과 앙상블했을 때 IC 모델의 성능이 bootstrapping되는지 확인을 해보고 싶네요 !
긴 글 읽어주셔서 감사합니다 :)
본문에 잘못된 내용이 있으면 댓글로 알려주시면 감사하겠습니다 :)
