首页 > 其他分享 >detr+transformer+端到端目标检测+超越yolo的目标检测

detr+transformer+端到端目标检测+超越yolo的目标检测

时间:2024-11-09 09:48:00浏览次数:6  
标签:transformer 训练 -- 检测 模型 yolo coco path DETR

DETR: 使用Transformer的端到端目标检测

DETR(Detection Transformer)的PyTorch训练代码和预训练模型。我们用Transformer替代了完整的手工设计的目标检测流水线,并且在使用ResNet-50的情况下达到了与Faster R-CNN相匹配的性能,在COCO数据集上获得了42%的平均精度(AP),并且只用了后者一半的计算量(FLOPs),参数数量相同。推理过程仅需50行PyTorch代码。
在这里插入图片描述

DETR是什么?

与传统的计算机视觉技术不同,DETR将目标检测视为直接的集合预测问题。它包含了一个基于集合的全局损失函数,通过二分匹配强制产生唯一的预测结果,以及一个Transformer编码-解码架构。给定一组固定的小规模学习到的对象查询,DETR能够并行地推理对象间的关系和全局图像上下文,直接输出最终的预测集合。由于其并行性质,DETR非常快速且高效。
在这里插入图片描述

关于代码

我们认为目标检测不应该比分类更难,也不应该需要复杂的库来进行训练和推理。DETR非常易于实现和实验,我们提供了一个独立的Colab笔记本,展示了如何仅用几行PyTorch代码完成DETR的推理。训练代码也遵循这一理念——它不是一个库,而只是一个主程序main.py,其中导入了模型和标准训练循环的定义。

此外,我们在d2/文件夹中提供了Detectron2的包装器。更多信息请参阅那里的README文件。

详情请参见Nicolas Carion, Francisco Massa, Gabriel Synnaeve, Nicolas Usunier, Alexander Kirillov和Sergey Zagoruyko的论文《End-to-End Object Detection with Transformers》。

阅读我们的博客文章,了解更多关于使用Transformer进行端到端目标检测的信息。

模型库

我们提供了基线DETR和DETR-DC5模型,并计划在未来增加更多模型。AP是在COCO 2017 val5k数据集上计算的,推理时间是基于前100张val5k COCO图像,使用torchscript转换器。

