前言:
mask-rcnn作爲如今領域流行的代碼框架,被廣泛應用,爲了學習的需要,結合網上的教程,寫了以下的代碼研讀筆記
閱讀的代碼爲:mask-rcnn benchmark
【github地址】
後期會根據自己對代碼的理解,進行不定期的續更這個代碼的閱讀筆記,請大家期待一下哦~
1.骨架網絡【backbone.py及代碼入口】
2.RPN層【粗分割的rpn.py】
3.ROI_HEAD【實現各個分支】
4.其他輔助代碼雜會【其他】
整體架構:
mask-rcnn核心代碼方面主要分爲三個部分:
backbone(骨架特徵提取網絡)+
rpn(粗分類的區域提議網絡)+
roi_head(實現各部分功能的集成模塊,如mask/detction等)
涉及的內部代碼實現包括:
backbone: Resnet/FPN/retinanet等基礎模型的核心代碼:
RPN
Fast-RCNN,RCNN,和mask-rcnn的對應代碼
代碼概覽:
- 用字典選擇組合的模型
- 用元組給出對應的組合細節
爲便於閱讀,刪除部分文件
├── configs #設置
├── demo
├── docker #用docker配置對應的環境
├── maskrcnn_benchmark
│ ├── config
│ ├── csrc
│ ├── data#數據處理文件
│ ├── engine#推演代碼
│ ├── layers
│ ├── modeling#該工程核心代碼(應被詳細介紹)
│ │ ├── backbone #特徵提取網絡
│ │ ├── roi_heads #理解爲模型實現對應任務的模塊
│ │ ├── rpn #粗分類階段
│ ├── solver
│ ├── structures # 定義了許多檢測模式使用的數據結構, 如 BoxList, ImageList 等,
│ └── utils
├── tests
├── tools #一些圖像處理的函數
代碼總覽:
爲便於閱讀,刪除部分文件
├── configs #配置文件
├── CONTRIBUTING.md
├── demo #演示
│ ├── Mask_R-CNN_demo.ipynb
│ ├── panoptic_segmentation_shapes_dataset_demo.ipynb
│ ├── predictor.py #預測
│ ├── README.md
│ ├── shapes_dataset_demo.ipynb
│ ├── shapes_pruning.ipynb
│ └── webcam.py #網頁演示
├── docker #用docker配置對應的環境
│ ├── Dockerfile
│ └── docker-jupyter
│ ├── Dockerfile
│ └── jupyter_notebook_config.py
├── maskrcnn_benchmark
│ ├── config #配置
│ │ ├── defaults.py
│ │ ├── __init__.py
│ │ └── paths_catalog.py #數據集存放的路徑
│ ├── csrc
│ │ ├── cpu
│ │ ├── cuda
│ │ ├── deform_conv.h
│ │ ├── deform_pool.h
│ │ ├── nms.h
│ │ ├── ROIAlign.h
│ │ ├── ROIPool.h
│ │ ├── SigmoidFocalLoss.h
│ │ └── vision.cpp
│ ├── data#數據處理文件
│ │ ├── build.py
│ │ ├── collate_batch.py
│ │ ├── datasets
│ │ │ ├── abstract.py
│ │ │ ├── coco.py #數據集更改格式的入口
│ │ │ ├── concat_dataset.py #對數據集進行拼接
│ │ │ ├── evaluation #對數據集評估的入口
│ │ │ │ ├── coco
│ │ │ │ │ ├── coco_eval.py
│ │ │ │ │ └── __init__.py
│ │ │ │ ├── __init__.py
│ │ │ │ └── voc
│ │ │ │ ├── __init__.py
│ │ │ │ └── voc_eval.py
│ │ │ ├── __init__.py
│ │ │ ├── list_dataset.py
│ │ │ └── voc.py
│ │ ├── __init__.py
│ │ ├── README.md
│ │ ├── samplers
│ │ └── transforms #數據增強
│ │ ├── build.py
│ │ ├── __init__.py
│ │ └── transforms.py
│ ├── engine#推演代碼
│ │ ├── bbox_aug.py
│ │ ├── inference.py #測試時的核心代碼
│ │ ├── __init__.py
│ │ └── trainer.py #訓練的核心代碼
│ ├── __init__.py
│ ├── layers
│ │ ├── batch_norm.py
│ │ ├── __init__.py
│ │ ├── misc.py
│ │ ├── nms.py
│ │ ├── roi_align.py
│ │ ├── roi_pool.py
│ │ ├── sigmoid_focal_loss.py
│ │ ├── smooth_l1_loss.py
│ │ └── _utils.py
│ ├── modeling#該工程核心代碼(應被詳細介紹)
│ │ ├── backbone
│ │ │ ├── backbone.py
│ │ │ ├── fpn.py
│ │ │ ├── __init__.py
│ │ │ └── resnet.py
│ │ ├── balanced_positive_negative_sampler.py #正負樣本平衡
│ │ ├── box_coder.py #候選框的類
│ │ ├── detector
│ │ │ ├── detectors.py #檢測的代碼入口
│ │ │ ├── generalized_rcnn.py #生成各種組合的檢測模型
│ │ │ └── __init__.py
│ │ ├── __init__.py
│ │ ├── make_layers.py
│ │ ├── matcher.py #候選框和gt的匹配·
│ │ ├── poolers.py
│ │ ├── registry.py #註冊定義的模塊信息入字典
│ │ ├── roi_heads
│ │ │ ├── box_head #迴歸框任務
│ │ │ │ ├── box_head.py #主函數
│ │ │ │ ├── inference.py #後處理,推理
│ │ │ │ ├── __init__.py
│ │ │ │ ├── loss.py #計算損失
│ │ │ │ ├── roi_box_feature_extractors.py
│ │ │ │ └── roi_box_predictors.py #對候選框進行預測
│ │ │ ├── __init__.py
│ │ │ ├── keypoint_head
│ │ │ │ ├── inference.py
│ │ │ │ ├── __init__.py
│ │ │ │ ├── keypoint_head.py
│ │ │ │ ├── loss.py
│ │ │ │ ├── roi_keypoint_feature_extractors.py
│ │ │ │ └── roi_keypoint_predictors.py
│ │ │ ├── mask_head
│ │ │ │ ├── inference.py
│ │ │ │ ├── __init__.py
│ │ │ │ ├── loss.py
│ │ │ │ ├── mask_head.py
│ │ │ │ ├── roi_mask_feature_extractors.py
│ │ │ │ └── roi_mask_predictors.py
│ │ │ └── roi_heads.py
│ │ ├── rpn #粗分類
│ │ │ ├── anchor_generator.py #生成錨框
│ │ │ ├── inference.py #後處理
│ │ │ ├── __init__.py
│ │ │ ├── loss.py
│ │ │ ├── retinanet
│ │ │ │ ├── inference.py
│ │ │ │ ├── __init__.py
│ │ │ │ ├── loss.py
│ │ │ │ └── retinanet.py
│ │ │ ├── rpn.py
│ │ │ └── utils.py
│ │ └── utils.py
│ ├── solver
│ │ ├── build.py
│ │ ├── __init__.py
│ │ └── lr_scheduler.py
│ ├── structures
│ │ ├── bounding_box.py#爲boxlist定義一個結構體,內含gt
│ │ ├── boxlist_ops.py #爲boxlist的一系列操作,包含boxlist的nms
│ │ ├── image_list.py #爲批處理圖片規定一個數據結構
│ │ ├── __init__.py
│ │ ├── keypoint.py #關鍵點結構體
│ │ └── segmentation_mask.py #mask類型的定義
│ └── utils
│ ├── c2_model_loading.py
│ ├── checkpoint.py
│ ├── collect_env.py
│ ├── comm.py
│ ├── cv2_util.py
│ ├── env.py
│ ├── imports.py
│ ├── __init__.py
│ ├── logger.py
│ ├── metric_logger.py
│ ├── miscellaneous.py
│ ├── model_serialization.py
│ ├── model_zoo.py
│ ├── README.md
│ ├── registry.py
│ └── timer.py
├── MODEL_ZOO.md
├── README.md
├── requirements.txt
├── setup.py
├── tests
│ ├── checkpoint.py
│ ├── env_tests
│ │ └── env.py
│ ├── test_backbones.py
│ ├── test_box_coder.py
│ ├── test_configs.py
│ ├── test_data_samplers.py
│ ├── test_detectors.py
│ ├── test_fbnet.py
│ ├── test_feature_extractors.py
│ ├── test_metric_logger.py
│ ├── test_nms.py
│ ├── test_predictors.py
│ ├── test_rpn_heads.py
│ ├── test_segmentation_mask.py
│ └── utils.py
├── tools
│ ├── cityscapes
│ │ ├── convert_cityscapes_to_coco.py
│ │ └── instances2dict_with_polygons.py
│ ├── test_net.py
│ └── train_net.py
└── TROUBLESHOOTING.md
43 directories, 244 files
推薦參考:
找了很多資料,給出了兩個參考連接,感覺寫的很好很詳細:
【CSDN系列博客】
【個人主頁的系列博客】