Kakao Brain ViT 및 ALIGN 모델, COYO 700M 데이터셋과 함께 공개

TL;DR

Kakao Brain과 Hugging Face가 새로운 700 M 이미지‑텍스트 COYO 데이터셋으로 학습된 두 개의 시각‑언어 모델—ViT와 ALIGN—을 오픈소스로 공개했습니다. 이는 공개된 최초의 ALIGN 모델이자, 공개 학습 코퍼스와 함께 제공되는 최초의 ViT/ALIGN 모델입니다.


공개된 내용

  • COYO 데이터셋 – 웹에서 수집한 700 M 이미지‑텍스트 쌍으로, 오픈소스 라이선스로 제공됩니다.
  • ViT 모델 – Google의 ViT 아키텍처와 하이퍼파라미터를 그대로 따르는 Vision Transformer이며, COYO‑Labeled‑300M 서브셋으로 학습되었습니다.
  • ALIGN 모델 – Google의 ALIGN 아키텍처와 동일한 듀얼‑인코더 이미지‑텍스트 모델이며, 전체 COYO 데이터셋으로 학습되었습니다.
  • 데모 스페이스 및 파이프라인 – Hugging Face Hub에 인터랙티브 데모가 제공되며, transformers 파이프라인을 통해 분류 및 제로샷 작업을 바로 사용할 수 있습니다.

성능 비교

  • ALIGN‑B7‑Base는 700 M 쌍으로 학습했을 때 Image KNN 분류에서 Google의 ALIGN‑B7‑Base와 동등한 성능을 보이며, MS‑COCO 이미지‑텍스트 및 텍스트‑이미지 검색에서는 이를 능가합니다.
  • ViT‑L/16은 384 px 및 512 px 해상도에서 ImageNet 및 ImageNet‑ReaL 정확도가 Google의 ViT‑L/16과 비슷합니다.
  • 이러한 결과는 오픈소스 모델도 제한된 규모의 공개 데이터만으로 최첨단 성능에 도달할 수 있음을 보여줍니다.

COYO 데이터셋 상세

  • 규모: 700 M 영어 이미지‑텍스트 쌍(필터링 후 ≈747 M).
  • 출처: 2020년 10월부터 2021년 8월까지 크롤링한 웹페이지(Common Crawl).
  • 메타데이터: CLIP 유사도 점수(ViT‑B/32 및 ViT‑L/14), NSFW 점수, 워터마크 점수, 미학 점수, 얼굴 수 데이터 포함.
  • LAION‑2B와의 차이:
    Feature COYO LAION‑2B
    Size 700 M 2 B
    Similarity score CLIP‑B/32 & L/14, no filtering CLIP‑B/32, threshold 0.28
    NSFW filtering 이미지와 텍스트 모두 이미지만
    Face count 제공 제공되지 않음
    Watermark score 정교한 메트릭 기본 점수
    Availability Hugging Face Hub Hugging Face Hub

ViT 작동 방식

  • ViT는 이미지를 고정 크기의 패치로 나눈 뒤 각 패치를 임베딩하고, 위치 임베딩을 추가한 뒤 표준 Transformer 인코더에 입력합니다.
  • 이 설계는 유사한 CNN에 비해 최대 4배까지 연산 효율성을 높이며, 도메인에 구애받지 않는 특성을 유지합니다.
  • Kakao Brain의 ViT 모델은 Google ViT와 동일한 아키텍처를 사용하지만, 공개된 COYO‑Labeled‑300M 서브셋으로 학습되어 완전한 재현성을 제공합니다.

ALIGN 작동 방식

  • ALIGN은 듀얼‑인코더 구조를 사용합니다: 이미지용 비전 인코더와 캡션용 텍스트 인코더가 각각 존재하며, 노이즈가 섞인 alt‑text 쌍에 대해 대비 손실(contrastive loss)로 학습됩니다.
  • 원래 1.8 B 쌍이던 대규모 노이즈 데이터 코퍼스 덕분에 ALIGN은 교차‑모달 검색 및 제로샷 분류에서 뛰어난 성능을 발휘합니다.
  • Kakao Brain의 ALIGN 모델은 이 아키텍처의 최초 오픈소스 구현이며, 700 M COYO 쌍으로 학습되어 Google이 보고한 수치를 만족하거나 능가합니다.

