🚀 DETR(端到端目標檢測)模型,採用ResNet - 101骨幹網絡
DETR(Detection Transformer)模型在COCO 2017目標檢測數據集(11.8萬張帶註釋圖像)上進行了端到端訓練。該模型由Carion等人在論文End-to-End Object Detection with Transformers中提出,並首次在此倉庫中發佈。
聲明:發佈DETR的團隊並未為此模型撰寫模型卡片,此模型卡片由Hugging Face團隊撰寫。
🚀 快速開始
你可以使用該原始模型進行目標檢測。查看模型中心以查找所有可用的DETR模型。
✨ 主要特性
- 端到端架構:DETR模型是一個帶有卷積骨幹網絡的編碼器 - 解碼器Transformer。在解碼器輸出之上添加了兩個頭部,用於執行目標檢測:一個用於類別標籤的線性層和一個用於邊界框的多層感知器(MLP)。
- 對象查詢機制:模型使用所謂的對象查詢來檢測圖像中的對象。每個對象查詢在圖像中尋找特定的對象。對於COCO數據集,對象查詢的數量設置為100。
- 二分匹配損失:模型使用“二分匹配損失”進行訓練,通過匈牙利匹配算法在每個查詢和每個註釋之間創建最佳的一對一映射,然後使用標準交叉熵(用於類別)和L1與廣義IoU損失的線性組合(用於邊界框)來優化模型參數。
📦 安裝指南
使用該模型前,你需要安裝相關依賴庫,以下是使用示例代碼所需的依賴:
pip install transformers torch pillow requests
💻 使用示例
基礎用法
from transformers import DetrImageProcessor, DetrForObjectDetection
import torch
from PIL import Image
import requests
url = "http://images.cocodataset.org/val2017/000000039769.jpg"
image = Image.open(requests.get(url, stream=True).raw)
processor = DetrImageProcessor.from_pretrained("facebook/detr-resnet-101", revision="no_timm")
model = DetrForObjectDetection.from_pretrained("facebook/detr-resnet-101", revision="no_timm")
inputs = processor(images=image, return_tensors="pt")
outputs = model(**inputs)
target_sizes = torch.tensor([image.size[::-1]])
results = processor.post_process_object_detection(outputs, target_sizes=target_sizes, threshold=0.9)[0]
for score, label, box in zip(results["scores"], results["labels"], results["boxes"]):
box = [round(i, 2) for i in box.tolist()]
print(
f"Detected {model.config.id2label[label.item()]} with confidence "
f"{round(score.item(), 3)} at location {box}"
)
此代碼的輸出示例如下:
Detected cat with confidence 0.998 at location [344.06, 24.85, 640.34, 373.74]
Detected remote with confidence 0.997 at location [328.13, 75.93, 372.81, 187.66]
Detected remote with confidence 0.997 at location [39.34, 70.13, 175.56, 118.78]
Detected cat with confidence 0.998 at location [15.36, 51.75, 316.89, 471.16]
Detected couch with confidence 0.995 at location [-0.19, 0.71, 639.73, 474.17]
📚 詳細文檔
模型描述
DETR模型是一個帶有卷積骨幹網絡的編碼器 - 解碼器Transformer。在解碼器輸出之上添加了兩個頭部,用於執行目標檢測:一個用於類別標籤的線性層和一個用於邊界框的多層感知器(MLP)。模型使用所謂的對象查詢來檢測圖像中的對象。每個對象查詢在圖像中尋找特定的對象。對於COCO數據集,對象查詢的數量設置為100。
模型使用“二分匹配損失”進行訓練:將N = 100個對象查詢的預測類別和邊界框與真實註釋進行比較,真實註釋會填充到相同的長度N(因此,如果圖像僅包含4個對象,則96個註釋的類別將為“無對象”,邊界框為“無邊界框”)。使用匈牙利匹配算法在每個N個查詢和每個N個註釋之間創建最佳的一對一映射。接下來,使用標準交叉熵(用於類別)和L1與廣義IoU損失的線性組合(用於邊界框)來優化模型的參數。

預期用途和限制
你可以使用該原始模型進行目標檢測。查看模型中心以查找所有可用的DETR模型。
🔧 技術細節
訓練數據
DETR模型在COCO 2017目標檢測數據集上進行訓練,該數據集分別包含11.8萬張和5000張用於訓練和驗證的帶註釋圖像。
訓練過程
預處理
訓練/驗證期間圖像預處理的具體細節可在此處找到。
圖像會進行調整大小和縮放,使得最短邊至少為800像素,最長邊最多為1333像素,並在RGB通道上使用ImageNet的均值(0.485, 0.456, 0.406)和標準差(0.229, 0.224, 0.225)進行歸一化。
訓練
該模型在16個V100 GPU上訓練了300個epoch,耗時3天,每個GPU處理4張圖像(因此總批量大小為64)。
評估結果
該模型在COCO 2017驗證集上的平均精度(AP)達到了43.5。有關評估結果的更多詳細信息,請參考原論文的表1。
BibTeX引用和引用信息
@article{DBLP:journals/corr/abs-2005-12872,
author = {Nicolas Carion and
Francisco Massa and
Gabriel Synnaeve and
Nicolas Usunier and
Alexander Kirillov and
Sergey Zagoruyko},
title = {End-to-End Object Detection with Transformers},
journal = {CoRR},
volume = {abs/2005.12872},
year = {2020},
url = {https://arxiv.org/abs/2005.12872},
archivePrefix = {arXiv},
eprint = {2005.12872},
timestamp = {Thu, 28 May 2020 17:38:09 +0200},
biburl = {https://dblp.org/rec/journals/corr/abs-2005-12872.bib},
bibsource = {dblp computer science bibliography, https://dblp.org}
}
📄 許可證
本項目採用Apache - 2.0許可證。
📋 模型信息表格
屬性 |
詳情 |
模型類型 |
端到端目標檢測模型,基於Transformer架構,採用ResNet - 101骨幹網絡 |
訓練數據 |
COCO 2017目標檢測數據集,包含11.8萬張訓練圖像和5000張驗證圖像 |