MaskRCNN-Benchmark框架Assertion 't ** 0 && t ** n_classes' failed可能的原因
阿新 • • 發佈:2018-11-10
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"
},
……
……
]