Skip to content

meilong1122/mmdetection

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

5 Commits
 
 
 
 
 
 
 
 

Repository files navigation

description
什么MMDetection

MMDetection上手

{% hint style="info" %} 一个深度学习(目标检测方向)的开源库(开源框架)

优点:快速上手目标检测

作者:商汤+港中文 {% endhint %}

熟悉结构

mmdetection目录结构

_注释部分_是重要模块,会有详细介绍

# mmdetection目录结构

mmdetection/
├── CITATION.cff
├── configs // 设置参数,网络训练以及测试参数,base和网络模型的配置文件
├── demo
├── docker
├── docs
├── LICENSE
├── MANIFEST.in
├── mmdet // 提供了经典网络,常用数据集信息
├── model-index.yml
├── pytest.ini
├── README.md
├── README_zh-CN.md
├── requirements
├── requirements.txt
├── resources
├── setup.cfg
├── setup.py
├── tests
└── tools // 一些工具

1. mmdetection/config

configs/
├── albu_example
├── atss
├── autoassign
├── _base_ //基础模型配置信息,dataset/models/schedules, 其他模型可能会用到这里边的代码,后续介绍
│   ├── datasets // 常用数据集配置
│   │   ├── cityscapes_detection.py
│   │   ├── cityscapes_instance.py
│   │   ├── coco_detection.py
│   │   ├── coco_instance.py
│   │   ├── coco_instance_semantic.py
│   │   ├── coco_panoptic.py
│   │   ├── deepfashion.py
│   │   ├── lvis_v0.5_instance.py
│   │   ├── lvis_v1_instance.py
│   │   ├── openimages_detection.py
│   │   ├── voc0712.py
│   │   └── wider_face.py
│   ├── default_runtime.py //默认训练用到的一些信息,比如日志输出情况,checkpoint输出频率,
│   ├── models // 常用模型配置
│   │   ├── cascade_mask_rcnn_r50_fpn.py
│   │   ├── cascade_rcnn_r50_fpn.py
│   │   ├── faster_rcnn_r50_caffe_c4.py
│   │   ├── faster_rcnn_r50_caffe_dc5.py
│   │   ├── faster_rcnn_r50_fpn.py
│   │   ├── fast_rcnn_r50_fpn.py
│   │   ├── mask_rcnn_r50_caffe_c4.py
│   │   ├── mask_rcnn_r50_fpn.py
│   │   ├── retinanet_r50_fpn.py
│   │   ├── rpn_r50_caffe_c4.py
│   │   ├── rpn_r50_fpn.py
│   │   └── ssd300.py
│   └── schedules // 优化器配置,学习策略,max_epoch等,具体参数可参考此处以及官方训练log
│       ├── schedule_1x.py
│       ├── schedule_20e.py
│       └── schedule_2x.py
├── carafe
├── cascade_rcnn
├── cascade_rpn
├── centernet
├── centripetalnet
├── cityscapes
├── common
├── cornernet
├── dcn
├── dcnv2
├── deepfashion
├── deformable_detr
├── detectors
├── detr
├── double_heads
├── dyhead
├── dynamic_rcnn
├── empirical_attention
├── faster_rcnn
├── fast_rcnn
├── fcos
├── foveabox
├── fpg
├── free_anchor
├── fsaf
├── gcnet
├── gfl
├── ghm
├── gn
├── gn+ws
├── grid_rcnn
├── groie
├── guided_anchoring
├── hrnet
├── htc
├── instaboost
├── lad
├── ld
├── legacy_1.x
├── libra_rcnn
├── lvis
├── maskformer
├── mask_rcnn
├── ms_rcnn
├── nas_fcos
├── nas_fpn
├── openimages
├── paa
├── pafpn
├── panoptic_fpn
├── pascal_voc
├── pisa
├── point_rend
├── pvt
├── queryinst
├── regnet
├── reppoints
├── res2net
├── resnest
├── resnet_strikes_back
├── retinanet
├── rpn
├── sabl
├── scnet
├── scratch
├── seesaw_loss
├── selfsup_pretrain
├── solo
├── sparse_rcnn
├── ssd
├── strong_baselines
├── swin
├── timm_example
├── tood
├── tridentnet
├── vfnet
├── wider_face
├── yolact
├── yolo
├── yolof
└── yolox

config/_base_

1. config/_base_/datasets

