【代碼研讀】Mask RCNN代碼閱讀筆記(一)總覽篇

前言:

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系列博客】
【個人主頁的系列博客】

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章