OpenAI CLIP에 대해 알아야 할 모든 것

OpenAI CLIP에 대해 알아야 할 모든 것

OpenAI의 CLIP(Contrastive Language-Image Pre-training)은 이미지와 텍스트 설명을 연관짓는 방법을 학습하는 모델입니다. CLIP의 작동 방식과 구현 방법을 분석하면 OpenAI CLIP에 대한 완전한 이해를 얻을 수 있습니다.

소개

2021년 1월, OpenAI는 CLIP(대조 언어-이미지 사전 훈련)을 발표했습니다. 이는 특정 데이터셋에 대해 훈련할 필요 없이 영어에 대한 이해를 활용하여 이미지를 분류하는 제로샷 분류기입니다. 이 모델은 GPT-3와 유사한 대규모 트랜스포머의 최신 발전을 비전 분야에 적용한 것입니다.

결과는 놀랍도록 인상적입니다. 자체 이미지로 모델을 실험해볼 수 있도록 CLIP 튜토리얼과 CLIP Colab 노트북을 준비했습니다.

OpenAI CLIP이란?

CLIP(대조 언어-이미지 사전 훈련)은 자연어 지도 학습을 통해 학습하는 효율적인 방법입니다. 2021년 논문 "Learning Transferable Visual Models From Natural Language Supervision"에서 소개된 CLIP은 이미지와 텍스트 임베딩을 결합한 모델입니다.

CLIP은 4억 개의 이미지-텍스트 쌍을 자기 지도 방식으로 훈련하여 텍스트와 이미지를 동일한 임베딩 공간에 매핑합니다. 예를 들어, 강아지 이미지와 "강아지 이미지"라는 문장은 매우 유사한 임베딩을 가지며 벡터 공간에서 서로 가깝게 위치합니다. 이러한 기능은 설명을 사용하여 이미지 데이터베이스를 검색하거나 그 반대의 작업 등 다양한 애플리케이션을 가능하게 하므로 중요합니다.

CLIP의 성능

훈련 효율성: CLIP은 가장 효율적인 모델 중 하나로, 4억 개의 이미지로 41%의 정확도를 달성합니다. 동일한 이미지 수에서 Bag of Words Prediction(27%) 및 Transformer Language Model(16%)과 같은 다른 모델보다 성능이 뛰어납니다. 이는 CLIP이 해당 분야의 다른 모델보다 훨씬 빠르게 훈련됨을 나타냅니다.

일반화: CLIP은 다양한 이미지 스타일로 훈련되어 ImageNet과 같은 모델보다 훨씬 유연합니다. CLIP은 훈련된 이미지에 대해서는 잘 일반화되지만, 훈련 도메인을 벗어난 이미지에서는 효과적이지 않을 수 있습니다. 아래는 다양한 이미지 스타일의 예입니다.

CLIP 작동 방식

아키텍처

CLIP 모델은 텍스트 인코더와 이미지 인코더라는 두 가지 주요 구성 요소로 이루어져 있습니다. 텍스트 인코더는 2017년부터 NLP에 혁신을 가져온 트랜스포머 아키텍처를 사용합니다. 뛰어난 시각적 설명을 보려면 다음 블로그를 참조하세요.

이미지 인코더의 경우 저자는 ResNet-50과 Vision Transformer(ViT)라는 두 가지 모델을 실험했습니다. ResNet-50은 합성곱 신경망(CNN)을 기반으로 한 원래의 최첨단 이미지 분류 아키텍처입니다. ViT는 이미지에 트랜스포머를 적용한 최신 적응 모델로, 각 이미지를 패치 시퀀스로 분할하여 토큰 시퀀스처럼 처리합니다. 저자는 ViT가 더 빠르게 훈련된다는 것을 발견했습니다.

가장 큰 ResNet 모델인 RN50x64는 592개의 V100 GPU에서 18일이 걸렸지만, 가장 큰 Vision Transformer는 256개의 V100 GPU에서 12일이 걸렸습니다.

텍스트 인코더와 이미지 인코더는 모두 처음부터 훈련되었습니다.

우리는 ImageNet 가중치로 이미지 인코더를 초기화하거나 사전 훈련된 가중치로 텍스트 인코더를 초기화하지 않고 CLIP을 처음부터 훈련합니다.

훈련

저자는 처음에 주어진 이미지에 대한 정확한 캡션이나 설명을 예측하는 이미지 캡셔닝 모델을 훈련하려고 시도했습니다.

