Apple, OpenAI의 CLIP 모델보다 더 작고 강력한 MobileCLIP 공개

PyTorchKR​:fire::kr: :thinking::speech_balloon:

  • Apple이 지난 CVPR 2024에서 공개했던 MobileCLIP의 코드와 모델 가중치를 공개했습니다. 논문도 아직 못 봤는데 코드와 가중치 공개된걸 보고 후다닥 퍼왔습니다. :sweat_smile: 더 작고 가벼우면서도 기존의 CLIP 모델보다 성능이 좋다고 하는데요, 함께 살펴보시죠. 논문은 곧, 나중에 살펴보겠습니다. :rofl:


MobileCLIP 소개

MobileCLIP은 OpenAI의 CLIP 모델과 같은 Image-Text 기반의 파운데이션 모델로, 지난 CVPR 2024에서 Apple이 MobileCLIP: Fast Image-Text Models through Multi-Modal Reinforced Training 논문으로 발표했습니다.

OpenAI가 지난 2021년 공개한 CLIP 모델은 우수한 Zero-shot 성능과 다양한 다운스트림 작업에서 좋은 성능을 보여주고 있으며, 현재까지 많은 모델들이 CLIP의 Image Encoder를 사용하고 있습니다. 하지만, CLIP 모델은 Transformer 기반의 Encoder(ViT)를 사용하고 있어 메모리 사용량과 지연 시간이 다소 있으며, 이는 모바일 장치에서의 CLIP 모델 사용을 어렵게 합니다.

MobileCLIP은 새롭고 효율적인 접근 방식인 '멀티모달 강화 학습(Multi-Modal Reinforced Training)'을 통해 사전학습된 모델입니다. 이미지 캡셔닝 모델과 CLIP Encoder 앙상블로부터 학습하는 새로운 방식을 통해 추가 지식을 강화 데이터셋에 저장하여 학습 시 연산 오버헤드를 피했습니다.

또한, MobileCLIP은 여러 데이터셋에서의 제로샷 분류 및 검색 작업에서 우수한 성능의 지연 시간 - 정확도의 트레이드 오프(Latency - Accuracy Trade-offs)를 달성하였습니다. MobileCLIP 모델 시리즈 중 하나인 MobileCLIP-S2는 이전 CLIP 모델인 ViT-B/16보다 2.3배 가량 빠르면서도 더 정확합니다.

주요 특징

  • MobileCLIP의 가장 작은 버전인 MobileCLIP-S0은 OpenAI의 CLIP ViT-B/16 모델과 비슷한 제로 샷 성능을 얻으면서도 4.8배 더 빠르고 2.8배 더 작습니다.
  • MobileCLIP-S2는 2.3배 더 빠르고 2.1배 더 작으면서도 평균 제로샷 성능이 SigLIP의 ViT-B/16 모델보다 우수하며, 3배 더 적은 수의 샘플로 학습합니다.
  • MobileCLIP-B(LT)는 77.2%의 제로샷 이미지넷 성능을 달성하여 유사한 아키텍처를 사용하는 DFNSigLIP보다 뛰어나며, 심지어 OpenAI의 ViT-L/14@336과 같은 최신 결과물보다도 우수합니다.

MobileClIP 설치 및 사용

설치

# python 3.10 이상
git clone https://github.com/apple/ml-mobileclip && cd ml-mobileclip
pip install -e .

사용 예시

import torch
from PIL import Image
import mobileclip

model, _, preprocess = mobileclip.create_model_and_transforms('mobileclip_s0', pretrained='/path/to/mobileclip_s0.pt')
tokenizer = mobileclip.get_tokenizer('mobileclip_s0')

image = preprocess(Image.open("docs/fig_accuracy_latency.png").convert('RGB')).unsqueeze(0)
text = tokenizer(["a diagram", "a dog", "a cat"])

with torch.no_grad(), torch.cuda.amp.autocast():
    image_features = model.encode_image(image)
    text_features = model.encode_text(text)
    image_features /= image_features.norm(dim=-1, keepdim=True)
    text_features /= text_features.norm(dim=-1, keepdim=True)

    text_probs = (100.0 * image_features @ text_features.T).softmax(dim=-1)

print("Label probs:", text_probs)

MobileCLIP 모델 개요 및 다운로드

Model # Seen
Samples (B)
# Params (M)
(img + txt)
Latency (ms)
(img + txt)
IN-1k Zero-Shot
Top-1 Acc. (%)
Avg. Perf. (%)
on 38 datasets
Pytorch Checkpoint (url)
MobileCLIP-S0 13 11.4 + 42.4 1.5 + 1.6 67.8 58.1 mobileclip_s0.pt
MobileCLIP-S1 13 21.5 + 63.4 2.5 + 3.3 72.6 61.3 mobileclip_s1.pt
MobileCLIP-S2 13 35.7 + 63.4 3.6 + 3.3 74.4 63.7 mobileclip_s2.pt
MobileCLIP-B 13 86.3 + 63.4 10.4 + 3.3 76.8 65.2 mobileclip_b.pt
MobileCLIP-B (LT) 36 86.3 + 63.4 10.4 + 3.3 77.2 65.8 mobileclip_blt.pt

더 읽어보기

MobileCLIP 논문

MobileCLIP GitHub 저장소




이 글은 GPT 모델로 정리한 것으로, 잘못된 부분이 있을 수 있으니 글 아래쪽의 원문도 함께 참고해주세요! 읽으시면서 어색하거나 잘못된 내용을 발견하시면 덧글로 알려주시기를 부탁드립니다. :hugs:

:fire:파이토치 한국 사용자 모임:kr:이 정리한 이 글이 유용하셨나요? 회원으로 가입하시면 주요 글들을 이메일:love_letter:로 보내드립니다! (기본은 Weekly지만 Daily로 변경도 가능합니다.)

:gift: 아래:arrow_lower_right:쪽에 좋아요:heart:를 눌러주시면 뉴스 발행에 힘이 됩니다~ :star_struck: