🚀 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张验证图像 |