news 2026/7/28 9:36:56

openMMLab使用-part 1:MMCV MMDetction MMDection3D

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
openMMLab使用-part 1:MMCV MMDetction MMDection3D

目录

  • MMCV
    • Registry使用
    • Runner使用
  • mmCLS
    • 结构:
  • MMDetection
    • 如何使用 MMDetection 以支持新的算法/神经网络模块
    • 如何使用 MMDetection 以支持新数据集
  • mmdetection3D

MMCV

内容基本来至于公众号“商汤学术”:
https://mp.weixin.qq.com/s/vRCjM0RBxzpcaD39Hk-fjQ

MMCV两大功能:

  1. 公用底层模块

    • 文件和对象 IO:对 JSON、YAML、PKL文件的统一读写接口(所以不用再导其它包对吧)
    • 图像/视频处理支持:对图像进行 Geometric, Photometric, Color space 的变换(理解应该时数据增强),支持对 Flow (不就是视频嘛)的处理, 同时支持图像和检测结果的可视化(不需要cv matplotlib了)。
    • 通用工具:Progress Bar(显示训练进度),Timer(运行时间),文件路径处理,环境信息收集等小工具
    • 算子:加速模型训练,CUDA 算子的高效实现
  2. 抽象训练接口(抽象接口就是C++中的多态)

    • Runner:负责训练流程,目前实现了 IterBasedRunner 和 EpochBasedRunner两个类。
      • Hooks:在 Runner 运行过程中被触发而执行的函数,如,打印 log,存储模型。
    • 配置文件类:将 YAML、JSON、Python 定义的配置转成统一的 dict。一般通过 Registry 来实现配置文件中字段到模块类的映射和实例化
    • Registry:管理从字符串到模块类的映射,一般通过相应的 build 函数配置字段映射到对应的模块类并将该类实例化。

Registry使用

使用 Registry 有如下四个步骤:

建Registry =》实现build函数 =》 在Registry 中注册模块 =》 使用模块

Runner使用

通过注册 hook 在预定义的位点执行自定义函数来实现自定义的训练流程。

如下图所示的红色小方块即是预定义的位点,包括:训练开始前和结束后,epoch 开始前和结束后,iteration 开始前和结束后。

Hook是如何实现的?
首先每个固定的点位都有一个对应的接口函数,如下:

一个具体自定义hook的例子,如下:

是不是还是有点乱?下面给出我的理解:
看call_hook函数,每次到预定义的位点时调用这个函数。它做了啥?for轮询注册过的hook(比如这里的ClearCacheHook和SamplerSeedHook)。用getattr获得hook的fn_name的函数,实现调用。这里的fn_name应该就是hook预定于的6个接口函数

mmCLS

参考视频:https://www.bilibili.com/video/BV1Tg4y1K7hS/?spm_id_from=333.1391.0.0&p=3&vd_source=1038a506ff56b51d53ae087a5b536aea

自行安装mmlab。网上教程一大堆

结构:

整个目录结构如下:

-configs- _base_ - datasets# 处理数据(加载数据,数据增强等)的具体的配置文件,如下图2所示- models#- schedules# 配置优化器、学习率等,如下图3所示- default_runtime.py# 其他配置,如图4所示- resnet - ***.py# 各种resnet的配置文件的路径等。文件内容基本形式如下图1。

图1
图2

图3

图4

  • config下(除_base_外)是各种模型的一些.py配置文件
  • _base_下是models、datasets、等一些文件的路径

MMDetection

目标检测框架分为目标检测实例分割

  • 目标检测是预测每个物体的矩形框,框住其外边沿;
  • 实例分割除了预测矩形框之外,还需要对物体进行像素级别的分割
  • 目标检测和实例分割都需要对物体的类别进行识别

MMDetection 主要将检测器拆分成四个主要的模块,分别是:Backbone,Neck,RoIHead,DenseHead。

如何使用 MMDetection 以支持新的算法/神经网络模块

  1. 实现这个模块并将它注册进对应的 Registry,如 NECKS、HEADS、BACKBONES。

