File size: 13,204 Bytes
7aaf413
 
bb1d659
 
 
 
 
 
 
 
7aaf413
bb1d659
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
---
license: gpl-3.0
pipeline_tag: object-detection
datasets:
- Zhan1fen/OVCOD-D
tags:
- sddf
- yolo-world
- open-vocabulary-object-detection
- camouflaged-object-detection
---

# SDDF: Specificity-Driven Dynamic Focusing for Open-Vocabulary Camouflaged Object Detection (CVPR 2026)

## Released SDDF Checkpoints

This repository hosts the SDDF checkpoints fine-tuned on OVCOD-D.
The checkpoints are released under **GPL-3.0-only**; see [LICENSE](LICENSE).
They were fine-tuned from the official DOSOD pretrained checkpoints.
Upstream attribution and applicable license notices are retained.

| Model | Checkpoint | AP | AP50 | AP75 |
| :--- | :--- | ---: | ---: | ---: |
| SDDF-S | [sddf-s.pth](https://huggingface.co/Zhan1fen/SDDF/resolve/main/sddf-s.pth) | 48.7 | 71.2 | 51.8 |
| SDDF-M | [sddf-m.pth](https://huggingface.co/Zhan1fen/SDDF/resolve/main/sddf-m.pth) | 54.6 | 74.7 | 58.4 |
| SDDF-L | [sddf-l.pth](https://huggingface.co/Zhan1fen/SDDF/resolve/main/sddf-l.pth) | 57.3 | 77.4 | 61.0 |

Source code, configurations, and training/evaluation scripts:
[Zh1fen/SDDF](https://github.com/Zh1fen/SDDF).
The installation and training instructions below apply to the source-code
repository, not to this weights-only repository. Clone the source repository
before running them.


[![License: GPLv3](https://img.shields.io/badge/License-GPLv3-blue.svg)](LICENSE)
[![Paper](https://img.shields.io/badge/Paper-ArXiv-red.svg)](http://arxiv.org/abs/2603.26109)
[![Venue: CVPR 2026](https://img.shields.io/badge/Venue-CVPR_2026-blue.svg)](#)
[![Dataset](https://img.shields.io/badge/Dataset-HuggingFace-yellow.svg)](https://huggingface.co/datasets/Zhan1fen/OVCOD-D)
[![Dataset](https://img.shields.io/badge/Dataset-ModelScope-green.svg)](https://www.modelscope.cn/datasets/yifengzhan/OVCOD-D)

> **🚧 Update:**
> - **[2026/04/13]:** The OVCOD-D benchmark dataset is released on [Hugging Face](https://huggingface.co/datasets/Zhan1fen/OVCOD-D) and [ModelScope](https://www.modelscope.cn/datasets/yifengzhan/OVCOD-D)!
> - **[2026/03/25]:** Repository created. Our paper has been accepted by CVPR 2026! [**[ArXiv Paper]**](http://arxiv.org/abs/2603.26109)

## πŸ“– Introduction
Open-vocabulary object detection (OVOD) aims to detect known and unknown objects in the open world. However, camouflaged objects pose significant challenges due to high visual similarity with the background. We propose **SDDF**, which leverages specificity-aware sub-descriptions and a dynamic focusing mechanism to enhance the detector's discrimination capability.

## πŸ“Š OVCOD-D Benchmark
[![Hugging Face](https://img.shields.io/badge/%F0%9F%A4%97%20Hugging%20Face-Datasets-orange)](https://huggingface.co/datasets/Zhan1fen/OVCOD-D)

![Benchmark Pipeline](assets/benchmark_new_01.png)
*Figure: Construction pipeline of OVCOD-D dataset. We extend COD10K-D, NC4K-D, and cleaned CAMO-D with YOLO-style detection labels and an additional red imported fire ant nest subset, then reorganize them into 40 base and 47 novel classes. Qwen3-VL-Plus generates fine-grained image descriptions from which we derive a semantic prompt library for open-vocabulary camouflaged object detection.*

## βš™οΈ Architecture
![SDDF Framework](assets/framework_01.png)
*Figure: Overall architecture of the proposed specificity-driven open-vocabulary camouflaged object detector.*

## πŸ† Main Results

### 1. Comparison with Open-Vocabulary Object Detectors
Evaluated on the union of base and novel classes on the OVCOD-D dataset.

| Method | Backbone | Params | Pre-train | AP | AP<sub>50</sub> | AP<sub>75</sub> | AP<sub>m</sub> | AP<sub>l</sub> |
| :--- | :---: | :---: | :---: | :---: | :---: | :---: | :---: | :---: |
| GLIP-T | Swin-T | 232M | O365, GoldG | 22.6 | 31.9 | 28.2 | - | - |
| GLIPv2-T | Swin-T | 232M | O365, GoldG | 25.6 | 36.4 | 29.7 | - | - |
| Grounding DINO-T | Swin-T | 172M | O365, GoldG | 34.8 | 43.9 | 37.7 | - | - |
| YOLO-World-S | YOLOv8-S | 77M | O365, GoldG | 38.5 | 58.0 | 41.4 | 18.7 | 41.1 |
| YOLO-World-M | YOLOv8-M | 92M | O365, GoldG | 43.3 | 62.3 | 46.5 | 24.9 | 46.1 |
| YOLO-World-L | YOLOv8-L | 110M | O365, GoldG | 45.7 | 63.2 | 48.9 | 22.9 | 48.4 |
| YOLOE-S | YOLOv8-S | 78M | O365, GoldG | 38.7 | 46.0 | 40.8 | - | - |
| YOLOE-M | YOLOv8-M | 94M | O365, GoldG | 39.9 | 47.7 | 42.7 | - | - |
| DOSOD-S | YOLOv8-S | 75M | O365, GoldG | 44.8 | 67.4 | 46.8 | 22.4 | 47.2 |
| DOSOD-M | YOLOv8-M | 90M | O365, GoldG | 51.8 | 73.8 | 55.6 | 27.9 | 54.5 |
| DOSOD-L | YOLOv8-L | 108M | O365, GoldG | 53.4 | 73.1 | 56.2 | 26.4 | 56.3 |
| **SDDF-S (Ours)** | **YOLOv8-S** | **76M** | **O365, GoldG** | **48.7** | **71.2** | **51.8** | **25.5** | **51.4** |
| **SDDF-M (Ours)** | **YOLOv8-M** | **91M** | **O365, GoldG** | **54.6** | **74.7** | **58.4** | **29.7** | **57.3** |
| **SDDF-L (Ours)** | **YOLOv8-L** | **109M** | **O365, GoldG** | **57.3** | **77.4** | **61.0** | **32.1** | **60.1** |

### 2. Comparison with SOTA COD Methods
Comparison with State-of-the-Art Camouflaged Object Detection methods.

| Method | Backbone | AP | AP<sub>50</sub> | AP<sub>75</sub> |
| :--- | :---: | :---: | :---: | :---: |
| SINet-V2 | ResNet-50 | 40.2 | 69.3 | 39.4 |
| FSPNet | Swin-T | 47.9 | 76.2 | 49.4 |
| CamoFormer | Swin-T | 55.6 | 80.2 | 59.0 |
| HDPNet | ViT-B | 56.3 | **81.5** | 59.6 |
| **SDDF-L (Ours)** | **YOLOv8-L** | **57.3** | 77.4 | **61.0** |

## πŸ–ΌοΈ Qualitative Results
![Qualitative Results](assets/qualitative.png)
*Figure: Visualization of detection bounding boxes and heatmap representations.*

## Installation

Verified environment: Python 3.8, PyTorch 2.1.2, CUDA 12.1, MMCV 2.1.0,
MMDetection 3.3.0, MMEngine 0.10.3, and MMYOLO 0.6.0.

```bash
conda create -n sddf python=3.8 -y
conda activate sddf

# Example for CUDA 12.1. Select another command from pytorch.org if needed.
pip install torch==2.1.2 torchvision==0.16.2 --index-url https://download.pytorch.org/whl/cu121

pip install mmcv==2.1.0 \
    -f https://download.openmmlab.com/mmcv/dist/cu121/torch2.1/index.html
pip install -r requirements.txt
```

The configuration snapshot used by SDDF is bundled in
`third_party/mmyolo/configs/`, together with its upstream license. No separate
MMYOLO clone is needed. The MMYOLO Python package is still installed by
`requirements.txt` (`mmyolo==0.6.0`); the bundled directory is not a complete
MMYOLO source checkout and does not replace the pip package.

## Dataset

Download OVCOD-D from [Hugging Face](https://huggingface.co/datasets/Zhan1fen/OVCOD-D)
or [ModelScope](https://www.modelscope.cn/datasets/yifengzhan/OVCOD-D), and
extract it to `data/OVCOD-D/`.

If the dataset was downloaded before **2026-10-12**, please download the latest
versions of these three generated files and place them in the corresponding
directories:

```text
data/OVCOD-D/annotations/train.json
data/OVCOD-D/annotations/test.json
data/OVCOD-D/texts/generated_class_texts_id.json
```

Packages downloaded on or after **2026-10-08** already include these files.
The conversion script is retained at
`tools/generate_ovcod_d_annotations.py` for dataset maintenance.

## DOSOD Initialization Checkpoints

Download the official DOSOD S/M/L checkpoints from the
[D-Robotics/DOSOD Hugging Face repository](https://huggingface.co/D-Robotics/DOSOD):

```bash
mkdir -p weights
wget -P weights https://huggingface.co/D-Robotics/DOSOD/resolve/main/dosod_mlp3x_s.pth
wget -P weights https://huggingface.co/D-Robotics/DOSOD/resolve/main/dosod_mlp3x_m.pth
wget -P weights https://huggingface.co/D-Robotics/DOSOD/resolve/main/dosod_mlp3x_l.pth
```

Use the checkpoint matching the selected model scale.

Security note: the verified PyTorch 2.1.2 environment is retained for
reproducibility, not for safely loading untrusted files. Loading a malicious
`.pth`/`.pt` file can execute code on your machine. Only load checkpoints and
serialized text embeddings that you generated yourself or obtained from trusted,
verified sources. This applies to initialization, training resume, evaluation,
and checkpoint conversion. Do not load files of unknown origin or files that
may have been tampered with. See the
[PyTorch security advisory](https://github.com/pytorch/pytorch/security/advisories/GHSA-53q9-r3pm-6pq6).

## Training and Evaluation

Run from the repository root; the last argument is the GPU count.

```bash
bash tools/dist_train.sh configs/sddf/sddf_yolov8_s_ovcod_d.py 8
bash tools/dist_train.sh configs/sddf/sddf_yolov8_m_ovcod_d.py 8
bash tools/dist_train.sh configs/sddf/sddf_yolov8_l_ovcod_d.py 8
```

Evaluate a checkpoint:

```bash
bash tools/dist_test.sh configs/sddf/sddf_yolov8_l_ovcod_d.py \
    /path/to/checkpoint.pth 8
```

Evaluation uses the released OVCOD-D annotations with `mmdet.LVISMetric`
for both periodic validation and standalone testing. The annotations have
empty `neg_category_ids` lists, so predictions for categories without ground-truth
annotations in an image are ignored rather than counted as false positives.
Reported AP values follow this evaluation protocol.

Testing uniformly samples 10 images and saves side-by-side ground-truth and
prediction visualizations to
`work_dirs/<config>/<timestamp>/vis_data/detections/`. The same directory
contains `summary.json` with the classes, box counts, and top prediction score
for each saved image. By default, each visualization draws only the
highest-scoring prediction. Use `--show-max-predictions 2` to draw the Top-2
boxes. Class-agnostic NMS with IoU 0.5 is applied only to keep saved images
readable:

```bash
bash tools/dist_test.sh configs/sddf/sddf_yolov8_l_ovcod_d.py \
    /path/to/checkpoint.pth 8 --show-num 12 \
    --show-max-predictions 2 --show-nms-iou-thr 0.5
```

Pass `--no-save-vis` to run evaluation without saving detection images.

This release supports SDDF training and offline evaluation, including detection
visualization. Reparameterized deployment and export are not provided.

The sub-description bank is a runtime cache, not part of the checkpoint
`state_dict`. `SubTextBankInjectHook` rebuilds it for training, validation, and
standalone testing from `class_text_path`. A model used outside these runners
must explicitly call `head_module.set_sub_text_bank(...)` after loading weights.
The hook records a SHA-256 of the ordered descriptions and rebuilds the cache
when descriptions, text-encoder weights, model, device, or dtype change.
Use the same description file for reproducing a result. Keep its category-key
order unchanged while bank-order canonicalization is pending.

Run the smoke test:

```bash
pip install -r requirements-dev.txt
pytest -q
```

## License and Third-Party Code

SDDF is distributed as a derivative work under the GNU General Public License
version 3. SDDF-authored source contributions are licensed under
`GPL-3.0-only`. See [LICENSE](LICENSE) for the full terms and
[third_party/THIRD_PARTY_NOTICES.md](https://github.com/Zh1fen/SDDF/blob/main/third_party/THIRD_PARTY_NOTICES.md) for code provenance,
upstream copyrights, applicable third-party licenses, and modification notices.

This implementation builds on [YOLO-World](https://github.com/AILab-CVC/YOLO-World),
[DOSOD](https://github.com/D-Robotics-AI-Lab/DOSOD), and
[MMYOLO](https://github.com/open-mmlab/mmyolo), whose repository licenses are GPLv3.
OpenMMLab code with Apache-2.0 notices retains those terms; the corresponding
license is included in [LICENSES/Apache-2.0.txt](https://github.com/Zh1fen/SDDF/blob/main/LICENSES/Apache-2.0.txt).
Upstream copyright and license notices must be retained when redistributing code.

The source-code license does not automatically license the OVCOD-D dataset,
external pretrained checkpoints, downloaded model code, or the paper figures in
`assets/`. The figures are included with the SDDF authors' permission for this
repository's documentation; this does not grant a separate blanket license for
reuse of the figures or their underlying images. Consult the respective rights
holders and distribution terms for these non-code materials. External DOSOD
checkpoints are linked to their official source, not redistributed in this repository.

When creating a source archive that includes `third_party/`, also include its
original copyright, LICENSE, and applicable NOTICE files, together with the root
LICENSE, `LICENSES/`, and `third_party/THIRD_PARTY_NOTICES.md`. The bundled
MMYOLO configuration snapshot includes `third_party/mmyolo/LICENSE`; another copy is retained at
[LICENSES/MMYOLO-GPL-3.0.txt](https://github.com/Zh1fen/SDDF/blob/main/LICENSES/MMYOLO-GPL-3.0.txt).

## πŸ“§ Contact
If you have any questions, please feel free to contact us or open an issue.

## πŸ“ Citation
If you find our work helpful for your research, please consider citing:

```bibtex
@InProceedings{Liang_2026_CVPR,
    author    = {Liang, Jiaming and Zhan, Yifeng and Liu, Chunlin and Zheng, Weihua and Peng, Bingye and Liang, Qiwei and Cai, Boyang and Mai, Xiaochun and Nie, Qiang},
    title     = {SDDF: Specificity-Driven Dynamic Focusing for Open-Vocabulary Camouflaged Object Detection},
    booktitle = {Proceedings of the IEEE/CVF Conference on Computer Vision and Pattern Recognition (CVPR)},
    month     = {June},
    year      = {2026},
    pages     = {13049-13058}
}
```