OpenMMLab AI实战营第二期 开源算法体系

一、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)
训练过程中针对任意数据和任意节点的灵活可视化和日志控制、逐参数的优化配置、混合精度训练的灵活控制。

1.5.7 迭代计划

OpenSAL1.1 包含了算法导论中所有数据结构和算法以及其他内容,本资源为该算法库的静态链接库 内容如下(*号表示1.1版本新增内容): 数据结构:一般堆、二项堆、斐波那契堆、红黑树、通用散列(采用全域散列和完全散列技术)、不相交集合、任意维数组、高维对称数组。 图论算法(兼容有向图,无向图):广度和深度优先遍历、确定图是否存在回路、拓扑排序、强连通分支、欧拉环(欧拉路径)、最小生成树(Kruskal、Prim)、单源最短路径(3种)、每对顶点间最短路径(2种)、最大流(2种)等等。 代数算法:霍纳法则计算多项式和、矩阵乘法(2种)、方阵的LUP分解、解线性方程组(2种)、矩阵求逆(2种)、求伪逆矩阵(2种)、解正态方程组(2种)、最小二乘估计(2种)、多元最小二乘估计*、快速傅里叶变换、快速傅里叶逆变换、多维快速傅里叶变换、多维快速傅里叶逆变换、快速向量求卷积(单变量多项式乘积)、快速张量求卷积(多变量多项式乘积)、多项式除法*、快速方幂和算法。 序列算法:最长公共子序列、KMP序列匹配*、键值分离排序。 数论算法:大数类(兼容浮点数、整数、与内置类型兼容运算)*、RSA加解密系统*、解同余方程*、孙子定理解同余方程组*、Miller_Rabin素数测试(产生大质数)*、随机数(实数、大数)*、欧几里得算法*。 计算几何算法:确定任意一对线段是否相交*、凸包*、最近点对*。 运筹学:线性规划(单纯形法)*、分配问题*、最优二度子图*、多01背包问题*
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

疯狂输出的加特林

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值