README.md

August 26, 2026 · View on GitHub

D-FINE-seg

Real-Time Object Detection, Instance and Semantic Segmentation

Quick StartUsageExportInferenceBenchmarksVideo TutorialColab

tests PyPI version arXiv Hugging Face Model Card License Contact me


D-FINE-seg is a framework for real-time object detection, instance segmentation, and semantic segmentation - one codebase, one config flag (task: detect | segment | sem_seg), five model sizes (N -> X).

  • End-to-end workflow - dataset prep -> training (DDP, EMA, AMP, mosaic) -> export (ONNX, TensorRT, OpenVINO, CoreML, LiteRT) -> benchmarked multi-backend inference
  • Accuracy - on Cityscapes, beats YOLO26 and RF-DETR on detection & instance-seg F1 and leads mIoU on semantic segmentation, at real-time latency with 2-3x fewer params; also higher F1 than YOLO26 on TACO and VisDrone (TensorRT FP16, end-to-end protocol)
  • Paper - D-FINE-seg: Object Detection and Instance Segmentation Framework with Multi-Backend Deployment
  • Not a fork: the detection core follows the D-FINE paper; segmentation heads, training, export and inference are implemented from scratch.

One frame, three tasks, one config flag:

Full tables below

Highlights

  • Instance segmentation head (task: segment) - lightweight mask head on top of D-FINE's HybridEncoder PAN outputs: stride 8/16/32 features fused to 1/4 resolution, then a dot-product between per-query mask embeddings (3-layer MLP) and the shared mask features yields per-instance masks
  • Semantic segmentation head (task: sem_seg) - reuses the pretrained instance-seg mask fuser on full-frame features, followed by a small conv neck and 1x1 classifier: no queries, no NMS
  • Mask-aware training - box-cropped BCE + Dice mask losses (instance seg) and CE + multi-class soft Dice with ignore_index (semantic seg), mask supervision inside contrastive denoising, and Dice + sigmoid-focal mask costs in the Hungarian matcher - all train-time only, zero inference cost
  • COCO-pretrained weights for detection and instance segmentation, auto-downloaded on first use - fine-tuning starts from a trained mask decoder, not from scratch
  • Multi-channel inputs - train on RGB + thermal / depth / NIR stacks (4-channel .npy), not just RGB
  • Modern training stack - Muon optimizer, DDP, EMA, mosaic + affine augs, OneCycle, early stopping, WandB
  • Beyond the model - ByteTrack tracking, SAM3 auto-labeling, Gradio demo, INT8 quantization (OpenVINO / CoreML / LiteRT)

Quick Start

Installation

pip install dfine-seg           # inference + training
pip install 'dfine-seg[all]'    # + every export backend, SAM3, Gradio demo

COCO-pretrained weights (detection and instance segmentation) auto-download from Hugging Face on first use - no manual download needed.

Extras, if you need them (backends are large and platform-specific)
InstallAddsFor
pip install dfine-segtorch, torchvision, opencv, hydra, wandb, albumentations, …inference + training
pip install 'dfine-seg[export]'onnx, onnxruntime, openvino, nncf, coremltoolsdfine export
pip install 'dfine-seg[trt]'tensorrt (Linux)TensorRT engines - build on the target GPU
pip install 'dfine-seg[label]'transformersSAM3 auto-labeling
pip install 'dfine-seg[demo]'gradiothe Gradio UI
pip install 'dfine-seg[all]'everything abovefull setup

Two-line predict:

from dfine_seg import load_model, read_image, Visualizer

model = load_model("s")                              # COCO detection, weights auto-downloaded
model = load_model("s", task="segment")              # COCO instance segmentation
model = load_model("output/models/exp/model.pt")     # your checkpoint - size/task/classes/input size auto-detected, supports: .pt | .engine | .onnx | .xml

img = read_image("path/to/image.jpg")
out = model(img)[0]
print(out["boxes"], out["scores"], [model.names[int(i)] for i in out["labels"]])

drawn = Visualizer(model)(img, out)                  # annotated BGR copy - boxes, masks or a sem_seg overlay

load_model returns the very same wrapper you would construct by hand (dfine_seg/infer/) - it resolves the weights and picks the backend, then gets out of the way. Extra keyword arguments pass straight through (load_model("s", conf_thresh=0.3)), output tensors stay on the device the model ran on, and those wrapper files remain self-contained enough to copy into your own app. Visualizer reads the class count and names off the model it is given, then draws whatever that model returned - boxes, instance masks or a dense label map - so one call covers every task (BGR uint8 in, BGR uint8 out).

