(CLIP) 텍스트 정보를 이용한 Visual Model Pre-training

글쓴이 Inforience 날짜

클릭 >> Hello, world !! (from ShadowEgo)

이번 포스트에서는 OpenAI 에서 최근 발표한 CLIP 모델[1]을 소개한다.

이미지, 오디오 등과 같은 데이터의 차원(dimension)을 줄이면서도 보다 의미있는 형태로 변환하는 representational learning은 딥러닝 및 AI 기술의 대중화를 가능하게 한 중요한 요소들 중 하나이다. 특히 컴퓨터 비전 문제에서는 ImageNet의 대용량 데이터셋으로 미리 학습시킨 네트워크를 가져와 약간의 추가적인 학습만 수행하여도 원하는 task에서 훌륭한 성능을 낼 수 있어, 여러 분야에서 활발히 활용되고 있다.

이러한 representational learning의 성능을 끌어올리는 효과적인 방법은 사용하는 데이터셋과 모델의 크기를 늘려 나가는 것이다. 오늘 소개하고자 하는 CLIP 논문[1]은 기존 ImageNet 보다 방대한 – 무려 4억개 – 용량의 이미지 데이터를 사용하여 representational learning을 수행하였다. 기존의 이미지 사전 학습에서는 영상 분류 문제인 ImageNet 데이터셋을 주로 사용하였다. 주어진 이미지를 보고 그 이미지가 보여주는 물체(object)의 종류를 알아 맞추는 것이다. 이러한 영상 분류 문제에는 두 가지 한계점이 있다. 첫번째 문제는 물체에 대한 labeling이 필요하다는 것이다. 비교적 간단한 label이기는 하지만 이미지 수가 백만, 천만개가 넘는 대용량 데이터셋을 구축할 경우 물체의 분류를 정의하고 labeling 하는 것이 엄청난 부담이 된다. 두 번째 문제는 label이 지니는 정보의 양이 너무 적다는 것이다. 이미지에 포함된 다양한 정보들 중 물체의 ‘종류’라는 단일 정보만을 표현하기 때문에 이미지가 가진 다양한 특징을 활용하는데에는 한계가 있는 것이다.

CLIP 논문[1]에서는 (이미지, 물체 분류) 데이터 대신 (이미지, 텍스트)의 데이터를 사용하는데, 수작업 labeling 없이 웹 크롤링을 통해 자동으로 이미지와 그에 연관된 자연어 텍스트를 추출하여 4억개의 (이미지-텍스트) 쌍을 가진 거대 데이터셋을 구축하였다.

(이미지, 텍스트)로 구성된 데이터셋은 정해진 class label이 없기 때문에 분류(classification) 문제로 학습할 수는 없다. 따라서 CLIP 논문[1]에서는 주어진 N개의 이미지들과 N개의 텍스트들 사이의 올바른 연결 관계를 찾는 문제로 네트워크를 학습하였다.

위의 그림에서와 같이 이미지 인코더, 텍스트 인코더가 있으며, 각 인코더를 통과해서 나온 N개의 이미지, 텍스트 특징 벡터들 사이의 올바른 연결 관계를 학습한다. 이미지, 텍스트 인코더 모두 Transformer 기반의 네트워크를 사용하였다. 데이터셋의 크기가 큰 만큼 학습에 많은 시간이 소요된다. (256개의 V100 GPU 를 이용해서 12일간 학습)

이 논문에서는 매우 다양한 실험을 통해 이렇게 학습된 모델의 유용성을 보여주고 있다. 첫번째로 zero-shot learning 가능성을 테스트하였다. 이 논문에서 정의하는 zero-shot learning은 학습과정에서 한번도 보지 못한 문제 및 데이터셋에 대해서 그 성능을 평가하는 것이다. 예를 들어 학습된 CLIP 모델을 이용해서 ImageNet 데이터의 분류 과정을 수행하는 것이다. 평가 대상이 되는 데이터셋이 다르며, 이미지-텍스트 연결이 아닌 이미지 분류 문제에 적용하는 것이므로 문제의 타입 또한 다른 상황이다.

분류 문제를 위해 위의 그림과 같은 방법으로 CLIP 모델을 적용하였다. 이미지가 주어졌을 때 학습된 이미지 인코더로 이미지 특징을 추출하고, 모든 class label (e.g., 개, 고양이, 바나나 등)을 텍스트 인코더에 통과시켜 텍스트 특징을 추출한다. N개의 텍스트 특징들 중 이미지 특징과 가장 높은 상관관계를 가지는 텍스트를 입력 이미지의 물체 분류 결과로 선택하여 출력한다. 이런 과정을 수행했을 때 ImageNet에 대한 zero-shot learning 결과는 무려 76.2%로 매우 높은 성능을 보였다.

여기에 약간의 트릭으로 인식 성능을 더 높일 수 있었다. Class label 만 사용하는 대신 “a photo of a {object}” 와 같이 이미지에 포함된 물체를 인식하고자 함을 명확히 제시할 경우 인식률이 조금 더 높았다. 예를 들어, 애완동물 인식 문제에서는 “a photo of a {label}, a type of pet.” 으로 애완동물 인식 문제임을 명확히 할 수 있다. 모델 Ensemble 개념도 사용 할 수 있었다. “A photo of a big {label}” 과 “A photo of a small {label}” 처럼 다른 문장 템플릿 80개를 사용할 경우 단일 문장 템플릿을 사용하는 것에 비해 약 3.5%의 성능 향상이 있었다.

이와 같은 방식으로 ImageNet, Food101, SUN397 등의 데이터셋을 포함한 총 27개의 데이터셋에 대해서 zero-shot 인식 과정을 수행하여 ResNet-50을 이용한 fully supervised learning을 수행한 결과와 성능을 비교하였다. 놀랍게도 16개 데이터셋에 대해서 CLIP 모델을 이용한 zero-shot learning이 supervised learning 보다 높은 성능을 보였다 (위의 그림).

또한 사전 학습된 네트워크를 사용하는 통상적인 방법으로, 사전 학습된 이미지 인코더 모델의 마지막 단계에 linear classifier를 추가한 모델로도 평가를 수행하였다.

위의 그림은 27개 데이터셋에 대한 평균적인 인식 성능을 보여주고 있다. CLIP 모델(CLIP-ViT)이 다른 모든 모델들보다 높은 성능을 보여주고 있다. CLIP 모델은 9억개의 인스타그램 이미지로 사전 학습된 모델, ImageNet 에서 가장 좋은 결과를 보여준 EfficientNet 보다 높은 성능을 보여주었다.

더 많은 내용과 코드, 예제 등은 [2]에서 확인할 수 있다.

References

관련글 >> CLIP은 어떻게 활용될 수 있을까?