Spaces:
Runtime error
Runtime error
# Compatibility with Other Libraries | |
## Compatibility with Detectron (and maskrcnn-benchmark) | |
Detectron2 addresses some legacy issues left in Detectron. As a result, their models | |
are not compatible: | |
running inference with the same model weights will produce different results in the two code bases. | |
The major differences regarding inference are: | |
- The height and width of a box with corners (x1, y1) and (x2, y2) is now computed more naturally as | |
width = x2 - x1 and height = y2 - y1; | |
In Detectron, a "+ 1" was added both height and width. | |
Note that the relevant ops in Caffe2 have [adopted this change of convention](https://github.com/pytorch/pytorch/pull/20550) | |
with an extra option. | |
So it is still possible to run inference with a Detectron2-trained model in Caffe2. | |
The change in height/width calculations most notably changes: | |
- encoding/decoding in bounding box regression. | |
- non-maximum suppression. The effect here is very negligible, though. | |
- RPN now uses simpler anchors with fewer quantization artifacts. | |
In Detectron, the anchors were quantized and | |
[do not have accurate areas](https://github.com/facebookresearch/Detectron/issues/227). | |
In Detectron2, the anchors are center-aligned to feature grid points and not quantized. | |
- Classification layers have a different ordering of class labels. | |
This involves any trainable parameter with shape (..., num_categories + 1, ...). | |
In Detectron2, integer labels [0, K-1] correspond to the K = num_categories object categories | |
and the label "K" corresponds to the special "background" category. | |
In Detectron, label "0" means background, and labels [1, K] correspond to the K categories. | |
- ROIAlign is implemented differently. The new implementation is [available in Caffe2](https://github.com/pytorch/pytorch/pull/23706). | |
1. All the ROIs are shifted by half a pixel compared to Detectron in order to create better image-feature-map alignment. | |
See `layers/roi_align.py` for details. | |
To enable the old behavior, use `ROIAlign(aligned=False)`, or `POOLER_TYPE=ROIAlign` instead of | |
`ROIAlignV2` (the default). | |
1. The ROIs are not required to have a minimum size of 1. | |
This will lead to tiny differences in the output, but should be negligible. | |
- Mask inference function is different. | |
In Detectron2, the "paste_mask" function is different and should be more accurate than in Detectron. This change | |
can improve mask AP on COCO by ~0.5% absolute. | |
There are some other differences in training as well, but they won't affect | |
model-level compatibility. The major ones are: | |
- We fixed a [bug](https://github.com/facebookresearch/Detectron/issues/459) in | |
Detectron, by making `RPN.POST_NMS_TOPK_TRAIN` per-image, rather than per-batch. | |
The fix may lead to a small accuracy drop for a few models (e.g. keypoint | |
detection) and will require some parameter tuning to match the Detectron results. | |
- For simplicity, we change the default loss in bounding box regression to L1 loss, instead of smooth L1 loss. | |
We have observed that this tends to slightly decrease box AP50 while improving box AP for higher | |
overlap thresholds (and leading to a slight overall improvement in box AP). | |
- We interpret the coordinates in COCO bounding box and segmentation annotations | |
as coordinates in range `[0, width]` or `[0, height]`. The coordinates in | |
COCO keypoint annotations are interpreted as pixel indices in range `[0, width - 1]` or `[0, height - 1]`. | |
Note that this affects how flip augmentation is implemented. | |
[This article](https://ppwwyyxx.com/blog/2021/Where-are-Pixels/) | |
explains more details on the above mentioned issues | |
about pixels, coordinates, and "+1"s. | |
## Compatibility with Caffe2 | |
As mentioned above, despite the incompatibilities with Detectron, the relevant | |
ops have been implemented in Caffe2. | |
Therefore, models trained with detectron2 can be converted in Caffe2. | |
See [Deployment](../tutorials/deployment.md) for the tutorial. | |
## Compatibility with TensorFlow | |
Most ops are available in TensorFlow, although some tiny differences in | |
the implementation of resize / ROIAlign / padding need to be addressed. | |
A working conversion script is provided by [tensorpack Faster R-CNN](https://github.com/tensorpack/tensorpack/tree/master/examples/FasterRCNN/convert_d2) | |
to run a standard detectron2 model in TensorFlow. | |