1.什么是 DETR?
DETR(DEtection TRansformer) 是 Facebook AI(FAIR)于 2020 年提出的 端到端目標檢測算法,它基于 Transformer 架構,消除了 Faster R-CNN、YOLO 等方法中的 候選框(Anchor Boxes) 和 非極大值抑制(NMS) 機制,使目標檢測變得更簡單、高效。
論文:End-to-End Object Detection with Transformers
2.DETR 的核心特點
- 基于 Transformer 進行目標檢測,擺脫了 CNN 傳統的 Anchor 機制
- 端到端訓練,無需像 Faster R-CNN 額外使用 RPN 進行候選框生成
- 全局注意力機制(Self-Attention),可以建模遠距離依賴關系,提高檢測精度
- 自動去重,不需要 NMS 后處理步驟
- 適用于復雜場景,如密集目標檢測
3.DETR 的工作流程
DETR 由 三部分 組成:
- CNN 提取圖像特征(ResNet-50 / ResNet-101)
- Transformer 進行目標檢測(編碼器 + 解碼器)
- 最終預測目標類別和邊界框(分類 + 位置回歸)
?DETR 結構示意圖
輸入圖片 -> CNN 提取特征 -> Transformer 處理特征 -> 預測目標類別 + 邊界框
4.DETR 代碼示例
使用 PyTorch 進行 DETR 目標檢測
import torch
import torchvision.transforms as T
from PIL import Image
import requests# 載入 DETR 預訓練模型
detr = torch.hub.load('facebookresearch/detr', 'detr_resnet50', pretrained=True, trust_repo=True)
detr.eval()# 加載圖片并進行預處理
image_path = r"D:\Pictures\test.jpeg"
image = Image.open(image_path)transform = T.Compose([T.Resize(800), T.ToTensor()])
img_tensor = transform(image).unsqueeze(0)# 進行目標檢測
with torch.no_grad():outputs = detr(img_tensor)# 輸出檢測結果
print(outputs)
運行結果?
{'pred_logits': tensor([[[-17.4480, -1.4711, -6.0746, ..., -10.0646, -7.2832, 11.1362],[-17.7877, -1.7454, -5.9165, ..., -11.6356, -8.4581, 10.7261],[-18.3903, -1.3194, -7.6447, ..., -11.3595, -6.6635, 11.2573],...,[-18.0295, -1.6913, -6.6354, ..., -11.4836, -7.7729, 10.9814],[-14.4323, 1.3790, -4.2558, ..., -11.5297, -7.8083, 8.1644],[-17.6349, -1.6041, -6.4100, ..., -11.2120, -7.4216, 10.7064]]]), 'pred_boxes': tensor([[[0.4990, 0.5690, 0.4764, 0.7080],[0.5039, 0.5219, 0.4657, 0.6124],[0.3920, 0.5463, 0.2963, 0.6085],[0.5231, 0.5180, 0.4489, 0.6110],[0.4986, 0.5346, 0.4989, 0.5883],[0.5145, 0.5258, 0.5162, 0.6123],[0.4251, 0.5273, 0.3235, 0.5911],[0.4012, 0.5339, 0.2816, 0.5804],[0.4025, 0.5263, 0.2526, 0.5638],[0.5153, 0.5249, 0.4807, 0.6065],[0.6775, 0.8235, 0.0436, 0.0436],[0.4380, 0.5365, 0.3368, 0.5919],[0.5044, 0.5242, 0.4791, 0.6314],[0.7352, 0.8131, 0.0248, 0.0464],[0.4567, 0.8361, 0.0448, 0.0530],[0.4981, 0.5287, 0.4715, 0.6199],[0.5047, 0.5239, 0.4570, 0.6045],[0.6295, 0.5182, 0.2367, 0.6062],[0.5980, 0.5261, 0.2878, 0.6313],[0.5106, 0.5218,
代碼解析
- 載入 Facebook 預訓練的 DETR 模型(
detr_resnet50
) - 使用 ResNet 預處理輸入圖像
- 利用 Transformer 進行目標檢測 并輸出檢測框
5.DETR vs Faster R-CNN vs YOLO
模型 | 方法 | 檢測方式 | 速度(FPS) | mAP(COCO) | 特點 |
---|---|---|---|---|---|
Faster R-CNN | 雙階段 | RPN + ROI 池化 | ? 5-10 | 🎯 76.4% | 高精度,速度慢 |
YOLOv8 | 單階段 | 直接預測類別 + 邊界框 | ? 60+ | 🎯 92% | 速度快,適合實時檢測 |
DETR | 端到端 | Transformer 進行檢測 | ? 15 | 🎯 94% | 無 Anchor / NMS |
- DETR 適用于端到端目標檢測,適合大規模數據和復雜場景。
- YOLO 適用于實時檢測,而 Faster R-CNN 適用于高精度任務。
6.DETR 的優化方向
- DETR 速度較慢,可優化 Transformer 計算效率(如 Deformable DETR)
- 提升小目標檢測能力(DETR 需要更大數據集進行訓練)
- 輕量化 DETR(如 Mobile-DETR)以適應移動端部署
7.結論
- DETR 通過 Transformer 解決了目標檢測中的 Anchor 機制問題,簡化了流程。
- 它具有端到端訓練的優勢,但速度較慢,適用于高精度目標檢測任務。
- 隨著 Transformer 在計算機視覺中的應用(如 ViT),DETR 可能成為未來目標檢測的主流。?