一、OpenMMLab开源算法体系
1.1 OpenMMLab总体介绍
OpenMMLab目前基于统一的架构,根据20+的研发方向,开发了将近300+的算法和2000+的预训练模型。
- 提供了统一先进的底层架构
- 覆盖计算机视觉众多方向
- 提供最经典、最前沿的算法支持
- 提供统一的基准和开箱即用的工作
上图可以看到OpenMMLab开源算法体系中的开源历程,可以根据时间线来学习和了解相关的算法库。
2.2 OpenMMLab总体架构概览
OpenMMLab总体架构,主要以Pytorch为训练框架,基于计算基础库MMCV的公用底层模块与抽象训练接口,向上开发了相应的算法框架以及部署框架。
在训练与部署方面,从OpenMMLab算法库到MMDeploy,结合众多硬件厂家,完成了训练-部署的一体化。
随着OpenMMLab的生态开放发展以及产学研一体化,OpenMMLab在全球范围内的影响力也越来越大。
1.3 算法框架介绍
1.3.1 MMDetection
MMDetection 是一个基于 PyTorch 的开源对象检测工具箱。它是OpenMMLab项目的一部分。
简单来说目标检测算法可以按照 3 个维度划分:
- 按照 stage 个数划分,常规是 one-stage 和 two-stage,但是实际上界限不是特别清晰,例如带 refine 阶段的算法 RepPoints,实际上可以认为是1.5 stage 算法,而 Cascade R-CNN 可以认为是多阶段算法,为了简单,上面图示没有划分如此细致
- 按照是否需要预定义 anchor 划分,常规是 anchor-based 和 anchor-free,当然也有些算法是两者混合的
- 按照是否采用了 transformer 结构划分,目前基于 transformer 结构的目标检测算法发展迅速,也引起了极大的关注,所以这里特意增加了这个类别的划分
不管哪种划分方式,其实都可以分成若干固定模块,然后通过模块堆叠来构建整个检测算法体系。
1.3.2 MMDetection3D
- https://github.com/open-mmlab/mmdetection3d
MMDetection3D 是一个基于 PyTorch 的开源对象检测工具箱,面向下一代通用 3D 检测平台。它是 MMLab 开发的 OpenMMLab 项目的一部分。
1.3.3 MMClassification
- https://github.com/open-mmlab/mmclassification
MMClassification 是一个基于 PyTorch 的开源图像分类工具箱。它是OpenMMLab项目的一部分。
1.3.4 MMSegmentation
- https://github.com/open-mmlab/mmsegmentation
MMSegmentation 是一个基于 PyTorch 的开源语义分割工具箱。它是OpenMMLab项目的一部分。
master 分支适用于PyTorch 1.5+。
1.3.5 MMPose & MMHuman3D
- https://github.com/open-mmlab/mmpose-
MMPose 是一个基于 PyTorch 的姿态估计开源工具箱。它是OpenMMLab 项目的一部分。
master 分支适用于PyTorch 1.5+。
- https://github.com/open-mmlab/mmhuman3d
MMHuman3D 是一个基于 PyTorch 的开源代码库,用于在计算机视觉和计算机图形学中使用 3D 人体参数模型。它是OpenMMLab项目的一部分。
主要分支适用于PyTorch 1.7+。
1.3.6 MMTracking
https://github.com/open-mmlab/mmtracking
MMTracking 是 PyTorch 开源的视频感知工具箱。它是OpenMMLab项目的一部分。
master 分支适用于PyTorch1.5+。
1.3.7 MMAction2
- https://github.com/open-mmlab/mmaction2
MMAction2 是一个基于 PyTorch 的视频理解开源工具箱。它是OpenMMLab项目的一部分。
master 分支适用于PyTorch 1.5+。
1.3.8 MMOCR
- https://github.com/open-mmlab/mmocr
MMOCR 是一个基于 PyTorch 和 mmdetection 的开源工具箱,用于文本检测、文本识别以及相应的下游任务,包括关键信息提取。它是OpenMMLab项目的一部分。
主要分支适用于PyTorch 1.6+
1.3.9 MMEditing
- https://github.com/open-mmlab/mmediting
MMEditing 是一个基于 PyTorch 的开源图像和视频编辑工具箱。它是OpenMMLab项目的一部分。目前MMEditing支持:
master 分支适用于PyTorch 1.5+。
1.4 行业应用案例
OpenMMLab作为算法生态的关键一环,在行业应用案例中与上下游结合,其中对于上游芯片适配了支持,通过算法生态带动国产化软硬件生态链发展。
同时,也不断服务于下游的头部企业用户,加速计算机视觉技术落地,提高行业研发效率,服务国计民生。
上游芯片厂商主要包括:摩尔线程、NVIDIA、Intel、壁仞科技、沐璐集成电路、、燧原科技、GRAPHCORE、寒武纪、华为、中科曙光。
1.5 OpenMMLab2.0整体介绍
下面从以下几个方面来进行介绍:
- 通用:强大的训练器案例、70行训练TIMM模型
- 灵活:可插拔模块、训练流程控制、日志与可视化
- 开放统一:模块抽象、执行入口、训练流程、数据接口
- 迭代计划
1.5.1 整体架构
- 新架构
基于 MMEngine,OpenMMLab 2.0 的核心架构焕然一新,具有通用、统一、灵活三大特点。- 新的架构除了通用、统一、灵活等三大亮点,还针对各个模块进行了精心设计和优化(设计的时间和开发时间五五开),平衡兼顾了简单性、扩展性和效率。在代码可读性和文档方面,我们对 MMEngine 的要求也比以往的各个算法库都要严格,希望大家在阅读 MMEngine 的源码时还能有所收获,也欢迎大家试用 MMEngine。
1.5.2 通用:强大的训练器
通用
OpenMMLab 2.0 中的 20 多个算法任务都基于一个强大且通用的训练器。和 OpenMMLab 1.0 中的训练器相比,新的训练器以统一的方式实现了数据、模型、评测等组件的构造流程供各算法库调用,以更加可拓展的方式支持了不同芯片环境(CPU,GPU,Apple M1,MLU等)下的分布式和非分布式训练,并支持了一些最新的大模型训练技术如 FullyShardedDataParallel。下游的各种算法库都可以直接使用这个训练器,在简化代码的同时,通过依赖最新的 MMEngine 享受最新的训练技术和芯片支持。
同时,这个通用的训练器还支持被 OpenMMLab 体系外的算法库单独使用,它可以做到以少量代码训练不同任务:例如仅使用 80 行代码训练 imagenet(而 pytorch example 需要 400行),100 行代码训练 CLIP(OpenCLIP 中有上千行训练代码) ,还能轻松兼容当前流行的算法库中的模型,例如 TIMM,TorchVision 和 Detectron2。
1.5.3 统一:模块抽象
统一
OpenMMLab 1.0 中的各算法库分别支持了感知、生成、预训练等 30 多个算法方向,每个算法方向中还有各种不同的算法和训练范式,各算法库也因此在接口上存在细微差别,难以兼容,使得支持新芯片和训练技术的开发成本和算法库数量成正比。
统一后的模块抽象:
- 抽象模块数据丰富
- 清理了函数式定义,增加模块或者模块方法
1.5.4 统一:训练流程
统一后的训练流程:
- 统一了20多个算法任务的训练流程
- 支持自监督、半监督、少样本学习
1.5.5 统一:数据接口
在OpenMMLab1.0的时候,一个算法库,定义了一套接口。
这个接口复杂程度是跟算法库的丰富度正相关的。
于是在OpenMMLab2.0的更新中,统一了算法库的数据接口。
在OpenMMLab2.0中,
- N个算法库,统一由一套接口定义。
- 针对多模态、多任务训练统一了数据接口。
- 针对半监督、自监督、少样本学习的统一接口。
1.5.6 灵活:日志与可视化
灵活
在 OpenMMLab 2.0 中,我们对算法训练流程进行了更细粒度的模块化设计,使得整个训练流程中有了更多可定制化的空间,包括在训练器中增加更多抽象模块、更多可自定义的插入点,和组件之间的信息交流渠道 MessageHub 等。上述贴心的设计提供了一个“乐高”式的训练流程 ,用户可以像拼乐高一样,随心所欲地“插拔”各种模块,实现训练流程的定制化,例如:根据迭代数、 loss 和评测结果等动态调整的训练流程、优化策略和数据增强策略,实现 early stopping,ReduceLROnPlateau 等
任意形式的模型权重平均,如 Exponential Momentum Average (EMA) 和 Stochastic Weight Averaging (SWA)
训练过程中针对任意数据和任意节点的灵活可视化和日志控制、逐参数的优化配置、混合精度训练的灵活控制。