To train from a pip install, materialize a config and go:

dfine init          # writes ./config.yaml - edit train.root and train.label_to_name
dfine split
dfine train         # Hydra overrides work: dfine train model_name=m train.epochs=100

From source (contributors)

git clone https://github.com/ArgoHA/D-FINE-seg.git
cd D-FINE-seg
uv sync

This creates a .venv/ with the package installed editable and every extra present, pinned by uv.lock. Activate it with source .venv/bin/activate, or run anything via uv run ... (the Makefile already does this).

Pretrained weights are auto-downloaded from Hugging Face on first use, so no manual setup is needed - into pretrained/ for the config-driven commands, and into the shared Hugging Face cache for load_model("s") when there is no pretrained/ copy to reuse. To download manually instead, grab dfine_<size>_<dataset>.pt (size ∈ {n, s, m, l, x}, dataset ∈ {coco, obj2coco}) and place it in pretrained/. Segmentation weights are also available in the Hugging Face model card.

Prepare Your Data

Two annotation formats are supported: YOLO (default) and COCO JSON. Semantic segmentation uses PNG masks instead (see below).

YOLO format (default)

data/dataset/
├── images/    # all images: .jpg, .png, etc. (.npy for multi-channel - see below)
└── labels/    # all labels: one .txt per image (same filename stem)

Detection labels: class_id xc yc w h (normalized)

Segmentation labels: class_id x1 y1 x2 y2 ... xN yN (normalized polygon coordinates)

Input types & channel order: 3-channel .jpg/.png (BGR, read via cv2.imread), 3-channel .npy (RGB, read via np.load), or 4-channel .npy (RGB+extras, e.g. RGB+thermal).

Semantic segmentation masks (task: sem_seg)

data/dataset/
├── images/    # same as YOLO layout
└── labels/    # one single-channel uint8 .png per image (same stem), pixel value = class id

