
D-FINE
把 DETR 回归变细粒度,定位更准、收敛更快
项目预览
项目数据
项目介绍
Star 增长趋势
本站每日记录该项目 GitHub 星标变化,观测越久曲线越完整
数据来源:GitHub API 逐日快照 · 收录于 2026-08-10 · 当前星标 ★ 3400
技术标签
使用教程
环境要求
- Linux 环境(命令使用 export 与 CUDA_VISIBLE_DEVICES)
- 已安装 Conda,用于创建 Python 3.11.9 环境
- NVIDIA GPU(README 示例使用 4 张卡训练)
- 已获取 COCO2017 等数据集及对应权重文件(如 model.pth)
安装与启动步骤
-
1克隆项目代码
从官方仓库拉取源码并进入项目根目录,后续命令都在该目录下执行。
git clone https://github.com/Peterande/D-FINE.git cd D-FINE -
2创建 Conda 环境
按 README 指定版本创建名为 dfine 的 Python 3.11.9 环境。
conda create -n dfine python=3.11.9 -
3激活环境
切换到刚创建的环境,后续安装与训练都在此环境中进行。
conda activate dfine -
4安装依赖
安装 requirements.txt 中列出的全部依赖,建议在项目根目录执行。
pip install -r requirements.txt -
5选择模型规格
用环境变量指定模型规模,可选 n、s、m、l、x 五种。
export model=l -
6在 COCO2017 上训练
使用 torchrun 启动 4 卡分布式训练并开启混合精度,端口和卡数按需调整。
CUDA_VISIBLE_DEVICES=0,1,2,3 torchrun --master_port=7777 --nproc_per_node=4 train.py -c configs/dfine/dfine_hgnetv2_${model}_coco.yml --use-amp --seed=0 -
7测试/评测模型
用 --test-only 加载已有权重做评测,-r 后换成自己的权重路径。
CUDA_VISIBLE_DEVICES=0,1,2,3 torchrun --master_port=7777 --nproc_per_node=4 train.py -c configs/dfine/dfine_hgnetv2_${model}_coco.yml --test-only -r model.pth -
8微调已有权重
加 -t 指定预训练权重,在 COCO 或自定义数据集上继续微调。
CUDA_VISIBLE_DEVICES=0,1,2,3 torchrun --master_port=7777 --nproc_per_node=4 train.py -c configs/dfine/dfine_hgnetv2_${model}_coco.yml --use-amp --seed=0 -t model.pth
关键配置
| 配置项 | 必填 | 说明 | 示例 |
|---|---|---|---|
model | 是 | 选择模型规模,决定使用的配置文件后缀。 | l |
CUDA_VISIBLE_DEVICES | 是 | 指定参与训练的 GPU 编号,示例为 0,1,2,3。 | 0,1,2,3 |
--nproc_per_node | 是 | torchrun 每节点进程数,通常等于使用的 GPU 数量。 | 4 |
--master_port | 否 | 分布式训练通信端口,冲突时可更换。 | 7777 |
train_dataloader.total_batch_size | 否 | dataloader.yml 中总批大小,加倍时学习率需线性缩放。 | 64 |
eval_spatial_size | 否 | dfine_hgnetv2.yml 中评测输入尺寸,需与训练尺寸一致。 | [320, 320] |
如何确认成功
训练时终端持续输出迭代日志与 loss;用 --test-only -r model.pth 能跑完并打印评测指标即正常。
常见问题
Q:只有一张显卡能跑吗?
A:README 只给出 4 卡示例,需自行让 CUDA_VISIBLE_DEVICES 中的卡数与 --nproc_per_node 保持一致,未提供单卡示例命令。
Q:想让批次更大怎么改?
A:先改 configs/dfine/include/dataloader.yml 的 total_batch_size,再按线性缩放规则同步调大配置文件中的 lr,并调整 ema 与 warmup 参数。
Q:想改输入分辨率怎么办?
A:修改 dataloader.yml 中 Resize 的 size 与 collate_fn 的 base_size,并把 dfine_hgnetv2.yml 的 eval_spatial_size 改成相同尺寸。
Q:用 Objects365 权重训自定义数据集要注意什么?
A:可选地在 src/solver/_solver.py 中修改 self.obj365_ids 为数据集对应类别 ID 以加速收敛,不修改也能正常训练。
注意事项
- README 示例统一为 4 卡 torchrun 训练,请根据自己的硬件调整卡数与端口
- 改动批大小后需按线性缩放规律同步调整学习率、EMA 与 warmup
- 命令中的 model.pth 需替换为你实际的权重文件路径
- 自定义数据集训练使用 configs/dfine/custom/ 下的配置文件
核心亮点
- 重新定义回归任务为分布细化,边界框定位精度显著提升
- 端到端流程简洁,无需 NMS 等后处理,推理高效
- 在 COCO 上达到 SOTA 精度,且代码开源、预训练模型齐全
不足之处
- 模型复杂度较高,训练资源需求大
- 文档和社区支持尚在建设中,上手门槛略高
适用场景
- 高精度目标检测研究,如学术实验和论文复现
- 工业质检、自动驾驶等需要精确边界框的场景
- 作为 DETR 系列改进的基准模型,供后续研究参考
替代项目
RT-DETR、DINO、Co-DETR
上一篇:viseron
下一篇:deepdetect
同类项目推荐
STU-Net
开源
14亿参数医学分割大模型,开箱即用提升精度
The largest pre-trained medical image segmentation model (1.4B parameters) based on ···
D-FINE
开源
把 DETR 回归变细粒度,定位更准、收敛更快
D-FINE: Redefine Regression Task of DETRs as Fine-grained Distribution Refinement [···
obsidian-ocr
开源
让 Obsidian 搜索穿透图片和 PDF,截图文字也能搜到
Obsidian OCR allows you to search for text in your images and pdfs
creative-matplotlib
开源
用纯 matplotlib 画出惊艳创意图形,告别枯燥图表
Creative coding scripts and outputs using vanilla matplotlib
MulimgViewer
开源
一个界面并排看多图,对比拼接不用来回切窗口
MulimgViewer is a multi-image viewer that can open multiple images in one interface,···
DiffCut
开源
无需标注,用扩散模型特征实现零样本图像分割
[NeurIPS 2024] Official code for DiffCut: Catalyzing Zero-Shot Semantic Segmentation···
EcoDepth
开源
用扩散模型让单目深度估计更准,零样本也能测深度。
[CVPR'2024] Official implementation of the paper "ECoDepth: Effective Conditioning o···
CWR
开源
对比学习一键复原水下图像,颜色细节双提升
Code and dataset for Single Underwater Image Restoration by Contrastive Learning, IG···
TextGrabber2
开源
菜单栏一点,图片文字秒变可复制文本
Mac menu bar “Copy-to-Action” tool with support for extracting text from images.