Spaces:
Running
on
Zero
Running
on
Zero
| # 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. | |