1. 程式人生 > >MaskRCNN-Benchmark框架Assertion 't ** 0 && t ** n_classes' failed可能的原因

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