数据集设置(dataset setting)

  • dataset_type: 数据集类型

    mmdetection框架含多种数据集格式

    • _dataset_type说明使用的数据的类型,是mmdet/datasets/中某个类型文件中类的名字mmdet/datasets/init.py中定义了所有dataset_type_的名字可继
    • _mmdet/datasets中的自定义数据集mmdet/datasets/custom.py_中,建立自己的数据集,建议复制一份voc.py或者coco.py,重命名修改
    • VOC标准数据集(VOCDataset)
    • COCO标准数据集(CocoDataset)
    • cityscapes标准数据集(CityscapesDataset)等
  • data_root:数据集的根目录

  • img_norm_cfg: 图像的标准化设置

    默认使用的均值方差为Imagenet的均值和方差。

    表示为一个字典,包含

    • 均值(mean)[数组],
    • 方差(std)[数组],
    • 是否转为rbg(to_rgb)[bool] 。
  • train_pipline: 训练管道,包含训练时输入图像数据的信息。

  • test_pipline: 测试管道,包含测试时输入图像数据的信息。

  • data: 整体的数据流通信息,整个字典表示训练,验证,测试时的所有数据信息。包括

    • workers_per_gpu: 读取数据时每个gpu分配的线程数 。
    • samples_per_gpu: 每个gpu读取的图像数量,该参数和训练时的gpu数量决定了训练时的batch_size,samples_per_gpu * GPUs决定训练学习率
    • train:字典。训练时的数据参数设置,包含了训练时使用的数据集类型,以及训练数据的储存位置,标注文件位置,上述的train_pipline信息等。
    • val:字典。训练中验证时的数据参数设置,包含了验证使用的数据集类型,以及验证数据的储存位置,标注文件位置,验证时使用的管道一般同test_pipline相同。
    • test:字典。测试时的数据参数设置,包含了测试时使用的数据集类型,以及测试数据的储存位置,标注文件位置,上述的test_pipline信息等。
    • evaluation:一个字典,包含验证测试的评价指标等信息。

2. config/_base_/models

包含了一些基础模型框架的文件。包含_faster-rcnn,yolo_等。

一般而言,每一个文件(如:~/configs/yolo/yolov3_d53_mstrain-608_273e_coco.py)中包含三个部分:模型设置,训练/测试设置,数据集设置,优化器设置,学习策略

  • model settings:模型设置
    • model:完成模型的搭建。模型的_各种组件储存在mmdet/models_文件夹下。
      • 如果没有看到**model(字典形式)**如果没有则可以去首行_base_中路径找到。
  • training and testing settings
    • train_cfg:训练时的各种阈值设置,
      • 一阶段检测器,
        • assigner(字典格式)
        • allowborder(允许bbox周围扩充像素,0表示不允许)
        • pos_weight(正样本权重,-1表示不改变原始权重)
        • debug(False表示不是debug模式)
      • 二阶段检测器有所不同,如fast_rcnn
        • rpn
        • rcnn
    • test_cfg:测试时的各种阈值设置。
  • dataset settings
  • optimizer
  • learning policy

models补充:

mmdetection框架将检测模型分成了SingleStage和TwoStage两种类型的检测器,各种模型均继承自这两个类完成搭建。

model 包含type+一阶段或者二阶段的模块。

  • type: 为模型的类型,预设在mmdet/models/detector文件夹下。除此之外,SinglesStage和TwoStage包含的组件各不相同。
  • SingeStage: 一阶段检测器表示检测器中没有单独propose检测框的结构(region proposal network),SingleStage包含三大组件:backbone,neck以及bbox_head。_
  • TwoStage: 二阶段检测器表示模型中单独存在一个组件来做初始的区域筛选。在mmdetection中,二阶段检测器包含五大组件:backbone,neck,rpn_head_,_bbox_roi_extractor,roi_head。组件均为字典。

3. config/_base_/schedules

这个文件夹共三个文件,主要为三种不同的模型超参数的设置(优化器,学习策略,训练epoch),三个文件各不相同,但基本结构一样。

4. 其他文件夹

其他文件夹为各个模型在各种数据集下的具体设置文件,均通过包含上述base文件夹下的三个文件来实现(部分没有包含全部的三个文件,则需要在该文件中重新实现未包含的部分)。

在三个文件全部包含的情况下,只需要进行一点细微设置即可完成全部的训练测试设置。具体的文件通过被tools/train.py或者tools/test.py调用,来完成整个模型的设计以及全部超参数的设置。

2. mmdetection/mmdet

{% hint style="info" %} 如果只是想训练模型跑起来,使用标准数据集,这个模块不需要动,直接用即可

如果要修改网络结构,使用自定义数据集再考虑修改mmdet内容 {% endhint %}

