Highlights
- Support new methods: [AutoAssign](https://arxiv.org/abs/2007.03496), [YOLOF](https://arxiv.org/abs/2103.09460), and [Deformable DETR](https://arxiv.org/abs/2010.04159)
- Stable support of exporting models to ONNX with batched images and dynamic shape (5039)
Backwards Incompatible Changes
MMDetection is going through big refactoring for more general and convenient usages during the releases from v2.12.0 to v2.15.0 (maybe longer).
In v2.12.0 MMDetection inevitably brings some BC-breakings including the MMCV dependency, model initialization, model registry, and mask AP evaluation.
- MMCV version. MMDetection v2.12.0 relies on the newest features in MMCV 1.3.3, including `BaseModule` for unified parameter initialization, model registry, and the CUDA operator `MultiScaleDeformableAttn` for [Deformable DETR](https://arxiv.org/abs/2010.04159). Note that MMCV 1.3.2 already contains all the features used by MMDet but has known issues. Therefore, we recommend users to skip MMCV v1.3.2 and use v1.3.2, though v1.3.2 might work for most of the cases.
- Unified model initialization (4750). To unify the parameter initialization in OpenMMLab projects, MMCV supports `BaseModule` that accepts `init_cfg` to allow the modules' parameters to be initialized in a flexible and unified manner. Now the users need to explicitly call `model.init_weights()` in the training script to initialize the model (as in [here](https://github.com/open-mmlab/mmdetection/blob/master/tools/train.py#L162), previously this was handled by the detector. The models in MMDetection have been re-benchmarked to ensure accuracy in PR 4750. **The downstream projects should update their code accordingly to use MMDetection v2.12.0**.
- Unified model registry (5059). To easily use backbones implemented in other OpenMMLab projects, MMDetection migrates to inherit the model registry created in MMCV (760). In this way, as long as the backbone is supported in an OpenMMLab project and that project also uses the registry in MMCV, users can use that backbone in MMDetection by simply modifying the config without copying the code of that backbone into MMDetection.
- Mask AP evaluation (4898). In the previous version, the areas of masks are calculated through the bounding boxes when calculating the mask AP of small, medium, and large instances. To really use the area of masks, we pop the key `bbox` during mask AP calculation. This change does not affect the overall mask AP evaluation and aligns the mask AP of similar models in other repos like Detectron2.
New Features
- Support paper [AutoAssign: Differentiable Label Assignment for Dense Object Detection](https://arxiv.org/abs/2007.03496) (#4295)
- Support paper [You Only Look One-level Feature](https://arxiv.org/abs/2103.09460) (#4295)
- Support paper [Deformable DETR: Deformable Transformers for End-to-End Object Detection](https://arxiv.org/abs/2010.04159) (#4778)
- Support calculating IoU with FP16 tensor in `bbox_overlaps` to save memory and keep speed (4889)
- Add `__repr__` in custom dataset to count the number of instances (4756)
- Add windows support by updating requirements.txt (5052)
- Stable support of exporting models to ONNX with batched images and dynamic shape, including SSD, FSAF, FCOS, YOLOv3, RetinaNet, Faster R-CNN, and Mask R-CNN (5039)
Improvements
- Use MMCV `MODEL_REGISTRY` (5059)
- Unified parameter initialization for more flexible usage (4750)
- Rename variable names and fix docstring in anchor head (4883)
- Support training with empty GT in Cascade RPN (4928)
- Add more details of usage of `test_robustness` in documentation (4917)
- Changing to use `pycocotools` instead of `mmpycocotools` to fully support Detectron2 and MMDetection in one environment (4939)
- Update torch serve dockerfile to support dockers of more versions (4954)
- Add check for training with the single class dataset (4973)
- Refactor transformer and DETR Head (4763)
- Update FPG model zoo (5079)
- More accurate mask AP of small/medium/large instances (4898)
Bug Fixes
- Fix bug in mean_ap.py when calculating mAP by 11 points (4875)
- Fix error when key `meta` is not in old checkpoints (4936)
- Fix hanging bug when training with empty GT in VFNet, GFL, and FCOS by changing the place of `reduce_mean` (4923, 4978, 5058)
- Fix asyncronized inference error and provide related demo (4941)
- Fix IoU losses dimensionality unmatch error (4982)
- Fix torch.randperm whtn using PyTorch 1.8 (5014)
- Fix empty bbox error in `mask_head` when using CARAFE (5062)
- Fix `supplement_mask` bug when there are zero-size RoIs (5065)
- Fix testing with empty rois in RoI Heads (5081)
New Contributors
* ZephyrusKylin made their first contribution in https://github.com/open-mmlab/mmdetection/pull/4875
* agim-a made their first contribution in https://github.com/open-mmlab/mmdetection/pull/4936
* li-phone made their first contribution in https://github.com/open-mmlab/mmdetection/pull/4889
* Adamdad made their first contribution in https://github.com/open-mmlab/mmdetection/pull/4756
* hjin2902 made their first contribution in https://github.com/open-mmlab/mmdetection/pull/4943
* adursun made their first contribution in https://github.com/open-mmlab/mmdetection/pull/5013
* quincylin1 made their first contribution in https://github.com/open-mmlab/mmdetection/pull/5031
**Full Changelog**: https://github.com/open-mmlab/mmdetection/compare/v2.11.0...v2.12.0