零样本目标检测 | 基于OWL-ViT和Hugging Face | 附源码

点击下方卡片,关注“小白玩转Python”公众号

ca320cc1b26160bb717c4f463e4476d1.png

想象一下,能够在图像中检测到完全新类别的对象,而不必对这些特定对象进行模型训练。这就是零样本目标检测的魔力!这种强大的技术允许你使用预训练模型,根据简单的文本描述在图像中检测对象。

在这篇博客中,我们将探讨OWL-ViT(开放世界定位的视觉变换器)和Hugging Face如何结合在一起,使零样本目标检测变得易于访问和高效。所以系好安全带,让我们一起深入到无需大量标记训练数据就能识别图像中对象的世界!

什么是零样本目标检测?传统上,目标检测模型需要大量的标记数据——想象一下,有无数的汽车和飞机图像来训练模型在图像中找到它们。零样本检测打破了这一模式。在这里,模型在训练期间学习文本和图像之间的关系。所以你不需要预先标记的汽车图像,你只需提供文本描述,如“四轮车”,模型就可以使用其对语言的理解来在未见过的图像中检测汽车。这种方法对于标记数据可能稀缺的稀有或小众对象特别有用。

OWL-ViT和Hugging Face:强大的组合零样本目标检测这一令人印象深刻的壮举是由两个关键参与者实现的:OWL-ViT和Hugging Face。

  • OWL-ViT(开放世界定位的视觉变换器):在大量图像和文本对的数据集上预训练,OWL-ViT学会弥合语言和视觉之间的差距。OWL-ViT不需要预先标记的对象边界框,而是理解文本描述。只需提供如“红色跑车”的描述,OWL-ViT就能在未见过的图像中识别出该对象!这使得它成为识别稀有对象或完全新类别的强大工具,无需大量训练数据。

  • Hugging Face:这个开源平台提供了一个易于使用的环境,用于访问和使用像OWL-ViT这样的预训练模型。Hugging Face提供的工具和库使得将OWL-ViT整合到你的项目中变得容易,允许你执行零样本图像分类任务,只需最少的编码工作。

通过结合OWL-ViT预训练的知识库和Hugging Face的易用性,你可以为各种应用解锁零样本目标检测的潜力。请继续关注,我们将探讨如何将这个强大的组合付诸实践!

如何使用OWL-ViT进行零样本目标检测

让我们将理论付诸实践!我们已经探索了零样本目标检测的激动人心的世界,模型可以识别未见过的类别。但我们实际上怎么做呢?这就是Hugging Face Transformers库的用武之地。这个开源库为使用最先进的深度学习模型,特别是变换器,提供了一个易于使用且功能强大的工具包。有了Transformers,我们可以使用针对零样本目标检测微调的预训练模型,使整个过程比从头开始构建更加容易和快速。

步骤1:安装库

pip install transformers numpy torch opencv-python

步骤2:导入库

from transformers import OwlViTProcessor, OwlViTForObjectDetection
from PIL import Image
import cv2
import numpy as np
import torch

步骤3:加载你的OWL-ViT模型

processor = OwlViTProcessor.from_pretrained("google/owlvit-base-patch32")
detector = OwlViTForObjectDetection.from_pretrained("google/owlvit-base-patch32")This process may take a while as the model is very large and it takes time to download.

步骤4:读取图像

path = r"YourImagePath"
image = Image.open(path)

注意:它不接受numpy数组作为输入,所以如果你想使用这个模型,你不能使用opencv读取图像

步骤5:进行预测并选择你要分类的类别

classes = ["Here are your classes"]
inputs = processor(text=classes, images=image, return_tensors="pt")
outputs = detector(**inputs)


target_sizes = torch.Tensor([image.size[::-1]])


predictions = processor.post_process_object_detection(outputs=outputs, target_sizes=target_sizes, threshold=0.1)

步骤6:获取分数和边界框并绘制它们

image = np.array(image) # convert it to numpy array


image = cv2.cvtColor(image, cv2.COLOR_BGR2RGB) # change from BGR to RGB


boxes, scores, labels = predictions[0]["boxes"], predictions[0]["scores"], predictions[0]["labels"]
for box, score, label in zip(boxes, scores, labels):
    cv2.rectangle(image, (int(box[0]), int(box[1])),
                          (int(box[2]), int(box[3])), (255, 0, 0), 2)
    cv2.putText(image, f"{texts[label]}",
                (int(box[0]), int(box[1]) - 10),
                cv2.FONT_HERSHEY_PLAIN, 1, (255, 0, 0), 1)

结论

在这个教程中,我们学习了如何使用OWL-ViT进行零样本目标检测。如果你发现这段代码有帮助,请鼓掌并评论这篇文章!我也很高兴你关注我,了解更多关于数据科学和其他相关主题的内容。感谢阅读!

参考文献OWL-ViT的论文:https://arxiv.org/pdf/2205.06230.pdf

OWL-ViT的源码:

https://github.com/google-research/scenic/tree/main/scenic/projects/owl_vit

·  END  ·

🌟 想要变身计算机视觉小能手?快来「小白玩转Python」公众号!

回复Python视觉实战项目,解锁31个超有趣的视觉项目大礼包!🎁

d96611689db09f43cea2c0040bde3bc0.png

本文仅供学习交流使用,如有侵权请联系作者删除

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值