【MMDetection系列 - 3】 MMdetection文件目录结构解析之mmdet文件(模型构建思想和流程)

本文详细解读了MMDetection框架的文件目录结构,重点介绍了config和models下的关键组件,包括模型配置文件、各种网络结构和组件的作用,以及目标检测的整体构建流程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


前言

本文主要分析mmdet文件目录结构中的mmdet文件,了解mmdetection整体构建流程、思想及其中各部分所完成的主要功能。 (更新中)


一、mmdet文件目录结构

MMDetection作为目标检测工具箱,提供了许多目标检测、实例分割、全景分割等算法及相关组件模块,其中mmdet文件即为其核心组成文件。

文件路径:mmdetection-main/mmdet
在这里插入图片描述
该文件主要由以下几个子文件构成:

文件名 描述
apis 提供模型推理的API
configs 模型的配置文件
datasets 支持用于目标检测、实例分割和全景分割的各种数据集
engine 运行组件的一部分
evaluation 评估模型的指标
models 检测器的不同组件
structures 提供bbox、mask、DetDataSample等数据结构
testing 提供模型推理的API
visualization 检测结果的可视化工具

下面详细介绍其中的重要文件(已更configs、models)。

1. configs

进入mmdetection-main/mmdet/configs,文件目录结构如下。
在这里插入图片描述在此文件中,提供了方法的配置参数,每个文件是一个模型的配置文件(文件名为模型名称)。

mmdetection-main/mmdet/configs/_base_下,有4个基本组件类型,分别为:datasets(数据集)、model(模型)、schedules(训练策略)以及default_runtime(运行时的默认配置)。可以通过继承_base_下的组件来构建我们的方法。

在configs文件下的文件夹,以方法名来命名,对于里面的每个配置文件,遵循以下样式来命名。

{model}_[model setting]_{backbone}_{neck}_[norm setting]_[misc]_[gpu x batch_per_gpu]_{schedule}_{dataset}

其中:

{model}: 模型种类,例如 faster_rcnn, mask_rcnn 等。

[model setting]: 特定的模型,例如 htc 中的without_semantic, reppoints 中的 moment 等。

{backbone}: 主干网络种类例如 r50 (ResNet-50), x101 (ResNeXt-101) 等。

{neck}: Neck 模型的种类包括 fpn, pafpn, nasfpn, c4 等。

[norm_setting]: 默认使用 bn (Batch Normalization),其他指定可以有 gn (Group Normalization), syncbn (Synchronized Batch Normalization) 等。 gn-head/gn-neck 表示 GN 仅应用于网络的 Head 或 Neck, gn-all 表示 GN 用于整个模型, 例如主干网络、Neck 和 Head。

[misc]: 模型中各式各样的设置/插件,例如 dconv、 gcb、 attention、albu、 mstrain 等。

[gpu x batch_per_gpu]:GPU 数量和每个 GPU 的样本数,默认使用 8x2。

{schedule}: 训练方案,选项是 1x、 2x、 20e 等。1x 和 2x 分别代表 12 epoch 和 24 epoch,20e 在级联模型中使用,表示 20 epoch。对于 1x/2x,初始学习率在第 8/16 和第 11/22 epoch 衰减 10 倍;对于 20e ,初始学习率在第 16 和第 19 epoch 衰减 10 倍。

{dataset}:数据集,例如 coco、 cityscapes、 voc_0712、 wider_face 等。

如detr,其中有四个配置文件,他们均为detr模型,采用了不同的主干网络以及训练方案。
在这里插入图片描述

2. models

进入mmdetection-main/mmdet/models,可以看到文件目录结构如下图。
在这里插入图片描述
在目前代码中,目标检测算法训练遵循以下流程:

backbone -> neck -> head ->  bbox assigner -> bbox sampler -> bbox encoder -> loss

(1)backbone主要用于特征提取,在models/backbones文件下集成了大部分骨架网络:

__all__ = [
    'RegNet', 'ResNet', &#
### 使用 `pkl` 文件进行 mmdetection3d 模型的权重加载或数据集操作 #### 加载保存模型权重 在 mmdetection3d 中,可以利用 Python 的 pickle 序列化库来处理 `.pkl` 文件。对于模型权重的操作通常涉及两个方面:加载预训练模型权重到当前模型结构中;以及将训练后的模型参数保存下来以便后续使用。 为了加载已有的 `.pth` 或者由其转化而来的 `.pkl` 格式的模型权重文件至网络架构内,可采用如下方式: ```python import torch from mmcv.runner import load_checkpoint from mmdet.models import build_detector config_file = 'path/to/config_file.py' checkpoint_path = 'path/to/model_weights.pkl' # 构建模型并加载配置文件中的设置 model = build_detector(config_file) # 将 .pkl 转换成字典对象再赋给 state_dict() state_dict = torch.load(checkpoint_path)['state_dict'] model.load_state_dict(state_dict) ``` 当希望把经过调整优化之后的新版本模型存盘时,则可以通过下面的方法实现: ```python torch.save({'state_dict': model.state_dict()}, 'new_model_weights.pkl') ``` 以上过程确保了可以从现有的 `.pkl` 文件恢复模型状态或将更新过的模型持久化存储[^1]。 #### 数据集操作 针对数据集而言,在某些情况下也需要借助于 `.pkl` 来传递信息。比如 nuScenes 这样的大型公开数据集中可能会提供标注信息或者其他辅助资料作为 `.pkl` 形式存在。读取这些外部资源可以帮助快速初始化自定义的数据管道或是验证输入输出的一致性等问题。 这里给出一段简单的例子展示如何解析来自 `.pkl` 文件的信息,并将其应用于构建数据迭代器之前: ```python import pickle data_info_path = 'path/to/dataset_info.pkl' with open(data_info_path, "rb") as f: data_infos = pickle.load(f) print("Loaded {} samples".format(len(data_infos))) ``` 通过这种方式可以直接访问包含有场景描述、物体标签等在内的丰富元数据,从而更好地支持下游任务如目标检测算法的研发工作[^2]。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值