ALIGN(基础模型)
ALIGN模型由Chao Jia、Yinfei Yang、Ye Xia、Yi-Ting Chen、Zarana Parekh、Hieu Pham、Quoc V. Le、Yunhsuan Sung、Zhen Li和Tom Duerig在论文《通过噪声文本监督扩展视觉与视觉-语言表征学习规模》中提出。ALIGN采用双编码器架构,以EfficientNet作为视觉编码器,BERT作为文本编码器,通过对比学习实现视觉与文本表征的对齐。与先前工作不同,ALIGN利用海量噪声数据集,证明通过简单方法即可利用语料规模实现最先进的表征效果。
ALIGN的代码未公开,基础模型由Kakao Brain团队根据原始实现转换而来。该实现遵循原Google模型架构与超参数,但基于开源COYO数据集训练。Google的ALIGN模型虽在18亿图文对数据集上训练,但因数据未公开而无法复现。Kakao Brain的ALIGN在更小但精心筛选的COYO-700M数据集上训练,性能却与原版持平或更优。
COYO-700M数据集
COYO是包含7亿图文对的数据集,类似于Google从网页中收集的带"噪声"替代文本与图像对的ALIGN 1.8B
数据集,但完全开源。COYO-700M
和ALIGN 1.8B
因仅经过最小化过滤而被视为"噪声"数据。COYO与其他开源图文数据集(如LAION
)的区别在于:虽然LAION
2B规模更大(20亿英文对),但COYO
提供更丰富的元数据,赋予用户更高灵活性和细粒度控制权。下表展示关键差异:COYO为所有配对提供美学评分、更可靠的水印分数及人脸计数数据。
COYO |
LAION 2B |
ALIGN 1.8B |
使用CLIP ViT-B/32和ViT-L/14模型计算图文相似度分数作为元数据,但未过滤以避免消除偏差 |
仅提供CLIP(ViT-B/32)相似度分数,保留阈值>0.28的样本 |
仅基于频率的简单过滤 |
对图像和文本进行NSFW过滤 |
仅对图像NSFW过滤 |
Google Cloud API |
提供人脸计数元数据 |
无人脸识别数据 |
无 |
7亿英文对 |
20亿英文对 |
18亿 |
数据来自2020年10月-2021年8月CC协议内容 |
来自2014-2020年CC内容 |
无公开信息 |
完整美学评分 |
部分美学评分 |
无 |
更健壮的水印分数 |
水印分数 |
无 |
托管于Hugging Face Hub |
托管于Hugging Face Hub |
未公开 |
英文 |
英文 |
疑似英文 |
COYO数据集可通过此链接获取。
Transformers使用指南
零样本图像分类
import requests
import torch
from PIL import Image
from transformers import AlignProcessor, AlignModel
processor = AlignProcessor.from_pretrained("kakaobrain/align-base")
model = AlignModel.from_pretrained("kakaobrain/align-base")
url = "http://images.cocodataset.org/val2017/000000039769.jpg"
image = Image.open(requests.get(url, stream=True).raw)
candidate_labels = ["猫的图像", "狗的图像"]
inputs = processor(text=candidate_labels, images=image, return_tensors="pt")
with torch.no_grad():
outputs = model(**inputs)
# 获取图像-文本相似度分数
logits_per_image = outputs.logits_per_image
# 通过softmax得到标签概率
probs = logits_per_image.softmax(dim=1)
print(probs)
多模态嵌入检索
import requests
import torch
from PIL import Image
from transformers import AlignProcessor, AlignModel
processor = AlignProcessor.from_pretrained("kakaobrain/align-base")
model = AlignModel.from_pretrained("kakaobrain/align-base")
url = "http://images.cocodataset.org/val2017/000000039769.jpg"
image = Image.open(requests.get(url, stream=True).raw)
text = "猫的图像"
inputs = processor(text=text, images=image, return_tensors="pt")
with torch.no_grad():
outputs = model(**inputs)
# 多模态文本嵌入
text_embeds = outputs.text_embeds
# 多模态图像嵌入
image_embeds = outputs.image_embeds
也可单独检索图像或文本嵌入:
import requests
import torch
from PIL import Image
from transformers import AlignProcessor, AlignModel
processor = AlignProcessor.from_pretrained("kakaobrain/align-base")
model = AlignModel.from_pretrained("kakaobrain/align-base")
# 图像嵌入
url = "http://images.cocodataset.org/val2017/000000039769.jpg"
image = Image.open(requests.get(url, stream=True).raw)
inputs = processor(images=image, return_tensors="pt")
image_embeds = model.get_image_features(
pixel_values=inputs['pixel_values'],
)
# 文本嵌入
text = "猫的图像"
inputs = processor(text=text, return_tensors="pt")
text_embeds = model.get_text_features(
input_ids=inputs['input_ids'],
attention_mask=inputs['attention_mask'],
token_type_ids=inputs['token_type_ids'],
)
模型用途
预期用途
本模型主要作为研究产出供学术社区使用。我们希望该模型能帮助研究者更好地理解和探索零样本任意图像分类任务,并促进跨学科研究此类模型的潜在影响——ALIGN论文中包含关于下游影响的讨论,为此类分析提供了范例。
主要目标用户
这些模型的主要目标用户是AI研究人员。
我们预计模型将主要用于研究计算机视觉模型的鲁棒性、泛化能力及其他特性,以及偏差和约束条件。