社群計算機視覺課程文件

多模態物件檢測(OWL-ViT)

Hugging Face's logo
加入 Hugging Face 社群

並獲得增強的文件體驗

開始使用

多模態物件檢測(OWL-ViT)

簡介

物件檢測是計算機視覺中的一項關鍵任務,隨著YOLO等模型(原始論文最新程式碼版本)的出現,取得了顯著進展。然而,YOLO等傳統模型在檢測其訓練資料集之外的物件時存在侷限性。為了解決這個問題,AI社群已轉向開發能夠識別更廣泛物件的模型,從而催生了類似於CLIP但用於物件檢測的模型。

OWL-ViT:增強和功能

OWL-ViT代表了開放詞彙物件檢測的飛躍。它從類似於CLIP的訓練階段開始,側重於使用對比損失的視覺和語言編碼器。這一基礎階段使模型能夠學習視覺和文字資料的共享表示空間。

物件檢測的微調

OWL-ViT 的創新之處在於其物件檢測的微調階段。在這裡,OWL-ViT 沒有使用 CLIP 中使用的 token pooling 和最終投影層,而是對每個輸出 token 進行線性投影以獲得每個物件的影像嵌入。然後,這些嵌入用於分類,而邊界框座標則透過一個小型 MLP 從 token 表示中匯出。這種方法使得 OWL-ViT 能夠檢測影像中的物件及其空間位置,這是對傳統物件檢測模型的重大進步。

以下是 OWL-ViT 的預訓練和微調階段圖示

OWL-ViT Pre-training and Fine-tuning

開放詞彙檢測

微調後,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 Example 此示例展示了 OWL-ViT 的簡單用例,其中我們指定了資料集中可能存在的物件,如“貓”,以及更抽象的物件,如“貓尾巴”(這在任何物件檢測資料集中很可能都不存在)。這展示了 OWL-ViT 在開放詞彙物件檢測中的強大功能。

請隨意使用此程式碼嘗試更復雜的示例或這個 Gradio 應用程式

總結

OWL-ViT 的物件檢測方法代表了 AI 模型理解和與視覺世界互動方式的顯著轉變。透過將語言理解與視覺感知相結合,它推動了物件檢測的邊界,從而能夠建立更準確、更多功能的模型,識別更廣泛的物件。模型能力的這種演變對於需要對視覺場景進行細緻理解的應用至關重要,尤其是在動態的真實世界環境中。

有關更多深入資訊和技術細節,請參閱 OWL-ViT 論文。您還可以在 Hugging Face 文件中找到有關 OWL-ViT 2 模型的資訊。

< > 在 GitHub 上更新

© . This site is unofficial and not affiliated with Hugging Face, Inc.