DJW c16313bb6a 第一次提交 | há 9 meses atrás | |
---|---|---|
.. | ||
configs | há 9 meses atrás | |
diffusiondet | há 9 meses atrás | |
model_converters | há 9 meses atrás | |
README.md | há 9 meses atrás |
This is an implementation of DiffusionDet based on MMDetection, MMCV, and MMEngine.
Download the DiffusionDet released model.
Convert model from DiffusionDet version to MMDetection version. We give a sample script
to convert DiffusionDet-resnet50
model. Users can download the corresponding models from here.
python projects/DiffusionDet/model_converters/diffusiondet_resnet_to_mmdet.py ${DiffusionDet ckpt path} ${MMDetectron ckpt path}
python tools/test.py projects/DiffusionDet/configs/diffusiondet_r50_fpn_500-proposals_1-step_crop-ms-480-800-450k_coco.py ${CHECKPOINT_PATH}
Note: During inference time, DiffusionDet will randomly generate noisy boxes,
which may affect the AP results. If users want to get the same result every inference time, setting seed is a good way.
We give a table to compare the inference results on ResNet50-500-proposals
between DiffusionDet and MMDetection.
Config | Step | AP |
---|---|---|
DiffusionDet (released results) | 1 | 45.5 |
DiffusionDet (seed=0) | 1 | 45.66 |
MMDetection (seed=0) | 1 | 45.7 |
MMDetection (random seed) | 1 | 45.6~45.8 |
DiffusionDet (released results) | 4 | 46.1 |
DiffusionDet (seed=0) | 4 | 46.38 |
MMDetection (seed=0) | 4 | 46.4 |
MMDetection (random seed) | 4 | 46.2~46.4 |
seed=0
means hard set seed before generating random boxes.
# hard set seed=0 before generating random boxes
seed = 0
random.seed(seed)
torch.manual_seed(seed)
# torch.cuda.manual_seed(seed)
torch.cuda.manual_seed_all(seed)
...
noise_bboxes_raw = torch.randn(
(self.num_proposals, 4),
device=device)
...
random seed
means do not hard set seed before generating random boxes.In MMDetection's root directory, run the following command to train the model:
python tools/train.py projects/DiffusionDet/configs/diffusiondet_r50_fpn_500-proposals_1-step_crop-ms-480-800-450k_coco.py
For multi-gpu training, run:
python -m torch.distributed.launch --nnodes=1 --node_rank=0 --nproc_per_node=${NUM_GPUS} --master_port=29506 --master_addr="127.0.0.1" tools/train.py projects/DiffusionDet/configs/diffusiondet_r50_fpn_500-proposals_1-step_crop-ms-480-800-450k_coco.py
In MMDetection's root directory, run the following command to test the model:
# for 1 step inference
# test command
python tools/test.py projects/DiffusionDet/configs/diffusiondet_r50_fpn_500-proposals_1-step_crop-ms-480-800-450k_coco.py ${CHECKPOINT_PATH}
# for 4 steps inference
# test command
python tools/test.py projects/DiffusionDet/configs/diffusiondet_r50_fpn_500-proposals_1-step_crop-ms-480-800-450k_coco.py ${CHECKPOINT_PATH} --cfg-options model.bbox_head.sampling_timesteps=4
Note: There is no difference between 1 step or 4 steps (or other multi-step) during training. Users can set different steps during inference through --cfg-options model.bbox_head.sampling_timesteps=${STEPS}
, but larger sampling_timesteps
will affect the inference time.
Here we provide the baseline version of DiffusionDet with ResNet50 backbone.
To find more variants, please visit the official model zoo.
Backbone | Style | Lr schd | AP (Step=1) | AP (Step=4) | Config | Download |
---|---|---|---|---|---|---|
R-50 | PyTorch | 450k | 44.5 | 46.2 | config | model | log |
DiffusionDet is under the CC-BY-NC 4.0 license. Users should be careful about adopting these features in any commercial matters.
If you find DiffusionDet is useful in your research or applications, please consider giving a star 🌟 to the official repository and citing DiffusionDet by the following BibTeX entry.
@article{chen2022diffusiondet,
title={DiffusionDet: Diffusion Model for Object Detection},
author={Chen, Shoufa and Sun, Peize and Song, Yibing and Luo, Ping},
journal={arXiv preprint arXiv:2211.09788},
year={2022}
}
[x] Milestone 1: PR-ready, and acceptable to be one of the projects/
.
[x] Milestone 2: Indicates a successful model implementation.
[ ] Milestone 3: Good to be a part of our core package!
[ ] Move your modules into the core package following the codebase's file hierarchy structure.