去年十二月facebook发布了pytorch1.0,并且基于pytorch1.0的MASK RCNN和FPN实现也开源了。其实现相较于Detectron拥有更快的训练速度和更低的GPU内存占用。具体可以参考:
https://github.com/facebookresearch/maskrcnn-benchmark
pytorch1.0安装请参考pytorch官网,maskrcnn-benchmask安装请参考:
https://github.com/facebookresearch/maskrcnn-benchmark/blob/master/INSTALL.md
demo测试
安装完成后跑一下demo以验证安装,在maskrcnn-benchmask根目录下(接下来所有命令默认在此目录下)输入以下命令(要有摄像头哦):
cd demo
# by default, it runs on the GPU
# for best results, use min-image-size 800
python webcam.py --min-image-size 800
你会看到近乎实时的检测效果。
训练自己的数据集
maskrcnn-benchmask在更新后已经支持voc格式的数据集,所以我们就不用再转换数据集格式了。
数据准备
1、在根目录下新建experiments文件夹并在其中新建cfgs和result两个文件夹。从configs中拷贝e2e_faster_rcnn_R_50_FPN_1x.yaml文件到cfgs文件夹中作为我们的配置文件。
2、在根目录下新建pre_train文件夹用以存放预训练模型。从https://github.com/facebookresearch/maskrcnn-benchmark/blob/master/MODEL_ZOO.md上下载预训练模型到此文件夹中。
在该网址中点击上图中的蓝色id即可下载。
3、创建数据集链接:
ln -s /path_to_VOCdevkit_dir datasets/voc
4、修改配置文件,打开上面我们拷贝的配置文件:
主要修改内容如下:
MODEL.WEIGHT:我们刚才下载的预训练模型路径
DATASETS.TRAIN:你自己的数据集
DATASETS.TEST:你自己的数据集
数据集指定时如果仅有一个数据集不要忘了逗号
在配置文件最后一行加上你自己的结果保存路径:
OUTPUT_DIR:./experiments/result
最近在github上看到关于参数设置的一些问题,在这里更新一下。
关于maskrcnn_banchmask/config/default.py中的
MODEL.RPN.FPN_POST_NMS_TOP_N_TRAIN 2000
这里的2000是每个batch在NMS之后选取2000个锚框,而不是每张图片选取2000个,这个参数的设置规则:1000 × images_per_GPU。
通常来说这个是不用更改的,我们只需要根据自己的GPU数量设置
_C.SOLVER.IMS_PER_BATCH = 16 // 16是2×8,即有8个GPU
_C.TEST.IMS_PER_BATCH = 8 //1×8
代码修改
使用预训练模型需要修改部分代码,主要由于自己的数据集类别和预训练的81类对不上。
1、修改maskrcnn-benchmask/config/default.py:
_C.MODEL.ROI_BOX_HEAD.NUM_CLASSES=4
修改为自己的数据集类别加1
_C.SOLVER.CHECKPOINT_PERIOD=10000
修改为10000(可选),设置大点是为了减少保存的模型数
增加_C.MODEL.ONLY_LOAD_BACKBONE=False
2、修改配置文件
在配置文件中增加一项:
MODEL: