owlv2-large-patch14项目介绍
项目背景
owlv2-large-patch14是一个旨在增强开放词汇对象检测能力的项目。这一模型是在Matthias Minderer、Alexey Gritsenko和Neil Houlsby的论文Scaling Open-Vocabulary Object Detection中首次提出。它可以在没有经过专门标注的情况下,通过文本查询直接检测图像中的对象。这使得模型在不同场景下具有广泛的应用潜力,因为无需为每个可能的对象类别准备数据。
模型详情
OWLv2模型全名为Open-World Localization V2,采用了类似于OWL-ViT的架构。该模型基于CLIP作为多模态主干,结合ViT样式的Transformer来获取视觉特征,同时使用因果语言模型来获取文本特征。图像编码器和文本编码器经过训练,以对齐(图像,文本)对之间的相似性。
为了实现开放词汇分类,OWLv2去除了视觉模型中的最终池化层,将轻量级的分类和框头附加到每个Transformer输出的token上。文本模型生成的类别名称嵌入取代了固定分类层的权重,从而实现了开放词汇的分类。
模型类型及架构
OWLv2采用CLIP作为其主干,利用ViT-L/14 Transformer架构作为图像编码器,并采用了掩码自注意力Transformer作为文本编码器。这些编码器通过对比损失来最大化(图像,文本)对的相似性。与此同时,CLIP主干从零开始训练,再通过对象检测目标与框和类别预测头进行微调。
使用方法
下面是一个使用Transformers库来处理对象检测的代码示例。
import requests
from PIL import Image
import torch
from transformers import Owlv2Processor, Owlv2ForObjectDetection
processor = Owlv2Processor.from_pretrained("google/owlv2-large-patch14")
model = Owlv2ForObjectDetection.from_pretrained("google/owlv2-large-patch14")
url = "http://images.cocodataset.org/val2017/000000039769.jpg"
image = Image.open(requests.get(url, stream=True).raw)
texts = [["a photo of a cat", "a photo of a dog"]]
inputs = processor(text=texts, images=image, return_tensors="pt")
with torch.no_grad():
outputs = model(**inputs)
target_sizes = torch.Tensor([image.size[::-1]])
results = processor.post_process_object_detection(outputs=outputs, target_sizes=target_sizes, threshold=0.1)
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"Detected {text[label]} with confidence {round(score.item(), 3)} at location {box}")
使用目的
OWLv2主要作为一个研究输出,面向研究社群。希望该模型能帮助研究人员更好地理解和探索零样本、文本条件对象检测的可能性。此外,OWLv2在跨学科研究中也展现出潜力,尤其是在需要识别训练中未标注标签对象的领域。
数据来源
OWLv2模型的CLIP主干训练使用了公开的图像描述数据。这些数据主要通过抓取少量网站并采用现有的常用图像数据集(如YFCC100M)获得。同时,OWL-ViT的预测头部以及CLIP主干在公开的对象检测数据集(如COCO和OpenImages)上进行了微调。
通过这些方法,模型有效地代表了互联网上较常见的文化和社会背景。