mmdet/
├── apis
├── core 
│   ├── anchor
│   ├── bbox
│   │   ├── assigners
│   │   ├── coder
│   │   ├── iou_calculators
│   │   ├── match_costs
│   │   └── samplers
│   ├── data_structures
│   ├── evaluation
│   ├── export
│   ├── hook
│   ├── mask
│   ├── post_processing
│   ├── utils
│   └── visualization
├── datasets
│   ├── api_wrappers
│   ├── pipelines
│   └── samplers
├── models
│   ├── backbones
│   ├── dense_heads
│   ├── detectors
│   ├── losses
│   ├── necks
│   ├── plugins
│   ├── roi_heads
│   │   ├── bbox_heads
│   │   ├── mask_heads
│   │   ├── roi_extractors
│   │   └── shared_heads
│   ├── seg_heads
│   │   └── panoptic_fusion_heads
│   └── utils
└── utils

3. mmdetection/tools

{% hint style="info" %} _analysis_tools_可以分析训练日志等

_dateset_converters_用于转换数据格式

dist_test.sh/dist_train.sh用于训练和测试调用了同级目录下的test.py/train..py {% endhint %}

tools
├── analysis_tools
│   ├── analyze_logs.py
│   ├── analyze_results.py
│   ├── benchmark.py
│   ├── coco_error_analysis.py
│   ├── confusion_matrix.py
│   ├── eval_metric.py
│   ├── get_flops.py
│   ├── optimize_anchors.py
│   ├── robustness_eval.py
│   └── test_robustness.py
├── dataset_converters
│   ├── cityscapes.py
│   ├── images2coco.py
│   └── pascal_voc.py
├── deployment
│   ├── mmdet2torchserve.py
│   ├── mmdet_handler.py
│   ├── onnx2tensorrt.py
│   ├── pytorch2onnx.py
│   ├── test.py
│   └── test_torchserver.py
├── dist_test.sh
├── dist_train.sh
├── misc
│   ├── browse_dataset.py
│   ├── download_dataset.pyv
│   ├── get_image_metas.py
│   └── print_config.py
├── model_converters
│   ├── detectron2pytorch.py
│   ├── publish_model.py
│   ├── regnet2mmdet.py
│   ├── selfsup2mmdet.py
│   ├── upgrade_model_version.py
│   └── upgrade_ssd_version.py
├── slurm_test.sh
├── slurm_train.sh
├── test.py
└── train.py

怎么用?

需要这么几步:

补充内容:

{% hint style="warning" %} 若改动框架源代码后,一定要注意重新编译后再使用,比如修改了mmdet/datasets/voc.py

sudo python ~/mmdetection/setup.py {% endhint %}

1. model结构

In mmdetection, model components are basically categorized as 4 types:

mmdetection主要四部分构成

  • backbone: usually a FCN network to extract feature maps, e.g., ResNet. 骨干网,全卷积网络用于提取feature map
  • neck: the part between backbones and heads, e.g., FPN, ASPP. 衔接骨干网和头部。
  • head: the part for specific tasks, e.g., bbox prediction候选框的预测 and mask prediction掩膜的预测. 头部用于特定的部分
  • roi extractor: the part for extracting features from feature maps特征映射图, e.g., RoI Align.感兴趣(region of interest)提取器,用于从特征映射图中提取特征的部分。

mmdetection使用以上组件写了一些通用检测管道——SingleStageDetector,TwoStageDetector.

两者均位于_mmdet.models.detectors中,分别在single_stage.pytwo_stage.py_中实现。

  • _mmdet/models/detectors/single_stage.py_实现了一个通用的基础单Stage目标检测模型,具体源码解析见源码处。
  • _mmdet/models/detectors/two_stage.py_实现了一个通用的基础双Stage目标检测模型,具体源码解析见源码处。

实践中的一些注意事项

  • 如果实践中修改了mmcv的相关代码,需要到mmcv文件夹下打开终端,激活mmdetection环境,并运行"pip install ."后才会生效(这样修改的代码才会同步到anaconda的mmdetection环境配置文件中)
  • 若想使用tensorboard可视化训练过程,在config文件中修改log_config如下:
log_config = dict(
    interval=10,                           # 每10个batch输出一次信息
    hooks=[
        dict(type='TextLoggerHook'),       # 控制台输出信息的风格
        dict(type='TensorboardLoggerHook')  # 需要安装tensorflow and tensorboard才可以使用
    ])
————————————————
版权声明:本文为CSDN博主「周月亮」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/syysyf99/article/details/96574325

2. loss部分

mmdet/models/[dense_heads, roi_heads]下

About

gitbook_notebook

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published