如,利用MMDetection框架实现 PAFPN 。先将 PAFPN 注册进 NECKS。

  1. Import 这个模块,这里在necks中import,因为第一步是注册进 NECKS,所以necks需要实例化对象,故要import。

  2. 修改配置文件,让算法跑起来

  3. 训练与测试

如何使用 MMDetection 以支持新数据集

详情可见:https://github.com/open-mmlab/mmdetection/blob/master/demo/MMDet_Tutorial.ipynb

在 MMDetection 中有如下三种方式去支持一个新数据集:

  1. 将数据转成中间数据格式
  2. 将数据转成 COCO 格式
  3. 实现一个新数据集类
    注:方法1和方法3所写的核心代码是一样的,只不过实现起来有点差别。

以Kitti数据集为了,转成中间数据格式的具体步骤分为:

  1. 解析目录结构并比对中间格式。

  2. 实现新的数据集类。

    KITTI 数据集在继承 CustomDataset 后只需要重载 load_annotations 函数将原KITTI 格式转化成中间数据格式。目前我理解的意思是,如,把00XXXX.jpeg转为 filename = “00XXXX.jpeg”,把00XXXX.txt转为 labels = <np.ndarray> (n, )的格式。

  3. 修改配置文件进行训练。

    这里将类别调整为3。

mmdetection3D

是 MMDetection 框架的拓展,在一个场景中检测出物体的 3D 框架。预测每个物体在 3D 世界的坐标以及大小和旋转方向。

对拓展 MMDetection:

  1. MMDet3D 直接使用MMDet 中的训练/测试 API
  2. 相同类型的模块直接使用 MMDetection 的 Registry。
  3. 使用基本相同的目录结构+3D 相关拓展模块

模块化设计:

算法丰富:

下略。我觉得对我没什么帮助。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/7/28 9:33:29

智能人脉维护系统:Python实现联系人分级与动态提醒

1. 项目概述&#xff1a;为什么我们需要人脉维护提醒程序 在职场打拼十几年&#xff0c;我深刻体会到人脉资源就像空气一样重要却容易被忽视。那些曾经合作愉快的客户、给予过帮助的前辈、志同道合的同行&#xff0c;往往因为疏于联系而逐渐淡出我们的社交圈。直到某天突然需要…

作者头像 李华
网站建设 2026/7/28 9:32:42

从理论到实践:DBMS_SQL-Notes助你掌握数据库核心概念

从理论到实践&#xff1a;DBMS_SQL-Notes助你掌握数据库核心概念 【免费下载链接】DBMS_SQL-Notes DBMS_SQL Notes 项目地址: https://gitcode.com/gh_mirrors/db/DBMS_SQL-Notes DBMS_SQL-Notes是一个专注于数据库管理系统&#xff08;DBMS&#xff09;和SQL学习的开源…

作者头像 李华
网站建设 2026/7/28 9:29:37

ESP32-S2 USB Host开发实战:从硬件选型到键盘、U盘应用

1. 项目概述&#xff1a;为什么要在ESP32-S2上折腾USB Host&#xff1f; 如果你玩过ESP32&#xff0c;大概率知道它是个功能强大的Wi-Fi/蓝牙双模芯片&#xff0c;但你可能没太留意它的“兄弟”——ESP32-S2。这个型号砍掉了蓝牙&#xff0c;却集成了一个被严重低估的“大杀器”…

作者头像 李华
网站建设 2026/7/28 9:27:03

三菱FX5u PLC控制4轴伺服定位系统设计与实现

1. 项目概述&#xff1a;FX5u控制4轴伺服定位挂扣组装线 最近完成了一个典型的工业自动化项目——使用三菱FX5u PLC控制4台伺服电机实现精密定位的挂扣组装生产线。这个项目完整包含了电气设计、PLC编程、HMI界面开发以及设备布局等全套内容&#xff0c;是工业自动化领域非常具…

作者头像 李华