COYO 데이터셋 사용 예시

from datasets import load_dataset
# 전체 데이터셋 로드 (용량이 큼)
full = load_dataset('kakaobrain/coyo-700m')
# 전체를 다운로드하지 않도록 스트리밍 서브셋 로드
stream = load_dataset('kakaobrain/coyo-700m', streaming=True)
print(next(iter(stream['train'])))

스트리밍 예시는 url, text, width, height, clip_similarity_vitb32, nsfw_score_opennsfw2, watermark_score, aesthetic_score_laion_v2와 같은 필드를 보여줍니다.

ViT 빠른 시작

import requests, torch
from PIL import Image
from transformers import ViTImageProcessor, ViTForImageClassification

url = 'http://images.cocodataset.org/val2017/000000039769.jpg'
image = Image.open(requests.get(url, stream=True).raw)
processor = ViTImageProcessor.from_pretrained('kakaobrain/vit-large-patch16-384')
model = ViTForImageClassification.from_pretrained('kakaobrain/vit-large-patch16-384')

inputs = processor(images=image, return_tensors='pt')
with torch.no_grad():
    logits = model(**inputs).logits
probs = torch.nn.functional.softmax(logits, dim=-1)
top5 = torch.argsort(probs, descending=True)[0, :5]
for idx in top5:
    print(f"{model.config.id2label[idx.item()]}: {probs[0, idx].item():.4f}")

또는 고수준 파이프라인 사용:

from transformers import pipeline
classifier = pipeline('image-classification', model='kakaobrain/vit-large-patch16-384')
print(classifier('http://images.cocodataset.org/val2017/000000039769.jpg', top_k=5))

ALIGN 빠른 시작

from transformers import AlignProcessor, AlignModel
import requests, torch
from PIL import Image

url = 'http://images.cocodataset.org/val2017/000000039769.jpg'
image = Image.open(requests.get(url, stream=True).raw)
processor = AlignProcessor.from_pretrained('kakaobrain/align-base')
model = AlignModel.from_pretrained('kakaobrain/align-base')

candidate_labels = ['an image of a cat', 'an image of a dog']
inputs = processor(images=image, text=candidate_labels, return_tensors='pt')
with torch.no_grad():
    logits = model(**inputs).logits_per_image
probs = logits.softmax(dim=1)
print(probs)

파이프라인을 통한 제로샷 분류 예시:

from transformers import pipeline
classifier = pipeline('zero-shot-image-classification', model='kakaobrain/align-base')
print(classifier('https://huggingface.co/datasets/Narsil/image_dummy/raw/main/parrots.png',
                candidate_labels=['animals', 'humans', 'landscape']))

이 모델은 get_image_featuresget_text_features도 제공하여 임베딩 기반 downstream 작업에 활용할 수 있습니다.

연구 커뮤니티에 미치는 영향

  • 재현성: 모델과 정확히 동일한 학습 데이터를 공개함으로써 연구자들이 Google 규모의 ViT 및 ALIGN 실험을 그대로 재현할 수 있습니다.
  • 접근성: 오픈소스 ALIGN 모델은 수십억 쌍의 독점 데이터에 접근할 수 없는 연구실에도 큰 장벽을 제거합니다.
  • 벤치마킹: COYO가 제공하는 풍부한 메타데이터(미학, 워터마크, 얼굴 수 등)를 활용해 필터링된 서브셋에 대한 세밀한 모델 행동 분석이 가능해집니다.
  • 향후 과제: 커뮤니티는 COYO를 확장하거나 LAION 등 다른 데이터셋과 결합하고, 공개 모델을 도메인 특화에 맞게 파인튜닝하면서도 완전한 투명성을 유지할 수 있습니다.

모든 코드 스니펫은 최신 버전의 transformers(또는 ALIGN의 경우 개발 브랜치)와 datasets 라이브러리가 설치된 환경(pip install datasets)을 전제로 합니다.

Sources