Mmdetection 中文文档(由原英文文档翻译)
一、安装
(一)所需条件
1.Linux 操作系统(官方不支持 Windows 操作系统,如果要在
Windows 上使用,见我博客中的另一篇文章)
2.Python 3.5+
3.PyTorch1.1 或者更高版本
4.CUDA9.0 或者更高版本
5.NCCL2
6.GCC4.9 或更高版本
7.mmcv
8.安装 Anaconda 3(原文中没有此条,但确实需要)
我们已经在以下版本的操作系统或者软件中进行了测试:
OS: Ubuntu 16.04/18.04 and CentOS 7.2
CUDA: 9.0/9.2/10.0/10.1
NCCL: 2.1.15/2.2.13/2.3.7/2.4.2
GCC(G++): 4.9/5.3/5.4/7.3
(二)安装 mmdetection(linux 环境下,windows 环境见我另外
一篇博客)
1.创建 conda 虚拟环境并激活
conda create -n open-mmlab python=3.7 -y
conda activate open-mmlab
2.根据官方说明安装 PyTorch 和 torchvision,如:
conda install pytorch torchvision -c pytorch
3.克隆 mmdetecion 库(国内用户推荐在码云镜像中下载,不是
打广告,确实速度快)
git clone https://github.com/open-mmlab/mmdetection.git
cd mmdetection
4.安装 mmdetection(其他依赖将会自动安装)
pip install mmcv
python setup.py develop # or "pip install -v -e ."
注意:
1.在上面的第 4 步时,使用 git 提交的 id 将被写入版本号。比如
0.6.0+2e7045c.版本也将被保存在训练模型中。这就建议你在每
次运行第 4 步时,将从 github 中获取一些更新。如果 c++/cuda
源码被调整了,那么这一步是必须做的。
2.按照上面的说明,mmdetection 被安装为开发模式,任何本地
代码的修改都将生效,而不需要再重新安装它(除非你提交了一
些命令想要更新版本号)。
3.如果你想要使用 opencv-python-headless 代替 opencv-python,
你可以在安装 MMCV 前安装它。
(三)另外一种方式:Docker 镜像
我们推荐一个 Dockerfile 来建立镜像:
# build an image with PyTorch 1.1, CUDA 10.0 and CUDNN 7.5
docker build -t mmdetection docker/
(四)准备数据集
建议将数据集根目录和$MMDETECTION/data 建立链接。如果你
的目录结构和下面所示的不同,你要在 config 文件中改变相应的
路径。
mmdetection
├── mmdet
├── tools
├── configs
├── data
│ ├── coco
│ │ ├── annotations
│ │ ├── train2017
│ │ ├── val2017
│ │ ├── test2017
│ ├── cityscapes
│ │ ├── annotations
│ │ ├── train
│ │ ├── val
│ ├── VOCdevkit
│ │ ├── VOC2007
│ │ ├── VOC2012
cityscapes annotations 必须使用 cityscapesScripts 工具箱转变为
coco 格式。我们计划提供一个简单易用的转换脚本。暂时,我
们建议 maskrcnn-benchmark 工具箱提供的说明。当使用这个脚
本时,所有的图片需要被放在同一个目录下。在 linux 系统,下
面的例子将训练图片移动到一个目录下:
cd data/cityscapes/
mv train/*/* train/
(五)一个从头开始设置的脚本
下面是一个用 conda 设置 mmdetection 和连接 dataset 路径的全
脚本。
conda create -n open-mmlab python=3.7 -y
conda activate open-mmlab
conda install -c pytorch pytorch torchvision -y
conda install cython -y
git clone https://github.com/open-mmlab/mmdetection.git
cd mmdetection
pip install -v -e .
mkdir data
ln -s $COCO_ROOT data
(六)使用多个 MMDetection 版本
如果在你的计算机上有不止一个 mmdetection,你想要有选择的
使用它们,建议创建多个 conda 环境,在不同的环境中安装不同
的版本。
另外一种方式是,在主要的脚本中(如 train.py, test.py 或者其他
你运行的脚本)插入如下代码:
import os.path as osp
import sys
sys.path.insert(0, osp.join(osp.dirname(osp.abspath(__file__)), '../'))
或者,如果你是暂时使用一个版本,在终端上相应的文件目录下,
运行下面的命令:
export PYTHONPATH=`pwd`:$PYTHONPATH
二、入门
本节提供 MMDetection 使用的基础教程。关于安装说明,
请看上一节。
(一)预训练模型检测(推理)
我们提供了一个测试脚本来评测一个完整的数据集(比如
COCO,PASCAL VOC 等),也提供了一些高级接口来更加容易的整
合其他工程。
1.测试一个数据集。
包括:单 GPU 测试,多 GPU 测试,可视化检测结果。
你可以使用如下命令来测试一个数据集:
# 单 GPU 测试
python tools/test.py ${CONFIG_FILE} ${CHECKPOINT_FILE}
[--out ${RESULT_FILE}] [--eval ${EVAL_METRICS}] [--show]
#多 GPU 测试
./tools/dist_test.sh ${CONFIG_FILE} ${CHECKPOINT_FILE}
${GPU_NUM} [--out ${RESULT_FILE}] [--eval ${EVAL_METRICS}]
可选参数:
RESULT_FILE:输出 pickle 格式结果的文件名。如果不明确指
定,结果将不会被保存到文件。
EVAL_METRICS:被检测物体的结果。允许取以下值:proposal_fast,
proposal, bbox, segm, keypoints.
--show:如果明确,被检测结果将在一个新的窗口上以图片
显示。这个只适用于单 GPU 测试。请确保 GUI 在你的环境中式
可用的,否则你可能会遇到以下错误:cannot connect to X server。
例子:
假设你已经在 checkpoints/文件夹下,下载好了 checkpoints
文件。
测试 Faster R-CNN 模型并显示结果命令如下:
python tools/test.py configs/faster_rcnn_r50_fpn_1x.py
checkpoints/faster_rcnn_r50_fpn_1x_20181010-3d1b3351.pth
--show
测试 Mask R-CNN 模型并预测 bbox 和 maskAP,命令如下:
python tools/test.py configs/mask_rcnn_r50_fpn_1x.py
checkpoints/mask_rcnn_r50_fpn_1x_20181010-069fa190.pth
--out results.pkl --eval bbox segm
用 8 个 GPU 测试 Mask R-CNN 并预测 bbox 和 maskAP,命令
如下:
./tools/dist_test.sh configs/mask_rcnn_r50_fpn_1x.py \
checkpoints/mask_rcnn_r50_fpn_1x_20181010-069fa190.pth \
8 --out results.pkl --eval bbox segm
2.网络摄像头例子
python demo/webcam_demo.py ${CONFIG_FILE}
${CHECKPOINT_FILE} [--device ${GPU_ID}] [--camera-id
${CAMERA-ID}] [--score-thr ${SCORE_THR}]
例子:
python demo/webcam_demo.py
configs/faster_rcnn_r50_fpn_1x.py
checkpoints/faster_rcnn_r50_fpn_1x_20181010-3d1b3351.pth
(二)检测图像的高级 API
1.同步接口
下面是一个构建模型来测试图像的例子
from mmdet.apis import init_detector, inference_detector,
show_result
import mmcv
config_file = 'configs/faster_rcnn_r50_fpn_1x.py'
checkpoint_file =
'checkpoints/faster_rcnn_r50_fpn_1x_20181010-3d1b3351.pt
h'
# build the model from a config file and a checkpoint file
model = init_detector(config_file, checkpoint_file,
device='cuda:0')
# test a single image and show the results
img = 'test.jpg' # or img = mmcv.imread(img), which will
only load it once
result = inference_detector(model, img)
# visualize the results in a new window
show_result(img, result, model.CLASSES)
# or save the visualization results to image files
show_result(img, result, model.CLASSES,
out_file='result.jpg')
# test a video and show the results
video = mmcv.VideoReader('video.mp4')
for frame in video: