|
## Prerequisites |
|
|
|
- Linux or macOS (Windows is in experimental support) |
|
- Python 3.6+ |
|
- PyTorch 1.3+ |
|
- CUDA 9.2+ (If you build PyTorch from source, CUDA 9.0 is also compatible) |
|
- GCC 5+ |
|
- [MMCV](https://mmcv.readthedocs.io/en/latest/#installation) |
|
|
|
The compatible MMDetection and MMCV versions are as below. Please install the correct version of MMCV to avoid installation issues. |
|
|
|
| MMDetection version | MMCV version | |
|
|:-------------------:|:-------------------:| |
|
| master | mmcv-full>=1.2.4, <1.4.0 | |
|
| 2.11.0 | mmcv-full>=1.2.4, <1.4.0 | |
|
| 2.10.0 | mmcv-full>=1.2.4, <1.4.0 | |
|
| 2.9.0 | mmcv-full>=1.2.4, <1.4.0 | |
|
| 2.8.0 | mmcv-full>=1.2.4, <1.4.0 | |
|
| 2.7.0 | mmcv-full>=1.1.5, <1.4.0 | |
|
| 2.6.0 | mmcv-full>=1.1.5, <1.4.0 | |
|
| 2.5.0 | mmcv-full>=1.1.5, <1.4.0 | |
|
| 2.4.0 | mmcv-full>=1.1.1, <1.4.0 | |
|
| 2.3.0 | mmcv-full==1.0.5 | |
|
| 2.3.0rc0 | mmcv-full>=1.0.2 | |
|
| 2.2.1 | mmcv==0.6.2 | |
|
| 2.2.0 | mmcv==0.6.2 | |
|
| 2.1.0 | mmcv>=0.5.9, <=0.6.1| |
|
| 2.0.0 | mmcv>=0.5.1, <=0.5.8| |
|
|
|
Note: You need to run `pip uninstall mmcv` first if you have mmcv installed. |
|
If mmcv and mmcv-full are both installed, there will be `ModuleNotFoundError`. |
|
|
|
## Installation |
|
|
|
0. You can simply install mmdetection with the following commands: |
|
`pip install mmdet` |
|
|
|
1. Create a conda virtual environment and activate it. |
|
|
|
```shell |
|
conda create -n open-mmlab python=3.7 -y |
|
conda activate open-mmlab |
|
``` |
|
|
|
2. Install PyTorch and torchvision following the [official instructions](https://pytorch.org/), e.g., |
|
|
|
```shell |
|
conda install pytorch torchvision -c pytorch |
|
``` |
|
|
|
Note: Make sure that your compilation CUDA version and runtime CUDA version match. |
|
You can check the supported CUDA version for precompiled packages on the [PyTorch website](https://pytorch.org/). |
|
|
|
`E.g.1` If you have CUDA 10.1 installed under `/usr/local/cuda` and would like to install |
|
PyTorch 1.5, you need to install the prebuilt PyTorch with CUDA 10.1. |
|
|
|
```shell |
|
conda install pytorch cudatoolkit=10.1 torchvision -c pytorch |
|
``` |
|
|
|
`E.g. 2` If you have CUDA 9.2 installed under `/usr/local/cuda` and would like to install |
|
PyTorch 1.3.1., you need to install the prebuilt PyTorch with CUDA 9.2. |
|
|
|
```shell |
|
conda install pytorch=1.3.1 cudatoolkit=9.2 torchvision=0.4.2 -c pytorch |
|
``` |
|
|
|
If you build PyTorch from source instead of installing the prebuilt pacakge, |
|
you can use more CUDA versions such as 9.0. |
|
|
|
3. Install mmcv-full, we recommend you to install the pre-build package as below. |
|
|
|
```shell |
|
pip install mmcv-full -f https://download.openmmlab.com/mmcv/dist/{cu_version}/{torch_version}/index.html |
|
``` |
|
|
|
Please replace `{cu_version}` and `{torch_version}` in the url to your desired one. For example, to install the latest `mmcv-full` with `CUDA 11` and `PyTorch 1.7.0`, use the following command: |
|
|
|
```shell |
|
pip install mmcv-full -f https://download.openmmlab.com/mmcv/dist/cu110/torch1.7.0/index.html |
|
``` |
|
|
|
See [here](https://github.com/open-mmlab/mmcv#install-with-pip) for different versions of MMCV compatible to different PyTorch and CUDA versions. |
|
Optionally you can choose to compile mmcv from source by the following command |
|
|
|
```shell |
|
git clone https://github.com/open-mmlab/mmcv.git |
|
cd mmcv |
|
MMCV_WITH_OPS=1 pip install -e . # package mmcv-full will be installed after this step |
|
cd .. |
|
``` |
|
|
|
Or directly run |
|
|
|
```shell |
|
pip install mmcv-full |
|
``` |
|
|
|
4. Clone the MMDetection repository. |
|
|
|
```shell |
|
git clone https://github.com/open-mmlab/mmdetection.git |
|
cd mmdetection |
|
``` |
|
|
|
5. Install build requirements and then install MMDetection. |
|
|
|
```shell |
|
pip install -r requirements/build.txt |
|
pip install -v -e . # or "python setup.py develop" |
|
``` |
|
|
|
Note: |
|
|
|
a. Following the above instructions, MMDetection is installed on `dev` mode |
|
, any local modifications made to the code will take effect without the need to reinstall it. |
|
|
|
b. If you would like to use `opencv-python-headless` instead of `opencv |
|
-python`, |
|
you can install it before installing MMCV. |
|
|
|
c. Some dependencies are optional. Simply running `pip install -v -e .` will |
|
only install the minimum runtime requirements. To use optional dependencies like `albumentations` and `imagecorruptions` either install them manually with `pip install -r requirements/optional.txt` or specify desired extras when calling `pip` (e.g. `pip install -v -e .[optional]`). Valid keys for the extras field are: `all`, `tests`, `build`, and `optional`. |
|
|
|
### Install with CPU only |
|
|
|
The code can be built for CPU only environment (where CUDA isn't available). |
|
|
|
In CPU mode you can run the demo/webcam_demo.py for example. |
|
However some functionality is gone in this mode: |
|
|
|
- Deformable Convolution |
|
- Modulated Deformable Convolution |
|
- ROI pooling |
|
- Deformable ROI pooling |
|
- CARAFE: Content-Aware ReAssembly of FEatures |
|
- SyncBatchNorm |
|
- CrissCrossAttention: Criss-Cross Attention |
|
- MaskedConv2d |
|
- Temporal Interlace Shift |
|
- nms_cuda |
|
- sigmoid_focal_loss_cuda |
|
- bbox_overlaps |
|
|
|
So if you try to run inference with a model containing above ops you will get an error. The following table lists the related methods that cannot inference on CPU due to dependency on these operators |
|
|
|
| Operator | Model | |
|
| :-----------------------------------------------------: | :----------------------------------------------------------: | |
|
| Deformable Convolution/Modulated Deformable Convolution | DCN、Guided Anchoring、RepPoints、CentripetalNet、VFNet、CascadeRPN、NAS-FCOS、DetectoRS | |
|
| MaskedConv2d | Guided Anchoring | |
|
| CARAFE | CARAFE | |
|
| SyncBatchNorm | ResNeSt | |
|
|
|
**Notice**: MMDetection does not support training with CPU for now. |
|
|
|
### Another option: Docker Image |
|
|
|
We provide a [Dockerfile](https://github.com/open-mmlab/mmdetection/blob/master/docker/Dockerfile) to build an image. Ensure that you are using [docker version](https://docs.docker.com/engine/install/) >=19.03. |
|
|
|
```shell |
|
# build an image with PyTorch 1.6, CUDA 10.1 |
|
docker build -t mmdetection docker/ |
|
``` |
|
|
|
Run it with |
|
|
|
```shell |
|
docker run --gpus all --shm-size=8g -it -v {DATA_DIR}:/mmdetection/data mmdetection |
|
``` |
|
|
|
### A from-scratch setup script |
|
|
|
Assuming that you already have CUDA 10.1 installed, here is a full script for setting up MMDetection with conda. |
|
|
|
```shell |
|
conda create -n open-mmlab python=3.7 -y |
|
conda activate open-mmlab |
|
|
|
conda install pytorch==1.6.0 torchvision==0.7.0 cudatoolkit=10.1 -c pytorch -y |
|
|
|
# install the latest mmcv |
|
pip install mmcv-full==latest+torch1.6.0+cu101 -f https://download.openmmlab.com/mmcv/dist/index.html |
|
|
|
# install mmdetection |
|
git clone https://github.com/open-mmlab/mmdetection.git |
|
cd mmdetection |
|
pip install -r requirements/build.txt |
|
pip install -v -e . |
|
``` |
|
|
|
### Developing with multiple MMDetection versions |
|
|
|
The train and test scripts already modify the `PYTHONPATH` to ensure the script use the MMDetection in the current directory. |
|
|
|
To use the default MMDetection installed in the environment rather than that you are working with, you can remove the following line in those scripts |
|
|
|
```shell |
|
PYTHONPATH="$(dirname $0)/..":$PYTHONPATH |
|
``` |
|
|
|
## Verification |
|
|
|
To verify whether MMDetection and the required environment are installed correctly, we can run sample Python code to initialize a detector and run inference a demo image: |
|
|
|
```python |
|
from mmdet.apis import init_detector, inference_detector |
|
|
|
config_file = 'configs/faster_rcnn/faster_rcnn_r50_fpn_1x_coco.py' |
|
# download the checkpoint from model zoo and put it in `checkpoints/` |
|
# url: http://download.openmmlab.com/mmdetection/v2.0/faster_rcnn/faster_rcnn_r50_fpn_1x_coco/faster_rcnn_r50_fpn_1x_coco_20200130-047c8118.pth |
|
checkpoint_file = 'checkpoints/faster_rcnn_r50_fpn_1x_coco_20200130-047c8118.pth' |
|
device = 'cuda:0' |
|
# init a detector |
|
model = init_detector(config_file, checkpoint_file, device=device) |
|
# inference the demo image |
|
inference_detector(model, 'demo/demo.jpg') |
|
``` |
|
|
|
The above code is supposed to run successfully upon you finish the installation. |
|
|