MaskRCNN-Benchmark框架Assertion 't ** 0 && t ** n_classes' failed可能的原因

        Mask R-CNN Benchmark是一个完全由PyTorch 1.0写成,快速、模块化的Faster R-CNN和Mask R-CNN组件。该项目旨在让用户更容易地创建一种模块,实现对图片中物品的识别与分割。具有以下亮点:

  • PyTorch 1.0:相当或者超越 Detectron 准确率的 RPN、Faster R-CNN、Mask R-CNN 实现;
  • 非常快:训练速度是 Detectron 的两倍,是 mmdection 的 1.3 倍。
  • 节省内存:在训练过程中使用的 GPU 内存比 mmdetection 少大约 500MB;
  • 使用多 GPU 训练和推理;
  • 批量化推理:可以在每 GPU 每批量上使用多张图像进行推理;
  • 支持 CPU 推理:可以在推理时间内于 CPU 上运行。
  • 提供几乎所有参考 Mask R-CNN 和 Faster R-CNN 配置的预训练模型,具有 1x 的 schedule。

【参考】

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"
	        },
	        ……
	        ……
]

 

你可能感兴趣的:(深度学习)