笔者最近由于项目学习了一下 mmdetection 工具箱,这里记录一下心得体会!笔者的 mmdetection 版本为 v1.0rc0 (27/07/2019)
目录
参考网址
安装教程
1.打开终端,使用conda创建一个虚拟环境
2.安装Pytorch(2019.09.24安装的是 Pytorch1.2)
3.安装Cython
4.安装mmcv
5.安装mmdetection
6. 测试demo
训练自己的COCO数据
1. 准备coco数据
2. 训练前修改文件
3. 训练
Tips
笔者最开始尝试将mmdetection安装在windows系统中,试了一天也没有成功,果断放弃。然后在linux系统中,半小时就配置完了!所以还是建议参考官方安装配置方法,装在linux系统中较方便!
环境支持:
依赖库:
步骤:
conda create -n open-mmlab python=3.7
conda activate open-mmlab
这两句官方配置代码,conda activate open-mmlab 在笔者的linux系统中并不好用,换成 source activate open-mmlab 才激活虚拟环境。
conda install pytorch=1.2 -c pytorch
安装好以后,进入Python环境,输入 import torch 测试是否安装成功,不报错则说明安装成功
conda install cython
mmcv也是mmdetection团队开发的一个CV库,提供了很多基本功能,所以需要先安装这个。后续你也可以根据自己的需要对这个库进行修改,但是每次修改好你都需要使用如下命令重新安装mmcv,否则你的修改是起不了作用的。
git clone https://github.com/open-mmlab/mmcv.git
cd mmcv
pip install .
注意最后一句 pip install . 后面有个点!!!
笔者在这里遇到过一些问题,安装mmcv之前需要预先安装 pycocotools、terminaltables、Pillow、scikit-image、scipy、matplotlib等依赖库,需要先用 conda install xxx 或者 pip install xxx 等命令安装,再安装mmcv。
最新的(2019.09.24)官方安装代码如下:
git clone https://github.com/open-mmlab/mmdetection.git
cd mmdetection
python setup.py develop
笔者注意到,一些之前的安装教程需要先编译 ./compile.sh 再进行安装,但是最新的库已经取消 ./compile.sh 编译过程!
所以在安装mmdetection时,最主要的还是参考最新的官方安装教程!
将下方的代码写入py文件,并存放到mmdetection文件夹目录下,然后运行。该代码的功能是检测图片中的目标,测试模型是官方给出的Faster-RCNN-fpn-resnet50的模型,运行代码会自动下载模型。由于模型是存储在亚马逊云服务器上,速度可能会稍慢,如果下载失败可以通过网盘链接mmdetection(密码:dpyl)进行下载,存放到mmdetection文件夹目录下,然后修改下方代码的相关部分
注:感谢CSDN博主「藏云阁主」的网盘分享,原文链接:https://blog.csdn.net/hajlyx/article/details/83542167
from mmdet.apis import init_detector, inference_detector, show_result
# 首先下载模型文件https://s3.ap-northeast-2.amazonaws.com/open-mmlab/mmdetection/models/faster_rcnn_r50_fpn_1x_20181010-3d1b3351.pth
config_file = 'configs/faster_rcnn_r50_fpn_1x.py'
checkpoint_file = 'checkpoints/faster_rcnn_r50_fpn_1x_20181010-3d1b3351.pth'
# 初始化模型
model = init_detector(config_file, checkpoint_file)
# 测试一张图片
img = 'test.jpg'
result = inference_detector(model, img)
show_result(img, result, model.CLASSES)
# 测试一系列图片
imgs = ['test1.jpg', 'test2.jpg']
for i, result in enumerate(inference_detector(model, imgs, device='cuda:0')):
show_result(imgs[i], result, model.CLASSES, out_file='result_{}.jpg'.format(i))
上述demo代码笔者亲测可用,附上跑出的第一张图片,虽然fp高的惊人,但还是证明 安装的mmdetection 已经好用了!
也可以在官方给的链接下载预训练模型
https://github.com/open-mmlab/mmdetection/blob/master/MODEL_ZOO.md
注:这里主要参考CSDN博主「Yee_Ko」的原创文章,原文链接:https://blog.csdn.net/gaoyi135/article/details/90613895
需要说明的是官方提供的所有代码都默认使用的是coco格式的数据集,所以不想太折腾的话就把自己的数据集转化成coco数据集格式吧。各种类型数据转coco格式脚本见:转换工具箱 。推荐使用其中的labelme2coco.py文件。
制作好数据集之后,官方推荐coco数据集按照以下的目录形式存储:
mmdetection
├── mmdet
├── tools
├── configs
├── data
│ ├── coco
│ │ ├── annotations
│ │ ├── train2017
│ │ ├── val2017
│ │ ├── test2017
笔者用的模型是 ‘configs/faster_rcnn_r50_fpn_1x.py’
1). 修改 configs/faster_rcnn_r50_fpn_1x.py 中 data_root 为自己的COCO数据集绝对路径
2). 修改 configs/faster_rcnn_r50_fpn_1x.py 中 work_dir 为训练后模型存储路径
官方推荐使用分布式的训练方式,这样速度更快,如果是coco训练集,修改CONFIG_FILE中的pretrained参数,改为你的模型路径,然后运行下方代码
./tools/dist_train.sh /home/*****/mmdetection/configs/faster_rcnn_r50_fpn_1x.py [optional arguments]
如果不想采用分布式的训练方式,或者你只有一块显卡,则运行下方的代码
python tools/train.py /home/*****/mmdetection/configs/faster_rcnn_r50_fpn_1x.py --gpus 0
至此,网络已经开始训练了!训练完成后,利用上述测试demo.py的代码测试即可!
笔者在安装mmdetection的过程中,还遇到过显卡驱动不兼容的问题!
参考了 Linux安装NVIDIA显卡驱动的正确姿势 这篇博文后,只用了两行语句完美解决了问题。
ubuntu-drivers devices # 查询所有ubuntu推荐的驱动
sudo ubuntu-drivers autoinstall
查看显卡信息:
watch -n 0.1 nvidia-smi