名称主干网络计划推理时间边界框AP链接大小
0DETRR505000.036s42.0%[模型
1DETR-DC5R505000.083s43.3%[模型
2DETRR1015000.050s43.5%[模型
3DETR-DC5R1015000.097s44.9%[模型

COCO val5k评估结果可以在这个gist中找到。

这些模型也可通过torch hub获得。要加载带有预训练权重的DETR R50模型,只需执行:

model = torch.hub.load('facebookresearch/detr:main', 'detr_resnet50', pretrained=True)

COCO panoptic val5k模型:

名称主干网络边界框AP分割APPQ链接大小
0DETRR5038.8%31.1%43.4%[下载]
1DETR-DC5R50¾1DETR-DC5R50
2DETRR10140.1%33.0%45.1%[下载]

您可以查看我们的全景分割Colab笔记本,了解如何使用和可视化DETR的全景分割预测。
在这里插入图片描述

笔记本

我们提供了一些Colab笔记本,以帮助您掌握DETR:

  • DETR动手实践Colab笔记本:展示了如何从hub加载模型,生成预测,然后可视化模型的注意力(类似于论文中的图示)。
  • 独立Colab笔记本:在这个笔记本中,我们演示了如何用50行Python代码从零开始实现简化的DETR版本,然后可视化预测结果。如果您想更好地理解架构并在深入代码库之前做一些探索,这是一个很好的起点。
  • 全景分割Colab笔记本:演示了如何使用DETR进行全景分割并绘制预测结果。
    在这里插入图片描述
使用 - 目标检测

DETR没有额外编译的组件,包依赖也非常少,因此代码非常简单易用。我们提供了如何通过conda安装依赖项的说明。首先,克隆仓库到本地:


然后,安装PyTorch 1.5+ 和 torchvision 0.6+:

conda install -c pytorch pytorch torchvision

安装pycocotools(用于COCO评估)和scipy(用于训练):

conda install cython scipy
pip install -U 'git+https://github.com/cocodataset/cocoapi.git#subdirectory=PythonAPI'

这样就完成了安装,可以开始训练和评估检测模型了。

(可选)如果要处理全景分割,安装panopticapi:

pip install git+https://github.com/cocodataset/panopticapi.git
数据准备

从http://cocodataset.org下载并解压COCO 2017训练和验证图像及其注释。我们期望目录结构如下:

/path/to/coco/
  annotations/  # 注释JSON文件
  train2017/    # 训练图像
  val2017/      # 验证图像
训练

要在单节点上使用8个GPU训练基准DETR共300个epoch,请运行:

python -m torch.distributed.launch --nproc_per_node=8 --use_env main.py --coco_path /path/to/coco

一个epoch大约需要28分钟,因此300个epoch的训练大约需要6天的时间,使用一台配备8张V100卡的机器。为了便于复现我们的结果,我们提供了150个epoch的训练结果和日志(在单台机器上约需3天),达到39.5/60.3 AP/AP50。

我们使用AdamW优化器训练DETR,将Transformer的学习率设为1e-4,主干网络的学习率设为1e-5。使用水平翻转、缩放和裁剪进行数据增强。图像被缩放到最小尺寸800和最大尺寸1333。Transformer的训练使用了0.1的dropout率,并且整个模型使用了0.1的梯度裁剪。

评估

要使用单个GPU在COCO val5k上评估DETR R50,请运行:

python main.py --batch_size 2 --no_aux_loss --eval --resume https://dl.fbaipublicfiles.com/detr/detr-r50-e632da11.pth --coco_path /path/to/coco

我们在这个gist中提供了所有DETR检测模型的结果。请注意,数字会根据每个GPU的批处理大小(图像数量)而有所不同。非DC5模型使用批处理大小2进行训练,而DC5使用批处理大小1,因此如果在每个GPU上评估超过1张图像时,DC5模型的AP会有显著下降。

多节点训练

通过Slurm和submitit可以进行分布式训练:

pip install submitit

在4个节点上训练基准DETR-6-6模型共300个epoch:

python run_with_submitit.py --timeout 3000 --coco_path /path/to/coco
使用 - 分割

我们展示了将DETR扩展到预测分割掩码是相对直接的。我们主要展示了强大的全景分割结果。

数据准备

对于全景分割,除了COCO数据集外,您还需要全景注释(请参见上面的COCO数据集)。您需要下载并解压这些注释。我们期望目录结构如下:

/path/to/coco_panoptic/
  annotations/  # 注释JSON文件
  panoptic_train2017/    # 训练全景注释
  panoptic_val2017/      # 验证全景注释
训练

我们建议分两阶段训练分割:首先训练DETR检测所有边界框,然后训练分割头。对于全景分割,DETR必须学会检测东西类和事物类的边界框。您可以在单个节点上使用8个GPU训练300个epoch:

python -m torch.distributed.launch --nproc_per_node=8 --use_env main.py --coco_path /path/to/coco  --coco_panoptic_path /path/to/coco_panoptic --dataset_file coco_panoptic --output_dir /output/path/box_model

对于实例分割,您可以简单地训练一个正常的边界框模型(或者使用我们提供的预训练模型)。

一旦有了边界框模型的检查点,您需要冻结它,并单独训练分割头。对于全景分割,您可以在单个节点上使用8个GPU训练25个epoch:

python -m torch.distributed.launch --nproc_per_node=8 --use_env main.py --masks --epochs 25 --lr_drop 15 --coco_path /path/to/coco  --coco_panoptic_path /path/to/coco_panoptic  --dataset_file coco_panoptic --frozen_weights /output/path/box_model/checkpoint.pth --output_dir /output/path/segm_model

对于仅实例分割的情况,只需从上述命令行中删除dataset_filecoco_panoptic_path参数。

通过这些步骤,您可以充分利用DETR的端到端目标检测和分割能力,实现高效的计算机视觉任务。DETR不仅简化了传统目标检测流水线,还通过Transformer架构提高了模型的性能和效率,为自动驾驶和其他需要精确视觉感知的应用提供了强有力的支持。

标签:transformer,训练,--,检测,模型,yolo,coco,path,DETR
From: https://blog.csdn.net/qq1309399183/article/details/143636853

相关文章