DINO
这是论文“DINO: DETR with Improved DeNoising Anchor Boxes for End-to-End Object Detection”的官方实现。 (DINO 发音为 ‘daɪnoʊ’,如同恐龙)
作者: Hao Zhang*, Feng Li*, Shilong Liu*, Lei Zhang,Hang Su,Jun Zhu,Lionel M. Ni,Heung-Yeung Shum
新闻
[2023/7/10] 我们发布 Semantic-SAM,这是一种通用图像分割模型,可以在任何所需的粒度下分割和识别任何东西。代码 和 检查点 已开放!
[2023/4/28]: 我们发布了一个强大的开放集目标检测和分割模型 OpenSeeD,在开放集目标分割任务中取得了最佳结果。代码和检查点可在这里获取。
[2023/4/26]: DINO 再次闪耀!我们发布了基于 DINO 和 FocalNet-Huge 主干网的 Stable-DINO,在 COCO test-dev 上达到了 64.8 AP
。
[2023/4/22]: 通过更好的超参数,我们的 DINO-4scale 模型在 12ep 设置下达到了 49.8 AP
,请查看 detrex: DINO 了解更多详情。
[2023/3/13]: 我们发布了一个强大的开放集目标检测模型 Grounding DINO,在开放集目标检测任务中取得了最佳结果。它在 COCO 检测中达到了 52.5 的 零样本 AP,没有任何 COCO 训练数据! 在微调后,它在 COCO 上达到了 63.0 AP。代码和检查点将在这里 开放。
[2023/1/23]: DINO 已被 ICLR 2023 接受!
[2022/12/02]: Mask DINO 的代码已经发布(也在 detrex 中)!Mask DINO 在没有额外检测数据的情况下,使用 ResNet-50 和 SwinL 分别在 COCO 上达到了 51.7 和 59.0 的箱 AP 超越了 DINO 在相同设置下的表现!
[2022/9/22]: 我们发布了一个工具箱 detrex,提供最先进的基于 Transformer 的检测算法。包括 DINO 性能更佳。欢迎使用!
[2022/9/18]: 我们组织了 ECCV 研讨会 Computer Vision in the Wild (CVinW),举办了两个挑战赛以评估预训练视觉模型在下游任务中的零样本、少样本和全样本表现:
- ``Image Classification in the Wild (ICinW)'' 挑战赛在 20 项图像分类任务上进行评估。
- ``Object Detection in the Wild (ODinW)'' 挑战赛在 35 项目标检测任务上进行评估。
[研讨会] [IC 挑战赛]
[OD 挑战赛]
[2022/8/6]: 我们更新了 Swin-L 模型结果,未使用 O365 预训练、大图像尺寸和多尺度测试等技术。我们还将相应的检查点上传到 Google Drive. 我们的五尺度模型在没有任何技巧的情况下在 COCO val 上取得了 58.5 AP。
[2022/7/14]: 我们发布了包含 Swin-L 和 Convnext 主干网的代码。
[2022/7/10]: 我们发布了包含 Resnet-50 主干网的代码和检查点。
[2022/6/7]: 我们发布了一个统一的检测和分割模型 Mask DINO,在三种分割任务中取得了最佳结果(在 COCO 实例榜单 上取得 54.7 AP,在 COCO 全景榜单 上取得 59.5 PQ,在 ADE20K 语义榜单 上取得 60.8 mIoU)!代码将在这里 提供。
[2022/5/28]: DN-DETR的代码在这里提供。
[2022/4/10]: DAB-DETR 的代码在这里提供。
[2022/3/8]: 我们在 MS-COCO 榜单 上达到了 63.3AP 的 SOTA!
[2022/3/9]: 我们建立了一个仓库 Awesome Detection Transformer,展示有关检测和分割的 Transformer 论文。欢迎关注!
介绍
我们介绍了 DINO (DETR with Improved deNoising anchOr boxes),具备以下特点:
- 先进的 & 端到端:DINO在COCO Val上达到了63.2 AP,在COCO test-dev上达到了63.3 AP,其模型规模和数据规模比以前的最佳模型小十倍以上。
- 快速收敛:使用ResNet-50主干,DINO在5个尺度上在12个周期内达到了49.4 AP,在24个周期内达到了51.3 AP。我们的4尺度模型达到了类似的性能,并以23 FPS运行。
方法
模型库
我们将模型检查点放在这里 [Google Drive里的模型库] [百度网盘里的模型库](提取码"DINO"),其中checkpoint{x}_{y}scale.pth表示训练了x个周期的y尺度模型的检查点。我们的训练日志在[Google Drive]中。
12个周期设置
名称 | 主干 | box AP | 检查点 | 在我们的论文中的位置 | |
---|---|---|---|---|---|
1 | DINO-4scale | R50 | 49.0 | Google Drive / 百度网盘 | 表1 |
2 | DINO-5scale | R50 | 49.4 | Google Drive / 百度网盘 | 表1 |
3 | DINO-4scale | Swin-L | 56.8 | Google Drive | |
4 | DINO-5scale | Swin-L | 57.3 | Google Drive |
24个周期设置
名称 | 主干 | box AP | 检查点 | 在我们的论文中的位置 | |
---|---|---|---|---|---|
1 | DINO-4scale | R50 | 50.4 | Google Drive / 百度网盘 | 表2 |
2 | DINO-5scale | R50 | 51.3 | Google Drive / 百度网盘 | 表2 |
36个周期设置
名称 | 主干 | box AP | 检查点 | 在我们的论文中的位置 | |
---|---|---|---|---|---|
1 | DINO-4scale | R50 | 50.9 | Google Drive / 百度网盘 | 表2 |
2 | DINO-5scale | R50 | 51.2 | Google Drive / 百度网盘 | 表2 |
3 | DINO-4scale | Swin-L | 58.0 | Google Drive | |
4 | DINO-5scale | Swin-L | 58.5 | Google Drive |
安装
安装
我们使用与DAB-DETR和DN-DETR相同的环境来运行DINO。如果你已经运行过DN-DETR或DAB-DETR,你可以跳过这一步。我们在python=3.7.3, pytorch=1.9.0, cuda=11.1
环境下测试了我们的模型。其他版本也可能适用。点击下面的Details
了解更多详细信息。
- 克隆此仓库
git clone https://github.com/IDEA-Research/DINO.git
cd DINO
- 安装Pytorch和torchvision
按照https://pytorch.org/get-started/locally/上的说明进行安装。
# 一个例子:
conda install -c pytorch pytorch torchvision
- 安装其他需要的软件包
pip install -r requirements.txt
- 编译CUDA操作
cd models/dino/ops
python setup.py build install
# 单元测试(应看到所有检查都为True)
python test.py
cd ../../..
数据
数据
请下载 COCO 2017 数据集并按如下方式组织:
COCODIR/
├── train2017/
├── val2017/
└── annotations/
├── instances_train2017.json
└── instances_val2017.json
运行
1. 评估我们预训练的模型
从这个链接 下载我们的DINO模型检查点 "checkpoint0011_4scale.pth",并执行下面的命令。你可以期望得到大约49.0的最终AP。
bash scripts/DINO_eval.sh /path/to/your/COCODIR /path/to/your/checkpoint
2. 推理和可视化
对于推理和可视化,我们提供了一份notebook作为示例。
3. 训练一个4-scale模型12个epoch
我们使用训练了12个epoch的DINO 4-scale模型作为示例,演示如何评估和训练我们的模型。
你也可以通过单个进程训练我们的模型:
bash scripts/DINO_train.sh /path/to/your/COCODIR
4. 对Swin Transformer的支持
要训练Swin-L模型,你需要首先从链接下载Swin-L骨干的检查点,并在运行脚本时指定预训练骨干的目录。以下是一个示例。
bash scripts/DINO_train_submitit_swin.sh /path/to/your/COCODIR /path/to/your/pretrained_backbone
5. 分布式运行
由于训练时间较长,我们建议在多设备上训练模型。
如果你打算在有Slurm的集群上训练模型,这里有一个训练的示例命令:
# DINO-4scale: 49.0
bash scripts/DINO_train_submitit.sh /path/to/your/COCODIR
# DINO-5scale: 49.4
bash scripts/DINO_train_submitit_5scale.sh /path/to/your/COCODIR
注意: 结果对批处理大小敏感。我们默认使用16(每个GPU2张图片 x 8个GPU用于DINO-4scale,每个GPU1张图片 x 16个GPU用于DINO-5scale)。
或在单节点上使用多进程运行:
# DINO-4scale: 49.0
bash scripts/DINO_train_dist.sh /path/to/your/COCODIR
6. 在自定义数据集上训练/微调DINO
要在自定义数据集上从头开始训练DINO,你需要在配置文件中调整两个参数:
- 将
num_classes
调整为数据集中要检测的类别数量。 - 调整
dn_labebook_size
参数,以确保dn_labebook_size >= num_classes + 1
要利用我们的预训练模型进行模型微调,我们建议在bash中添加两个命令:
--pretrain_model_path /path/to/a/pretrianed/model
。指定一个预训练模型。--finetune_ignore label_enc.weight class_embed
。忽略一些不一致的参数。
链接
DN-DETR: 通过引入查询去噪加速DETR训练。
Feng Li*, Hao Zhang*, Shilong Liu, Jian Guo, Lionel M. Ni, Lei Zhang。
IEEE计算机视觉与模式识别会议(CVPR) 2022。
[论文] [代码] [中文解读]
DAB-DETR: 动态锚框是更好的DETR查询。
Shilong Liu, Feng Li, Hao Zhang, Xiao Yang, Xianbiao Qi, Hang Su, Jun Zhu, Lei Zhang。
国际学习表征大会(ICLR) 2022。
[论文] [代码]
我们还感谢包括DETR, Deformable DETR, SMCA, Conditional DETR, Anchor DETR, Dynamic DETR等在内的优秀前期工作。更多相关工作请访问Awesome Detection Transformer。
许可证
DINO在Apache 2.0许可证下发布。请参阅LICENSE文件了解更多信息。
版权所有(c) IDEA。保留所有权利。
根据Apache许可证2.0版许可,你不得使用这些文件,除非符合许可证。你可以在http://www.apache.org/licenses/LICENSE-2.0获得许可证的副本。
除非适用法律要求或书面同意,根据许可证分发的软件按“原样”分发,没有任何明示或暗示的担保。请参阅许可证了解管理权限和限制的更多信息。
Bibtex
如果你认为我们的工作对你的研究有帮助,请考虑引用以下BibTeX条目。
@misc{zhang2022dino,
title={DINO: DETR with Improved DeNoising Anchor Boxes for End-to-End Object Detection},
author={Hao Zhang and Feng Li and Shilong Liu and Lei Zhang and Hang Su and Jun Zhu and Lionel M. Ni and Heung-Yeung Shum},
year={2022},
eprint={2203.03605},
archivePrefix={arXiv},
primaryClass={cs.CV}
}
@inproceedings{li2022dn,
title={Dn-detr: Accelerate detr training by introducing query denoising},
author={Li, Feng and Zhang, Hao and Liu, Shilong and Guo, Jian and Ni, Lionel M and Zhang, Lei},
booktitle={Proceedings of the IEEE/CVF Conference on Computer Vision and Pattern Recognition},
pages={13619--13627},
year={2022}
}
@会议论文{ liu2022dabdetr, 标题={{DAB}-{DETR}: 动态锚框是更好的查询对于{DETR}}, 作者={刘士龙, 李峰, 张浩, 杨潇, 亓显彪, 苏杭, 朱军, 张雷}, 书名={国际学习表征会议}, 年份={2022}, 链接={https://openreview.net/forum?id=oMI9PjOb9Jl} }