【代码研读】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 #配置文件
│   ├── caffe2
│   │   ├── e2e_faster_rcnn_R_101_FPN_1x_caffe2.yaml
│   │   └── e2e_mask_rcnn_X-152-32x8d-FPN-IN5k_1.44x_caffe2.yaml
│   ├── cityscapes
│   │   ├── e2e_faster_rcnn_R_50_FPN_1x_cocostyle.yaml
│   │   ├── e2e_mask_rcnn_R_50_FPN_1x_cocostyle.yaml
│   │   └── README.md
│   ├── dcn
│   │   ├── e2e_faster_rcnn_dconv_R_50_FPN_1x.yaml
│   │   └── README.md
│   ├── e2e_faster_rcnn_fbnet_600.yaml
│   ├── gn_baselines
│   │   ├── e2e_faster_rcnn_R_50_FPN_1x_gn.yaml
│   │   ├── README.md
│   │   ├── scratch_e2e_faster_rcnn_R_50_FPN_3x_gn.yaml
│   ├── pascal_voc
│   │   ├── e2e_faster_rcnn_R_50_C4_1x_1_gpu_voc.yaml
│   ├── quick_schedules
│   │   ├── e2e_faster_rcnn_R_50_C4_quick.yaml
│   │   ├── rpn_R_50_C4_quick.yaml
│   │   └── rpn_R_50_FPN_quick.yaml
│   ├── retinanet
│   │   ├── retinanet_R-101-FPN_1x.yaml
│   ├── rpn_R_101_FPN_1x.yaml
│   ├── rpn_X_101_32x8d_FPN_1x.yaml
│   └── test_time_aug
│       └── e2e_mask_rcnn_R_50_FPN_1x.yaml
├── 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
│   │   │   ├── nms_cpu.cpp
│   │   │   ├── ROIAlign_cpu.cpp
│   │   │   └── vision.h
│   │   ├── cuda
│   │   │   ├── deform_conv_cuda.cu
│   │   │   ├── deform_conv_kernel_cuda.cu
│   │   │   ├── deform_pool_cuda.cu
│   │   │   ├── deform_pool_kernel_cuda.cu
│   │   │   ├── nms.cu
│   │   │   ├── ROIAlign_cuda.cu
│   │   │   ├── ROIPool_cuda.cu
│   │   │   ├── SigmoidFocalLoss_cuda.cu
│   │   │   └── vision.h
│   │   ├── 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
│   │   │   ├── distributed.py
│   │   │   ├── grouped_batch_sampler.py
│   │   │   ├── __init__.py
│   │   │   └── iteration_based_batch_sampler.py
│   │   └── transforms #数据增强
│   │       ├── build.py
│   │       ├── __init__.py
│   │       └── transforms.py

│   ├── engine#推演代码
│   │   ├── bbox_aug.py
│   │   ├── inference.py #测试时的核心代码
│   │   ├── __init__.py
│   │   └── trainer.py 	#训练的核心代码
│   ├── __init__.py

│   ├── layers
│   │   ├── batch_norm.py
│   │   ├── dcn
│   │   │   ├── deform_conv_func.py
│   │   │   ├── deform_conv_module.py
│   │   │   ├── deform_pool_func.py
│   │   │   ├── deform_pool_module.py
│   │   │   └── __init__.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
│   │   │   ├── fbnet_builder.py
│   │   │   ├── fbnet_modeldef.py
│   │   │   ├── fbnet.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_ops.py
│   │   ├── image_list.py
│   │   ├── __init__.py
│   │   ├── keypoint.py
│   │   └── segmentation_mask.py

│   └── 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系列博客】
【个人主页的系列博客】

你可能感兴趣的:(论文代码研读)