Kakao Brain ViT と ALIGN モデル、COYO 700M データセットでリリース

TL;DR

Kakao Brain と Hugging Face は、最新の 700 M 画像‑テキスト COYO データセットで学習した 2 つのビジュアル‑言語モデル(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 の解像度で、Google の ViT‑L/16 と同等の ImageNet および ImageNet‑ReaL 精度を達成します。
  • これらの結果は、オープンソースモデルでも、プロプライエタリデータのごく一部で最先端性能に到達できることを示しています。

COYO データセットの詳細

  • 規模: 700 M の英語画像‑テキストペア(フィルタリング後約 747 M)。
  • 取得元: 2020 年 10 月〜2021 年 8 月にクロールされたウェブページ(Common Crawl)。
  • メタデータ: CLIP 類似度スコア(ViT‑B/32 と ViT‑L/14)、NSFW スコア、透かしスコア、美的スコア、顔数データを含む。
  • LAION‑2B との違い:
    項目 COYO LAION‑2B
    サイズ 700 M 2 B
    類似度スコア CLIP‑B/32 & L/14、フィルタリングなし CLIP‑B/32、閾値 0.28
    NSFW フィルタリング 画像とテキストの両方 画像のみ
    顔数 提供あり 提供なし
    透かしスコア 高度な指標 基本的なスコア
    配布先 Hugging Face Hub Hugging Face Hub

ViT の仕組み

  • ViT は画像を固定サイズのパッチに分割し、各パッチを埋め込み、位置埋め込みを加えて、標準的な Transformer エンコーダでシーケンスを処理します。
  • この設計により、同等の CNN と比較して最大 4 倍の計算効率が得られ、かつドメインに依存しません。
  • Kakao Brain の ViT モデルは Google の ViT と同一アーキテクチャですが、公開された COYO‑Labeled‑300M サブセットで学習されているため、完全に再現可能です。

ALIGN の仕組み

  • ALIGN はデュアルエンコーダを採用:画像用ビジョンエンコーダとキャプション用テキストエンコーダ。ノイズの多い alt‑text ペアに対しコントラスト損失で学習します。
  • 元々 1.8 B ペアの大規模ノイズデータコーパスにより、クロスモーダル検索とゼロショット分類で卓越した性能を発揮します。
  • 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'])))

ストリーミングされた例には、urltextwidthheightclip_similarity_vitb32nsfw_score_opennsfw2watermark_scoreaesthetic_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 も提供しており、下流の埋め込みベースタスクに利用できます。

研究コミュニティへの影響

  • 再現性: 研究者は Google スケールの ViT と ALIGN の実験を、モデルと正確な学習データが公開されているため再現可能になります。
  • アクセシビリティ: オープンソースの ALIGN モデルにより、プロプライエタリな数十億ペアのデータセットにアクセスできないラボでも大規模マルチモーダル学習が可能になります。
  • ベンチマーク: COYO には美的評価、透かし、顔数といったリッチなメタデータが含まれるため、フィルタリングされたサブセット上でのモデル挙動を細かく分析できるようになります。
  • 今後の展開: コミュニティは COYO を拡張したり、他のデータセット(例: LAION)と組み合わせたり、公開モデルを特定ドメイン向けにファインチューニングしたりしながら、完全な透明性を保てます。

すべてのコードスニペットは、transformers(または ALIGN 用の開発ブランチ)と datasets ライブラリが pip install datasets でインストールされていることを前提としています。

Sources