多模态目标检测 (OWL-ViT)
简介
目标检测是计算机视觉中的一个关键任务,YOLO 等模型在该领域取得了重大进展(原始论文,最新代码版本)。但是,像 YOLO 这样的传统模型在检测其训练数据集之外的对象方面存在局限性。为了解决这个问题,AI 社区已经转向开发能够识别更广泛范围对象的模型,这导致了类似于 CLIP 但用于目标检测的模型的创建。
OWL-ViT:增强功能和能力
OWL-ViT 代表了开放词汇目标检测领域的一项重大突破。它从类似于 CLIP 的训练阶段开始,专注于使用对比损失的视觉和语言编码器。这个基础阶段使模型能够学习视觉和文本数据的共享表示空间。
用于目标检测的微调
OWL-ViT 的创新之处在于其用于目标检测的微调阶段。在这里,OWL-VIT 采用每个输出 token 的线性投影来获取每个对象的图像嵌入,而不是 CLIP 中使用的 token 池化和最终投影层。这些嵌入随后用于分类,而边界框坐标则是通过一个小型的 MLP 从 token 表示中推导出来的。这种方法使 OWL-ViT 能够检测图像中的对象及其空间位置,这比传统目标检测模型有了显著的进步。
以下是 OWL-ViT 的预训练和微调阶段的示意图
开放词汇检测
微调后,OWL-ViT 在开放词汇目标检测方面表现出色。它可以识别训练数据集中未明确存在的对象,这得益于视觉和文本编码器的共享嵌入空间。这种能力使得可以使用图像和文本查询来进行目标检测,从而增强了其通用性。
示例用例
在实际应用中,通常使用文本作为查询,图像作为上下文。提供的 Python 示例演示了如何使用 transformers 库进行 OWL-ViT 推理。
import requests
from PIL import Image, ImageDraw
import torch
from transformers import OwlViTProcessor, OwlViTForObjectDetection
processor = OwlViTProcessor.from_pretrained("google/owlvit-base-patch32")
model = OwlViTForObjectDetection.from_pretrained("google/owlvit-base-patch32")
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", "remote control", "cat tail"]]
inputs = processor(text=texts, images=image, return_tensors="pt")
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 # Retrieve predictions for the first image for the corresponding text queries
text = texts[i]
boxes, scores, labels = results[i]["boxes"], results[i]["scores"], results[i]["labels"]
# Create a draw object
draw = ImageDraw.Draw(image)
# Draw each bounding box
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}"
)
# Draw the bounding box on the image
draw.rectangle(box, outline="red")
# Display the image
image
图像应如下所示: 此示例展示了 OWL-ViT 的一个简单用例,我们指定了数据集中可能存在的对象,如猫,以及可能不在任何目标检测数据集中存在的更抽象的对象,如猫尾巴。这表明 OWL-ViT 在开放词汇目标检测方面的强大功能。
您可以随意使用代码尝试更复杂的示例,或者使用此 Gradio 应用程序
结论
OWL-ViT 对目标检测的这种方法代表了 AI 模型理解和与视觉世界交互方式的显著转变。通过将语言理解与视觉感知相结合,它突破了目标检测的界限,能够创建更准确、更通用的模型,能够识别更广泛的对象。这种模型能力的演变对于需要对视觉场景进行细致理解的应用至关重要,特别是在动态的现实世界环境中。
有关更深入的信息和技术细节,请参阅 OWL-VIT 论文。您也可以在 Hugging Face 文档中找到有关 OWL-ViT 2 模型 的信息。
< > 更新 在 GitHub 上