Every pixel gets a class from label_to_name (background included). Pixels with value train.sem_seg.ignore_index (default 255) are excluded from loss and metrics and during inference 255 is the "background" or "ignored" class. dfine split works unchanged; keep_ratio: True is supported (letterbox pad is filled with ignore_index, so pad pixels don't supervise); coco_dataset: True is not supported for this task.

Multi-channel inputs (RGB + thermal / depth / NIR / …)

Set train.in_channels: 4 (3 or 4 supported) to train on RGB + one extra modality (thermal / depth / NIR). Stacks are .npy uint8 HWC arrays in images/ (RGB in planes 0-2, extras after) with YOLO labels as usual; a mismatched channel count is skipped with a warning. See dfine_seg/etl/m3fd_to_yolo.py for a ready-made RGB+thermal converter.

COCO JSON format

Place standard COCO JSON annotation files alongside your images folder. Splits are detected automatically by filename:

data/dataset/
├── images/       # all images
├── train.json    # COCO-format annotations for train split
├── val.json      # COCO-format annotations for val split
└── test.json     # (optional) COCO-format annotations for test split

Enable COCO mode by setting coco_dataset: True in your config (see below). No CSV split generation step is needed - the splits are read directly from the JSON files.

If you only have a single coco.json, run dfine split to produce train.json / val.json (and test.json when the ratios leave room) from it. It splits by image using the same split: ratios, seed and ignore_negatives as the YOLO path, keeps each image's annotations with it, and copies categories / info / licenses into every output.

Configure

Edit config.yaml - key settings:

task: detect  # detect | segment | sem_seg
exp_name: my_exp  # experiment name (used in output paths)
model_name: s  # n / s / m / l / x

train:
  root: /path/to/project  # project root, will be used for outputs
  data_path: /path/to/dataset  # folder with images/ and labels/ (YOLO) or *.json files (COCO)
  coco_dataset: False  # set True to use COCO JSON annotations (train.json / val.json / test.json)
  label_to_name:
    0: class_a
    1: class_b
  epochs: 75
  batch_size: 8
  img_size: [640, 640]  # (h, w)

Usage

CommandWhat it does
dfine initwrite config.yaml from the packaged template (--task, --model, -d, --force)
dfine splitcreate train/val CSV splits (test split if configured)
dfine traintrain the model
dfine exportexport to ONNX, TensorRT, OpenVINO, CoreML (+ LiteRT when named)
dfine benchbenchmark all exported models on the val set
dfine inferrun on test folder, save visualizations + YOLO txt predictions
dfine check-errorscompare predictions against GT, save only mismatches (FP/FN)
dfine test-batchingfind optimal batch size for your GPU
dfine ov-int8INT8 accuracy-aware quantization for OpenVINO (can take hours)
dfine trt-int8TensorRT INT8 calibration
dfine maintrain -> export -> bench in sequence (same as the bare make target)
dfine demolaunch the Gradio UI (needs pip install 'dfine-seg[demo]')
dfine predictrun a model on an image or folder, no config needed
dfine hw_benchmeasure Torch inference throughput on this device (cuda/mps/cpu); --batch to saturate a GPU
dfine versionprint the installed version

Notes:

  • Most commands read config.yaml and work off your trained run; exceptions — init (writes the config), predict, hw_bench, demo, version (no config needed). Every command's flags, defaults and examples: dfine <command> -h.
  • YOLO format: dfine train requires train.csv and val.csv in train.data_path (generated by dfine split).
  • COCO format: set coco_dataset: True - train.json and val.json are loaded directly; dfine split is only needed if you have a single coco.json to split.
  • dfine infer runs Torch inference on train.path_to_test_data and writes to train.infer_path. infer / export / bench auto-pick the latest <exp_name>_<date> run under train.path_to_save.

Every dfine command also has a make alias (make train == dfine train), and any config key can be overridden inline:

dfine train exp_name=my_exp model_name=m train.epochs=100

Enable DDP (multi-GPU) by setting train.ddp.enabled: True and train.ddp.n_gpus: N in config. Then just run dfine train - it auto-launches with torchrun.

Training Features

FeatureDescription
Muon optimizerOptional Newton–Schulz optimizer for encoder/decoder attention+MLP matrices
DDPMulti-GPU distributed training with SyncBatchNorm
AMPAutomatic mixed precision (~40% less VRAM, ~15% faster)
EMAExponential moving average of weights
Gradient accumulationEffective batch size = batch_size x b_accum_steps
Gradient clippingConfigurable max norm
Mosaic augmentation4-image mosaic with affine transforms (recommended for detection)
AlbumentationsRotation, flip, blur, noise, gamma, grayscale, coarse dropout, multiscale
OneCycleLR schedulerSeparate learning rates for backbone and head
Early stoppingConfigurable patience
WandB integrationAutomatic experiment tracking
Optimal threshold searchAuto-finds best confidence threshold after training
Background warm-upIgnore background-only images for N initial epochs
Autoresearch harnessTooling to run agent in autoresearch format, leaves under experiments/

Export

FormatHalf PrecisionNotes
ONNX-With optional fused postprocessor
TensorRTFP16Must be exported on the target GPU. Static input shape only
OpenVINOFP16, INT8Single export for FP32 or FP16 (pick during inference) and separate INT8 quantization script
CoreMLFP16, INT8Cross-platform export, inference on macOS / iOS. FP32 and INT8 exported by default
LiteRTINT8On-device TFLite (mobile / edge). FP32 and INT8 exported by default

Tip: FP16 is the best latency/accuracy trade-off for GPU (TensorRT) and CPU (OpenVINO). For Apple Silicon (CoreML), FP32 is faster.

Warning: run TensorRT engines at batch 1. On TRT 10.13.3.9 a batched engine does not compute batch elements independently - feeding four identical images through a single execute_async_v3 call returns four different results (score spread up to 0.20, and different labels), so a detection's score depends on what it happened to be batched with. Batch 1 is exact, and reproduces in raw TensorRT for FP16 and FP32 and for every optimization-profile shape, while torch and ONNX Runtime stay identical across slots (NVIDIA/TensorRT#4813).

After export, a parity self-check (export.parity, on by default) runs each backend on a shared input and writes one cosine per backend - over the sorted top-K detection scores vs torch - to parity.csv next to the weights.

For task: sem_seg every backend gets the same fused-argmax graph: a single int32 sem_seg output [B, H, W] (label map at input resolution, no detection postprocessor), and parity compares per-pixel argmax agreement instead of score cosine.

Inference

Backends

Six inference backends in dfine_seg/infer/:

BackendFormatDevices
Torch.ptCUDA, MPS, CPU
TensorRT.engineCUDA
OpenVINO.xmlCPU, iGPU
ONNX Runtime.onnxCUDA, CPU
CoreML.mlpackagemacOS (GPU), iOS
LiteRT.tfliteCPU, mobile / edge (Android)

Output contract: detection / instance segmentation wrappers return labels, boxes, scores (+ masks [N, H, W] for segment); sem_seg wrappers return a single sem_seg [H, W] label map at original image resolution. For sem_seg, dfine infer writes palette overlays + GT-style grayscale PNG label maps (crops and tracking are box-based and skipped).

Also provided:

  • Bytetrack - simple implementation of object tracker
  • SAM3 - text-promptable zero-shot segmentation for auto-labeling (multi-class: repeat --prompt or pass "car, person")

Multi-Object Tracking

A simplified ByteTrack (Zhang et al., ECCV 2022) is included for persistent object tracking across video frames - uses constant-velocity motion prediction with EMA-smoothed velocity instead of a Kalman filter, blends IoU with centroid distance in the match cost, and does per-class matching by default.

Gradio Demo

dfine demo         # == make demo   (pip: pip install 'dfine-seg[demo]')

A web UI for running inference on uploaded images and videos (or a webcam snapshot). It starts on COCO detection s - no configuration, weights download on first use. The Model panel then swaps in any other model at runtime: a size preset, or a path/upload of your own .pt / .onnx / .engine / .xml, with a box for the class names. detect, segment and sem_seg checkpoints all render, and SAM3 is selectable as a second backend for text-promptable segmentation (prompts are comma- or newline-separated - each one becomes a class).

It serves on 0.0.0.0:7860 (LAN-reachable) and prints a warning on startup: the Model panel loads any path the browser sends, so anyone who can reach the port can load files off this machine. dfine demo --host 127.0.0.1 restores local-only.

Benchmarks

Metrics

Detection / instance segmentation - GT objects and predictions are matched one-to-one: a prediction is a TP if IoU > 0.5 (box for detect, mask for segment) and the class matches; only the highest-IoU prediction per GT counts, extra overlapping ones are FPs; a class mismatch is one FP + one FN.

  • F1 / Precision / Recall - computed from those TP/FP/FN counts at train.conf_thresh.
  • IoU (penalized) - mean IoU over all outcomes: TPs contribute their IoU, FPs and FNs contribute 0 (= sum of TP IoUs / (TPs + FPs + FNs)).
  • mAP_50 / mAP_50_95 - COCO-style average precision (mask versions for segment).

Semantic segmentation - all metrics come from one pixel confusion matrix accumulated over the whole eval set at original image resolution (ignore_index pixels excluded). A pixel of class i predicted as j counts as an FN for i and an FP for j - each confused pixel penalizes both classes.

  • mIoU (decision metric) - macro-averaged: per-class pixel IoU = TP / (TP + FP + FN), averaged over classes present in GT, so every class has equal weight regardless of pixel count.
  • pixel_acc - micro: fraction of all valid pixels classified correctly, so it is dominated by large classes.

Cityscapes - vs YOLO26 and RF-DETR (fine-tuning)

This is the main dataset where numbers are being updated. Other benchmarks are older and are not updated with every latency/accuracy improvement in this repo. 500 Cityscapes val images at original 2048x1024, TensorRT 10.13 FP16, batch 1, RTX 5070 Ti. Every framework runs its own shipped inference code, scored by one validator against the same GT. Confidence thresholds were calculated for each framework separately to maximixe the F1. Two latency columns - e2e (end-to-end, including each framework's CPU preprocessing) and engine (pure TensorRT execute) - because they can disagree. Full protocol and every known asymmetry: cityscapes-benchmark.

Detection

modelparams (M)inputconfF1precisionrecallIoUe2e msengine ms
D-FINE-seg S10.29640x6400.50.7030.8170.6170.4462.01.38
YOLO26-M21.79640x6400.250.6910.7920.6130.4323.031.59
RF-DETR-medium33.39576x5760.350.6730.7690.5990.40910.21.45

Instance segmentation

modelparams (M)inputconfF1precisionrecallIoUe2e msengine ms
D-FINE-seg S11.87640x6400.50.6610.7480.5920.3753.091.9
YOLO26-M26.98640x6400.250.5990.6880.530.3125.242.08
RF-DETR-seg-medium35.4432x4320.350.620.7890.510.34616.331.8

Semantic segmentation

RF-DETR has no semantic segmentation task, so this one is D-FINE-seg vs YOLO26.

modelparams (M)inputmIoUpixel acce2e msengine ms
D-FINE-seg S8.02640x6400.7280.951.791.5
D-FINE-seg M16640x6400.7530.9542.242.06
YOLO26-L17.87640x6400.7390.9493.561.63
YOLO26-M14.32640x6400.7330.9473.081.16

Other datasets

VisDrone - object detection

VisDrone dataset - a large-scale drone-captured benchmark with 10 categories across diverse urban and rural scenes (~6500 train / ~550 val / ~1600 test-dev images). YOLO26 trained for 100 epochs, D-FINE for 75. YOLO26 confidence threshold - 0.25, D-FINE - 0.5. F1-score measured with IoU threshold 0.5. Preserved original dataset split (VisDrone2019-DET-train, VisDrone2019-DET-val, VisDrone2019-DET-test-dev). Metrics are reported on test-dev set. Latency measured end-to-end (preprocessing + forward pass + postprocessing) on RTX 5070 Ti with TensorRT FP16 at 640x640, batch size 1.

ModelF1-scoreIoUPrecisionRecallLatency (ms)
D-FINE N0.5310.2880.7240.421.6
YOLO26 N0.4550.2260.6310.3562.8
D-FINE S0.5840.3320.730.4862.1
YOLO26 S0.5100.2640.6520.4193.1
D-FINE M0.6050.3510.7320.5162.7
YOLO26 M0.5620.3010.6670.4853.6
D-FINE L0.6060.3510.7220.5233.3
YOLO26 L0.5680.3080.6760.4904.1
D-FINE X0.6110.3540.7180.5324.5
YOLO26 X0.5840.3190.6820.5105.3

D-FINE outperforms YOLO26 in fine-tuning setting on VisDrone dataset in F1-score across every model size. D-FINE achieves ~7% higher mean relative F1-score with ~28% latency reduction. Notably, IoU is ~15% higher (mean relative improvement across all models).

VisDrone

TACO - object detection and instance segmentation

TACO dataset (1500 images, 59 effective classes of waste in diverse environments, 86/14 train/val split by batch ID). The benchmarking environment is the same as for VisDrone.

Instance Segmentation

ModelParams (M)F1-scoreIoUPrecisionRecallLatency (ms)
D-FINE-seg N5.10.2310.1060.3070.1853.2
YOLO26-seg N2.70.0620.0270.2720.0353.8
D-FINE-seg S11.90.2810.1340.4050.2153.7
YOLO26-seg S10.40.1770.0800.2780.1304.3
D-FINE-seg M21.20.2960.140.3550.2544.5
YOLO26-seg M23.60.2670.1280.3650.2105.3
D-FINE-seg L32.80.3420.1670.4390.2795.0
YOLO26-seg L28.00.2870.1370.3940.2265.8
D-FINE-seg X64.30.3800.190.460.3246.3
YOLO26-seg X62.80.3000.1460.4080.2387.6

Object Detection

ModelParams (M)F1-scoreIoUPrecisionRecallLatency (ms)
D-FINE N3.80.2370.1150.340.1811.9
YOLO26 N2.40.0720.0330.2740.0423.4
D-FINE S10.30.3000.1550.4160.2342.4
YOLO26 S9.50.1700.0810.2790.1223.5
D-FINE M19.60.2990.1570.3910.2422.9
YOLO26 M20.40.2320.1150.3030.1884.2
D-FINE L31.20.3550.1880.4520.2923.5
YOLO26 L24.80.2500.1280.3560.1934.7
D-FINE X62.60.3910.2120.4540.3434.7
YOLO26 X55.70.3030.1580.4120.2396.1

D-FINE-seg outperforms YOLO26 in fine-tuning setting on TACO dataset in F1-score across every model size (N/S/M/L/X). In segmentation task - ~75% higher mean relative F1-score and ~16% latency reduction. In detection task - ~80% higher F1-score and ~28% latency reduction.

Note: although D-FINE does not require NMS, it still provides a small accuracy boost, so NMS is enabled by default in the current version. This is included in the reported latency.

COCO-style APs

Mask AP (Segmentation)
ModelMask mAP@50-95Mask mAP@50
D-FINE-seg N0.0940.141
YOLO26-seg N0.0410.058
D-FINE-seg S0.1770.250
YOLO26-seg S0.1110.165
D-FINE-seg M0.1570.229
YOLO26-seg M0.1950.270
D-FINE-seg L0.2120.310
YOLO26-seg L0.1740.242
D-FINE-seg X0.2420.340
YOLO26-seg X0.2100.291
Box AP (Detection)
ModelBox mAP@50-95Box mAP@50
D-FINE N0.1230.169
YOLO26 N0.0600.075
D-FINE S0.2020.244
YOLO26 S0.0980.124
D-FINE M0.2040.246
YOLO26 M0.1720.214
D-FINE L0.2560.314
YOLO26 L0.2300.272
D-FINE X0.2690.336
YOLO26 X0.2560.300

AP computed with confidence threshold 0.01, max 100 detections per image. D-FINE-seg wins on 4 of 5 mask AP sizes (YOLO26 leads at M) and all 5 box AP sizes.

Format Comparisons

Measured on TACO with D-FINE-seg S / D-FINE S at 640x640. Latency = preprocessing + inference + postprocessing.

Desktop: Intel i5-12400F + RTX 5070 Ti
ModelFormatF1-scoreLatency (ms)
D-FINE-seg STorch FP320.26320.4
D-FINE-seg STensorRT FP320.2646.5
D-FINE-seg STensorRT FP160.2635.0
D-FINE STorch FP320.27618.0
D-FINE STensorRT FP320.2724.5
D-FINE STensorRT FP160.2743.6

TensorRT FP16 -> ~4x faster than Torch FP32, no F1 drop

Edge: Intel N150 (OpenVINO)
ModelFormatF1-scoreLatency (ms)
D-FINE-seg SFP320.264431.2
D-FINE-seg SFP160.264272.2
D-FINE-seg SINT80.243205.0
D-FINE SFP320.272188.4
D-FINE SFP160.271120.8
D-FINE SINT80.25076.3

FP16 -> ~60% faster than FP32, no F1 drop. INT8 -> ~2x faster than FP32 but noticeable F1 drop

Apple Silicon: MacBook Pro M1 Pro (CoreML)
ModelFormatF1-scoreLatency (ms)Model size (mb)
D-FINE S Torch (mps)FP320.27845.241.6
D-FINE S CoreMLFP320.27820.041.8
D-FINE S CoreMLFP160.27032.521.1
D-FINE S CoreMLINT80.26819.811.2
D-FINE-seg S Torch (mps)FP320.26172.348.3
D-FINE-seg S CoreMLFP320.26164.648.3
D-FINE-seg S CoreMLFP160.25979.124.3
D-FINE-seg S CoreMLINT80.25662.112.8

CoreML FP32 -> ~2x faster than Torch MPS, no F1 drop. FP16 is ~30% slower than FP32 on Apple Silicon - the Neural Engine prefers FP32 for this architecture. INT8 shows strong accuracy, same latency on this machine, but 4 times smaller weights size.

Outputs

OutputLocationDescription
Models + logsoutput/models/{exp_name}_{date}/Weights, training metrics, confusion matrix, F1 vs threshold plots, per-class metrics, bench metrics, calculated optimal threshold
Debug imagesoutput/debug_images/Preprocessed training images (with augmentations)
Eval predictionsoutput/eval_preds/Val set predictions with GT (green) and preds (blue)
Bench imagesoutput/bench_imgs/Predictions from all exported models
Inferoutput/infer/Visualizations + YOLO txt annotations (sem_seg: overlays + PNG label maps)
Check errorsoutput/check_errors/FP and FN only - for finding mislabeled samples

Result examples

Training

Training

Benchmarking

Benchmarking

WandB dashboard

WandB

Inference

Citation

If you use D-FINE-seg in your research, please cite:

@article{saakyan2026dfineseg,
  title={D-FINE-seg: Object Detection and Instance Segmentation Framework with multi-backend deployment},
  author={Saakyan Argo and Solntsev Dmitry},
  eprint={2602.23043},
  journal={arXiv preprint arXiv:2602.23043},
  year={2026}
}

And the original D-FINE paper:

@misc{peng2024dfine,
      title={D-FINE: Redefine Regression Task in DETRs as Fine-grained Distribution Refinement},
      author={Yansong Peng and Hebei Li and Peixi Wu and Yueyi Zhang and Xiaoyan Sun and Feng Wu},
      year={2024},
      eprint={2410.13842},
      archivePrefix={arXiv},
      primaryClass={cs.CV}
}

License

This project is licensed under the Apache 2.0 License.

Acknowledgement

The detection core is based on the D-FINE paper and architecture. The mask head design follows the Mask DINO paradigm. Thank you to both teams for their excellent work.

Benchmarks in this project use the VisDrone and TACO datasets. We thank the authors for making these datasets publicly available.