README.md 4.81 KB
Newer Older
pangjm's avatar
pangjm committed
1

Kai Chen's avatar
Kai Chen committed
2
# mmdetection
Dahua Lin's avatar
Dahua Lin committed
3

Kai Chen's avatar
Kai Chen committed
4
## Introduction
Dahua Lin's avatar
Dahua Lin committed
5

Kai Chen's avatar
Kai Chen committed
6
7
mmdetection is an open source object detection toolbox based on PyTorch. It is
a part of the open-mmlab project developed by [Multimedia Laboratory, CUHK](http://mmlab.ie.cuhk.edu.hk/).
Dahua Lin's avatar
Dahua Lin committed
8

Kai Chen's avatar
Kai Chen committed
9
### Major features
Dahua Lin's avatar
Dahua Lin committed
10
11
12
13
14
15
16

- **Modular Design**

  One can easily construct a customized object detection framework by combining different components. 
  
- **Support of multiple frameworks out of box**

Kai Chen's avatar
Kai Chen committed
17
  The toolbox directly supports popular detection frameworks, *e.g.* Faster RCNN, Mask RCNN, RetinaNet, etc.
Kai Chen's avatar
Kai Chen committed
18
19
20
21
22

- **Efficient**

  All basic bbox and mask operations run on GPUs now.
  The training speed is about 5% ~ 20% faster than Detectron for different models.
Dahua Lin's avatar
Dahua Lin committed
23
24
25
  
- **State of the art**

Dahua Lin's avatar
Dahua Lin committed
26
  This was the codebase of the *MMDet* team, who won the [COCO Detection 2018 challenge](http://cocodataset.org/#detection-leaderboard). 
Kai Chen's avatar
Kai Chen committed
27

Kai Chen's avatar
Kai Chen committed
28
29
Apart from mmdetection, we also released a library [mmcv](https://github.com/open-mmlab/mmcv) for computer vision research,
which is heavily depended on by this toolbox.
Kai Chen's avatar
Kai Chen committed
30
31
32
33
34
35
36

## License

This project is released under the [GPLv3 license](LICENSE).

## Benchmark and model zoo

Kai Chen's avatar
Kai Chen committed
37
38
We provide our baseline results and the comparision with Detectron, the most
popular detection projects. Results and models are available in the [Model zoo](MODEL_ZOO.md).
Kai Chen's avatar
Kai Chen committed
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108

## Installation

Requirements:

- Linux (tested on Ubuntu 16.04 and CentOS 7.2)
- Python 2.7+ or 3.4+
- PyTorch 0.4.1 and torchvision
- OpenCV
- [mmcv](https://github.com/open-mmlab/mmcv)

> Note: Though mmdetection is compatible with Python 2/3, python 3 is recommended and we do not promise future support for Python 2.

Clone the Detectron repository.

```shell
git clone https://github.com/open-mmlab/mmdetection.git
```

Compile cuda extensions.

```shell
cd mmdetection
./compile.sh  # or "PYTHON=python3 ./compile.sh" if you use system python3 without virtual environments
```

Install mmdetection (other dependencies will be installed automatically).

```shell
python(3) setup.py install  # add --user if you want to install it locally
# or "pip install ."
```

> Note: You need to run the installing step each time you pull updates from github. Git commit id will be written to the version number and also saved in trained models.

Prepare COCO dataset

It is recommended to symlink the dataset root to `$MMDETECTION/data`.

```
mmdetection
├── mmdet
├── tools
├── configs
├── data
│   ├── coco
│   │   ├── annotations
│   │   ├── train2017
│   │   ├── val2017
│   │   ├── test2017

```


## Inference with pretrained models

To test a dataset and save the results.

```shell
python tools/test.py <CONFIG_FILE> <CHECKPOINT_FILE> --gpus <GPU_NUM> --out <OUT_FILE>
```

To perform evaluation after testing, add `--eval <EVAL_TYPES>`. Supported types are:

- proposal_fast: eval recalls of proposals with our own codes. (supposed to get the same results as the official evaluation)
- proposal: eval recalls of proposals with the official code provided by COCO.
- bbox: eval box AP with the official code provided by COCO.
- segm: eval mask AP with the official code provided by COCO.
- keypoints: eval keypoint AP with the official code provided by COCO.

Kai Chen's avatar
Kai Chen committed
109
For example, to evaluate Mask R-CNN with 8 GPUs and save the result as `results.pkl`.
Kai Chen's avatar
Kai Chen committed
110
111
112
113
114

```shell
python tools/test.py configs/mask_rcnn_r50_fpn_1x.py <CHECKPOINT_FILE> --gpus 8 --out results.pkl --eval bbox segm
```

Kai Chen's avatar
Kai Chen committed
115
Note: Multiple GPU testing cannot achieve linear acceleration.
Kai Chen's avatar
Kai Chen committed
116

Kai Chen's avatar
Kai Chen committed
117
It is also convenient to visualize the results during testing by adding an argument `--show`.
Kai Chen's avatar
Kai Chen committed
118
119
120
121
122
123
124
125

```shell
python tools/test.py <CONFIG_FILE> <CHECKPOINT_FILE> --show
```


## Train a model

Kai Chen's avatar
Kai Chen committed
126
mmdetection implements distributed training and non-distributed training,
Kai Chen's avatar
Kai Chen committed
127
128
129
130
131
132
133
which uses `MMDistributedDataParallel` and `MMDataParallel` respectively.

We suggest using distributed training even on a single machine, which is faster,
and non-distributed training are left for debugging or other purposes.

### Distributed training

Kai Chen's avatar
Kai Chen committed
134
mmdetection potentially supports multiple launch methods, e.g., PyTorch’s built-in launch utility, slurm and MPI.
Kai Chen's avatar
Kai Chen committed
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164

We provide a training script using the launch utility provided by PyTorch.

```shell
./tools/dist_train.sh <CONFIG_FILE> <GPU_NUM> [optional arguments]
```

Supported arguments are:

- --validate: perform evaluation every k (default=1) epochs during the training.
- --work_dir <WORK_DIR>: if specified, the path in config file will be overwritten.

### Non-distributed training

```shell
python tools/train.py <CONFIG_FILE> --gpus <GPU_NUM> --work_dir <WORK_DIR> --validate
```

Expected results in WORK_DIR:

- log file
- saved checkpoints (every k epochs, defaults=1)
- a symbol link to the latest checkpoint


## High-level APIs

We are working on a set of high-level APIs to make it more convenient to
integrate mmdetection into other projects or act as a hands-on tool for
beginners.