目前网络上有很多mmdetection的安装方法和训练VOC的方法,大多使用conda安装,但最近清华源被禁用以及mmdetection跟新之后,很多博客的方法不适用了,本人也踩了很多坑终于训练成功,希望本篇博客能给大家一些帮助。
// 创建名为mmdetection的虚拟环境
conda create -n mmdetection python=3.7
// 进入虚拟环境
conda activate mmdetection
conda install cython
本人首先采用官网的方式pip安装mmcv,但是在运行mmdetection时,报了一个调用mmcv里面一个函数的错误,卸载重装都没用。故采用其他方法安装
git clone https://github.com/open-mmlab/mmcv.git
cd mmcv
pip install .
因为清华源被禁用,所以首先采用默认源进行下载
// 移除清华源,恢复默认源
conda config --remove-key channels
// 下载pytorch1.1.0版本,本人使用的是cuda9.0
conda install pytorch=1.1.0 cuda90 //官网给出后面还要加上 -c pytorch,因为使用默认源,所以不用加
git clone https://github.com/open-mmlab/mmdetection.git
cd mmdetection
python3 setup.py develop
mmdetection
├── mmdet
├── tools
├── configs
├── data #手动创建data、VOCdevkit、VOC2007、Annotations、JPEGImages、ImageSets、Main这些文件夹
│ ├── VOCdevkit
│ │ ├── VOC2007
│ │ │ ├── Annotations #把test.txt、trainval.txt对应的xml文件放在这
│ │ │ ├── JPEGImages #把test.txt、trainval.txt对应的图片放在这
│ │ │ ├── ImageSets
│ │ │ │ ├── Main
│ │ │ │ │ ├── test.txt
│ │ │ │ │ ├── trainval.txt
修改mmdetection/mmdet/core/evaluation下的class_names.py中的voc_classes,将 其改为要训练的数据集的类别名称。如果不改的话,最后测试的结果的名称还会是’aeroplane’, ‘bicycle’, ‘bird’, ‘boat’,…这些。改完后如图:
修改mmdetection/mmdet/datasets/voc.py 下的类别,如果只有一个类,要加上一个逗号,否则将会报错,如图:
这里的配置文件指的是mmdetection/configs下一堆的名称诸如cascade_rcnn_r50_fpn_1x.py的文件,也就是你要训练的网络,不过mmdetecion已经把模型搭好,直接调用就好。默认情况下,这些配置文件的使用的是coco格式,只有mmdetection/pascal_voc文件夹下的模型是使用voc格式,不过数量很少,只有三个。
如果要使用其他模型,则需要修改配置文件,这里以cascade_rcnn_r50_fpn_1x.py为例
cascade_rcnn_r50_fpn_1x.py的位置在mmdetection/configs/cascade_rcnn_r50_fpn_1x.py
首先,全局搜索num_classes,将其值改为: 类别数+1(我有38类,因此改为39)。把搜索到的num_classes全改掉,cascade_rcnn_r50_fpn_1x.py改了三次。如图:
接着修改cascade_rcnn_r50_fpn_1x.py中的dataset settings,全局搜索dataset settings就能找到在哪。修改后如图:
正常来说经过4.2步骤后就可以进行训练了,但本人在运行train.py时,遇到如下错误:
通过debug找到了问题所在,build_loader.py中的batch_size变量赋值为0,所以本人直接手动给batch_size赋值为2,问题解决。由于还没有细致的解读源码,不知这样更改是否合适,如有错误,还请不瑟吝教。
进入mmdetection所在文件夹,输入:
python3 tools/train.py configs/cascade_rcnn_r50_fpn_1x.py
不出意外的话,你的终端就已经开始输出训练过程了。
每迭代完一个epoch,会保存一次模型参数(后缀为.pth),位于mmdetection/work_dirs/cascade_rcnn_r50_fpn_1x/。其中work_dirs为自动生成不需要手动创建。
由于本人的工作原因,并没有跑完模型,所以没有测试。如需测试模型,请转到此篇文章https://zhuanlan.zhihu.com/p/70545482