Mask R-CNN Benchmark是一个完全由PyTorch 1.0写成,快速、模块化的Faster R-CNN和Mask R-CNN组件。该项目旨在让用户更容易地创建一种模块,实现对图片中物品的识别与分割。具有以下亮点:
【参考】
https://github.com/facebookresearch/maskrcnn-benchmark
https://mp.weixin.qq.com/s/XSGYlNO1wtRrEv2ivJvonA
注:其中Detectron 是 Facebook AI Research 实现顶尖目标检测算法(包括 Mask R-CNN)的软件系统。该系统是基于 Python 和深度学习框架 Caffe 2 而构建的。mmdetection 是商汤和港中文近日联合开源的基于 PyTorch 的开源目标检测工具包。
在使用maskrcnn-benchmark跑自己的数据的时候一启动就异常退出,提示如下:
/opt/conda/conda-bld/pytorch-nightly_1540809619630/work/aten/src/THCUNN/ClassNLLCriterion.cu:105:
void cunn_ClassNLLCriterion_updateOutput_kernel(Dtype *, Dtype *, Dtype *, long *,
Dtype *, int, int, int, int, long) [with Dtype = float, Acctype = float]: block:
[0,0,0], thread: [29,0,0] Assertion `t >= 0 && t < n_classes` failed.
排查发现是maskrcnn_benchmark/config/defaults.py中_C.MODEL.ROI_BOX_HEAD.NUM_CLASSES选项配置错误。
因为默认是使用的COCO数据集,配置的是81。我自己的数据集只有4个分类,我直接就写成了4,而忽略了"背景"这个类别,
所以正确的配置应该是5。另外还有一点要注意的是,因为"背景"类别的id默认为0,所以在参照coco数据集生成*.json格式的标注文件时,categories字段中的类别id应该是从1开始,而非0。
"categories": [ # 类别描述
{
"supercategory": "person", # 主类别
"id": 1, # 类对应的id,通常从1开始标记类别id,因为0默认为背景。
"name": "person" # 子类别
},
{
"supercategory": "vehicle",
"id": 2,
"name": "bicycle"
},
{
"supercategory": "vehicle",
"id": 3,
"name": "car"
},
……
……
]