VirTex와 유사한 초기 접근 방식은 이미지 CNN과 텍스트 트랜스포머를 처음부터 공동 훈련하여 이미지의 캡션을 예측하는 것이었습니다. 그러나 이 방법을 효율적으로 확장하는 데 어려움을 겪었습니다.

그러나 4억 개의 (이미지, 텍스트) 쌍에 대해 이미지 캡셔닝 모델을 훈련하는 것은 확장 가능하지 않다는 것을 발견했습니다. 대신 대조 표현 학습 접근 방식을 선택했습니다. 이 접근 방식의 목표는 유사한 샘플 쌍은 서로 가깝고, 유사하지 않은 쌍은 멀리 떨어져 있는 임베딩 공간을 학습하는 것입니다.

일반적인 대조 학습 설정에서 모델은 (앵커, 긍정, 부정) 형태의 예제를 제공받습니다. 여기서 앵커는 강아지와 같은 한 클래스의 이미지이고, 긍정은 같은 클래스의 다른 이미지(다른 강아지)이며, 부정은 다른 클래스의 이미지(예: 새)입니다. 이미지가 임베딩되고, 모델은 같은 클래스의 임베딩 간 거리(distance(anchor, positive))를 최소화하고 다른 클래스의 임베딩 간 거리(distance(anchor, negative))를 최대화하도록 훈련됩니다. 이는 모델이 동일한 객체에 대해 매우 유사한 임베딩을 생성하고 다른 객체에 대해 뚜렷한 임베딩을 생성하도록 유도합니다.

대조 학습의 시각화. 출처: https://www.v7labs.com/blog/contrastive-learning-guide

동일한 접근 방식은 텍스트뿐만 아니라 텍스트와 이미지의 조합에도 적용될 수 있습니다. 예를 들어, CLIP에서 단일 훈련 예제는 앵커(강아지 이미지), 긍정("강아지 이미지"라는 캡션), 부정("새 이미지"라는 캡션)으로 구성될 수 있습니다.

CLIP은 이 접근 방식을 다중 클래스 N-pair 손실을 사용하여 더욱 일반화합니다. 이는 표준 방법의 확장으로, 각 앵커에 대해 여러 개의 부정 및 긍정을 포함합니다. 논문에 설명된 대로:

N개의 (이미지, 텍스트) 쌍 배치가 주어지면 CLIP은 배치 전체에서 실제로 발생한 N × N 가능한 (이미지, 텍스트) 쌍 중 어느 것이 발생했는지 예측하도록 훈련됩니다. 이를 위해 CLIP은 이미지 인코더와 텍스트 인코더를 공동으로 훈련하여 배치 내 N개의 실제 쌍에 대한 이미지 및 텍스트 임베딩의 코사인 유사성을 최대화하고 N² − N개의 잘못된 쌍의 임베딩의 코사인 유사성을 최소화하는 다중 모달 임베딩 공간을 학습합니다. 이러한 유사성 점수에 대해 대칭 교차 엔트로피 손실을 최적화합니다.

프롬프트 엔지니어링 및 앙상블

언어 모델의 등장과 함께 프롬프트 엔지니어링은 생성 모델에서 좋은 출력을 얻기 위한 일반적인 방법이 되었습니다. CLIP의 텍스트 인코더가 트랜스포머 모델이기 때문에 저자는 제로샷 성능을 달성하는 데 프롬프트 엔지니어링이 중요하다는 것을 발견했습니다. 사전 훈련 데이터셋에서 이미지와 쌍을 이루는 텍스트가 "개"와 같이 단일 단어(클래스 레이블)인 경우는 드물고, 대부분의 경우 텍스트는 전체 문장(캡션이나 설명)이었습니다. 그 결과 “a photo of a {object}” 프롬프트가 좋은 기본값이지만, 특정 경우에는 더 전문화된 프롬프트가 더 효과적이었습니다. 예를 들어 위성 이미지의 경우 "a satellite photo of a {object}"가 더 효과적이었습니다.

저자는 또한 여러 모델의 예측을 결합하여 최종 출력을 생성하는 모델 앙상블을 실험했습니다. 이 접근 방식은 고분산 및 저편향(과적합) 모델의 문제를 해결하기 위해 머신러닝에서 일반적으로 사용됩니다. CLIP의 경우 다양한 프롬프트를 사용하여 분류기를 생성하여 앙상블을 구성했습니다.

프롬프트 엔지니어링과 앙상블 모두 ImageNet에서 성능을 크게 향상시켰습니다.

