许可协议:apache-2.0
标签:
模型卡片:OWLv2
模型详情
OWLv2模型(全称开放世界定位)由Matthias Minderer、Alexey Gritsenko和Neil Houlsby在论文《扩展开放词汇目标检测》中提出。与OWL-ViT类似,OWLv2是一种零样本文本条件目标检测模型,可用于通过一个或多个文本查询来检索图像中的对象。
该模型采用CLIP作为多模态主干网络,其中视觉特征通过类似ViT的Transformer获取,文本特征则通过因果语言模型获取。为了将CLIP应用于检测任务,OWL-ViT移除了视觉模型的最终令牌池化层,并在每个Transformer输出令牌上附加了轻量级的分类和边界框预测头。通过用从文本模型获得的类别名称嵌入替换固定的分类层权重,实现了开放词汇分类。作者首先从头开始训练CLIP,并使用二分匹配损失在标准检测数据集上端到端微调分类和边界框头。可以通过每张图像的一个或多个文本查询执行零样本文本条件目标检测。
模型日期
2023年6月
模型类型
该模型采用CLIP主干网络,其中图像编码器使用ViT-B/16 Transformer架构,文本编码器使用掩码自注意力Transformer。这些编码器通过对比损失训练以最大化(图像,文本)对的相似性。CLIP主干网络从头开始训练,并与边界框和类别预测头一起通过目标检测目标进行微调。
文档
与Transformers一起使用
import requests
from PIL import Image
import numpy as np
import torch
from transformers import AutoProcessor, Owlv2ForObjectDetection
from transformers.utils.constants import OPENAI_CLIP_MEAN, OPENAI_CLIP_STD
processor = AutoProcessor.from_pretrained("google/owlv2-base-patch16")
model = Owlv2ForObjectDetection.from_pretrained("google/owlv2-base-patch16")
url = "http://images.cocodataset.org/val2017/000000039769.jpg"
image = Image.open(requests.get(url, stream=True).raw)
texts = [["一张猫的照片", "一张狗的照片"]]
inputs = processor(text=texts, images=image, return_tensors="pt")
with torch.no_grad():
outputs = model(**inputs)
def get_preprocessed_image(pixel_values):
pixel_values = pixel_values.squeeze().numpy()
unnormalized_image = (pixel_values * np.array(OPENAI_CLIP_STD)[:, None, None]) + np.array(OPENAI_CLIP_MEAN)[:, None, None]
unnormalized_image = (unnormalized_image * 255).astype(np.uint8)
unnormalized_image = np.moveaxis(unnormalized_image, 0, -1)
unnormalized_image = Image.fromarray(unnormalized_image)
return unnormalized_image
unnormalized_image = get_preprocessed_image(inputs.pixel_values)
target_sizes = torch.Tensor([unnormalized_image.size[::-1]])
results = processor.post_process_object_detection(
outputs=outputs, threshold=0.2, target_sizes=target_sizes
)
i = 0
text = texts[i]
boxes, scores, labels = results[i]["boxes"], results[i]["scores"], results[i]["labels"]
for box, score, label in zip(boxes, scores, labels):
box = [round(i, 2) for i in box.tolist()]
print(f"检测到 {text[label]},置信度 {round(score.item(), 3)},位置 {box}")
模型用途
预期用途
该模型旨在作为研究社区的研究成果。我们希望该模型能帮助研究人员更好地理解和探索零样本文本条件目标检测。我们也希望它能用于跨学科研究,尤其是那些通常需要在训练时无法获取标签的情况下识别对象的领域。
主要预期用途
这些模型的主要预期用户是AI研究人员。
我们主要设想该模型将被研究人员用于更好地理解计算机视觉模型的鲁棒性、泛化能力以及其他能力、偏见和限制。
数据
该模型的CLIP主干网络是在公开可用的图像-标题数据上训练的。这是通过爬取少量网站并结合使用常见的现有图像数据集(如YFCC100M)完成的。大部分数据来自我们对互联网的爬取。这意味着数据更能代表与互联网联系最紧密的人群和社会。OWL-ViT的预测头与CLIP主干网络一起在公开可用的目标检测数据集(如COCO和OpenImages)上进行了微调。
(v2版本待更新)
BibTeX条目和引用信息
@misc{minderer2023scaling,
title={扩展开放词汇目标检测},
author={Matthias Minderer and Alexey Gritsenko and Neil Houlsby},
year={2023},
eprint={2306.09683},
archivePrefix={arXiv},
primaryClass={cs.CV}
}