ImageNet에서 우리는 80개의 다양한 컨텍스트 프롬프트를 앙상블하여 위에서 논의한 단일 기본 프롬프트보다 성능이 3.5% 추가로 향상되었습니다. 프롬프트 엔지니어링과 앙상블을 함께 고려하면 ImageNet 정확도가 거의 5% 향상됩니다.

OpenAI CLIP의 응용 분야

OpenAI CLIP은 이미지-텍스트 분석에서 광범위한 응용 분야와 사용 사례를 가지고 있습니다. 주요 응용 분야와 사용 사례는 다음과 같습니다.

  • 이미지 분류: CLIP은 이미지의 내용에 따라 이미지를 여러 클래스나 범주로 분류할 수 있습니다. 주어진 이미지에 대해 가장 관련성 높은 클래스 레이블을 예측할 수 있습니다.
  • 이미지 검색: CLIP은 주어진 텍스트 쿼리를 기반으로 관련 이미지를 검색할 수 있습니다. 입력 텍스트와 의미적으로 유사한 이미지를 찾을 수 있습니다.
  • 콘텐츠 모더레이션: CLIP은 이미지와 텍스트에서 부적절하거나 불쾌한 콘텐츠를 자동으로 감지하고 조정하는 데 사용할 수 있습니다.
  • 이미지 캡셔닝: CLIP은 이미지의 내용을 기반으로 캡션이나 설명을 생성할 수 있습니다.
  • 시각적 질문 응답: CLIP은 이미지의 내용에 대한 질문에 답변할 수 있습니다.

Huggingface Transformers로 OpenAI CLIP 구현하기

HuggingFace Transformers 라이브러리를 사용하면 몇 줄의 코드만으로 로컬 머신에서 CLIP을 사용할 수 있습니다! 먼저 라이브러리를 가져오고 사전 훈련된 모델을 로드합니다.

import transformers

model = transformers.CLIPModel.from_pretrained("openai/clip-vit-base-patch32")
processor = transformers.CLIPProcessor.from_pretrained("openai/clip-vit-base-patch32")

다음으로, 캡션이나 설명 목록과 이미지 목록을 각각 만듭니다. 이미지는 URL 또는 PIL 이미지로 표현할 수 있습니다.

import PIL.Image

images = [PIL.Image.open("for_example_a_dog_image.jpeg")]
possible_classes = ["an image of a bird", "an image of a dog", "an image of a cat"]

프로세서를 호출하면 텍스트와 이미지를 토큰화하고 모델 입력을 위해 준비합니다. 이 과정은 표준 텍스트 전용 사용 사례에서 토크나이저를 호출하는 것과 유사합니다. 설명 배치가 주어지면 텐서 저장을 위해 모든 설명의 길이를 동일하게 맞추기 위해 패딩이 적용되고, 긴 문장은 최대 시퀀스 길이(앞서 언급한 대로 76)로 제한하기 위해 잘라내기가 사용됩니다. 마지막으로 토큰화된 입력을 모델에 전달하면 텍스트 및 이미지 인코더를 통해 처리됩니다.

with torch.no_grad():
    inputs = processor(text=descriptions, images=images, return_tensors="pt", padding=True, truncation=True)
    outputs = model(**inputs)

이제 두 가지 함수를 사용하여 내적(dot product) 행렬을 얻을 수 있습니다. logits_per_image를 사용하여 형태가 [num_of_images, num_of_text]인 내적 행렬을, logits_per_text를 사용하여 형태가 [num_of_text, num_of_images]인 행렬을 얻을 수 있습니다.

dot_products_per_image = outputs.logits_per_image
dot_products_per_text = outputs.logits_per_text

마지막으로, 원하는 경우 이러한 행렬에 소프트맥스 함수를 적용하여 각 이미지에 대한 확률 분포를 얻을 수 있습니다.

probabilities = dot_products_per_image.softmax(dim=1)

OpenAI CLIP 사용의 한계

논문에서 많은 실험과 결과를 다루지만, CLIP에는 여러 한계가 있다는 점을 인지하는 것이 중요합니다.

첫째, 앞서 언급한 설계 결정으로 인해 CLIP은 생성 모델이 아니므로 이미지 캡셔닝과 같은 작업을 수행할 수 없습니다. 그러나 다른 생성 AI는 OpenAI CLIP보다 더 많은 작업을 수행할 수 있습니다. 예를 들어:

novita.ai LLM이 이미지 캡셔닝 수행

novita.ai와 같은 다른 생성 AI는 해당 API를 적용하여 CLIP의 단점을 보완할 수 있습니다.

저자는 CLIP이 여전히 최첨단 수준과는 거리가 멀고 선형 레이어가 추가된 ResNet과 비슷한 수준이라고 언급합니다. 특정 작업에서는 일반화가 잘 되지 않습니다. 예를 들어 쉬운 MNIST 손글씨 숫자 인식 데이터셋에서 88%의 정확도만 달성하는데, 이는 훈련 데이터에 유사한 이미지가 없고 CLIP이 이 문제를 거의 해결하지 못하기 때문일 가능성이 높습니다.

CLIP은 인터넷에서 필터링되지 않고 선별되지 않은 이미지-텍스트 쌍으로 훈련되어 모델이 많은 사회적 편향을 학습하게 됩니다. 이러한 우려는 현재 대규모 언어 모델(LLM)에서도 유사하며, RLFHF(Robust Low-Frequency Hacking Framework) 및 Direct Preference Optimization과 같은 기술이 이를 완화하려고 시도하고 있습니다.

또한 원래 구현에서 Transformer 텍스트 인코더의 최대 시퀀스 길이는 76으로 제한되었습니다. 이 제한은 데이터셋이 주로 이미지와 짧은 캡션으로 구성되어 있기 때문에 발생합니다. 따라서 기본 사전 훈련 모델을 사용하면 모델이 짧은 텍스트로 훈련되었기 때문에 76개 토큰 이후에 잘리게 되어 긴 텍스트에서 성능이 좋지 않을 수 있습니다.

이미지-텍스트 분석의 미래 방향: CLIP

OpenAI CLIP의 성공은 이미지-텍스트 분석의 미래에 새로운 가능성을 열었습니다. 연구자와 개발자는 이 분야에서 혁신적인 응용 프로그램과 발전을 지속적으로 탐구하고 있습니다.

한 가지 미래 방향은 CLIP을 오디오 및 비디오와 같은 다른 양식과 통합하여 다중 모달 분석을 가능하게 하는 것입니다. 이를 통해 CLIP은 복잡한 멀티미디어 데이터를 이해하고 분석하여 더 포괄적이고 정확한 결과를 얻을 수 있습니다.

또한 자기 지도 학습 및 비지도 표현 학습의 발전은 CLIP의 성능과 일반화 능력을 더욱 향상시킬 수 있습니다. 이러한 발전은 의료, 로봇공학, 멀티미디어 콘텐츠 분석 등 다양한 분야에서 CLIP의 새로운 잠재력을 열어줄 수 있습니다.

CLIP을 사용한 이미지-텍스트 분석의 미래는 유망하며, 지속적인 연구 개발이 이 흥미로운 분야의 경계를 계속 확장할 것입니다.

결론

OpenAI의 CLIP은 대규모 트랜스포머와 대조 학습을 활용하여 자연어 설명을 기반으로 이미지를 분류함으로써 이미지-텍스트 분석에서 중요한 도약을 의미합니다. 그 다양성은 수많은 혁신적인 응용 프로그램을 가능하게 하지만, 훈련 도메인 외부의 작업에서의 어려움, 텍스트의 제한된 시퀀스 길이, 필터링되지 않은 훈련 데이터에서 비롯된 사회적 편향 상속 등의 한계에 직면해 있습니다.

프롬프트 엔지니어링 및 앙상블과 같은 기술이 성능을 향상시켰으며, 오디오 및 비디오와 같은 다른 양식을 통합하는 미래 발전과 자기 지도 및 비지도 학습의 발전은 CLIP의 기능을 더욱 향상시킬 것으로 기대됩니다. 이 분야의 지속적인 연구 개발은 더 포괄적이고 정확한 멀티미디어 분석을 위한 밝은 미래를 시사합니다.

novita.ai는 무한한 창의성을 위한 원스톱 플랫폼으로, 100개 이상의 API에 액세스할 수 있습니다. 이미지 생성부터 언어 처리, 오디오 향상 및 비디오 조작까지, 저렴한 종량제 요금제로 GPU 유지 관리 부담 없이 자체 제품을 구축할 수 있습니다. 지금 무료로 사용해보세요.

추천 자료

LLM과 GPT의 차이점은 무엇인가요?

2024 LLM 리더보드 예측 공개

Novita AI LLM 추론 엔진: 가장 큰 처리량과 가장 저렴한 추론