MMLab

MMLab

MMLab的主要研究方向:

机器学习、强化学习、半监督/弱监督/自监督学习等方向的前沿方法和理论
长视频理解、3D视觉、生成模型等的计算机视觉新兴方向
物体检测、动作识别等核心方向的性能突破
深度学习的创新应用探索,以及与医疗、社会科学、艺术创作等领域的交叉创新
深度学习时代,算法与计算、系统框架、以及计算机体系结构的结合创新

历时不知道多久,OpenMMLab又迎来了一次全面的更新。为了方便社区的研究者和开发者能够及时获悉 OpenMMLab 各个项目的进展,我们对近期的更新做一个整体的介绍。 本次发布赶在 CVPR 之前,希望 OpenMMLab 的各个项目能够帮助到大家的研究和开发。
MMClassification:OpenMMLab 图像分类工具箱和基准。
MMDetection:OpenMMLab 检测工具箱和基准测试。
MMDetection3D:OpenMMLab 的下一代通用 3D 对象检测平台。
MMRotate:OpenMMLab 旋转对象检测工具箱和基准测试。
MMSegmentation:OpenMMLab 语义分割工具箱和基准测试。
MMOCR:OpenMMLab 文本检测、识别和理解工具箱。
MMPose:OpenMMLab 姿态估计工具箱和基准测试。
MMHuman3D:OpenMMLab 3D 人体参数模型工具箱和基准测试。
MMSelfSup:OpenMMLab 自我监督学习工具箱和基准测试。
MMrazor:OpenMMLab 模型压缩工具箱和基准测试。
MMFewShot : OpenMMLab 少数镜头学习工具箱和基准测试。
MMAction2:OpenMMLab 的下一代动作理解工具箱和基准测试。
MMTracking:OpenMMLab 视频感知工具箱和基准测试。
MMFlow:OpenMMLab 光流工具箱和基准测试。
MMEditing:OpenMMLab 图像和视频编辑工具箱。
MMGeneration:OpenMMLab 图像和视频生成模型工具箱。
MMDeploy:OpenMMLab 模型部署框架。
它提供以下功能。
通用 IO API
图像/视频处理
图像和注释可视化
有用的实用程序(进度条,计时器,…)
具有挂钩机制的 PyTorch runner
各种CNN架构
常见 CUDA 操作的高质量实现
它支持以下系统。

Linux
视窗
苹果系统
MMLab_第1张图片
MMCV是用于计算机视觉研究的基础Python库,支持OpenMMLab旗下其他开源库。

Github | https://github.com/open-mmlab/mmcv

主要功能是I/O、图像视频处理、标注可视化、各种CNN架构、各类CUDA操作算子

MMLab_第2张图片
MMDetection是基于PyTorch的开源目标检测工具箱。是OpenMMLab最知名的开源库,几乎是研究目标检测必备!

主要特点:

  • 模块化设计
  • 支持开箱即用的多方法
  • 高效率
  • SOTA
    demo:MMLab_第3张图片
    Github | https://github.com/open-mmlab/mmdetection
    主持的主干网:
  • ResNet
  • ResNeXt
  • VGG
  • HRNet
  • RegNet
  • Res2Net

支持的算法:

  • RPN
  • Fast R-CNN
  • Faster R-CNN
  • Mask R-CNN
  • Cascade R-CNN
  • Cascade Mask R-CNN
  • SSD
  • RetinaNet
  • GHM
  • Mask Scoring R-CNN
  • Double-Head R-CNN
  • Hybrid Task Cascade
  • Libra R-CNN
  • Guided Anchoring
  • FCOS
  • RepPoints
  • Foveabox
  • FreeAnchor
  • NAS-FPN
  • ATSS
  • FSAF
  • PAFPN
  • Dynamic R-CNN
  • PointRend
  • CARAFE
  • DCNv2
  • Group Normalization
  • Weight Standardization
  • OHEM
  • Soft-NMS
  • Generalized Attention
  • GCNet
  • Mixed Precision (FP16) Training
  • InstaBoost
  • GRoIE
  • DetectoRS
  • Generalized Focal Loss

MMLab_第4张图片
从CVPR2020 中也可以看出3D目标检测研究异常火热,该库是专门用于3D目标检测的开源库。

主要特点:

  • 支持开箱即用的多模态/单模态检测器
  • 支持开箱即用的室内/室外检测器
  • 与2D目标检测自然融合
  • 高效率
    MMLab_第5张图片
    Github | https://github.com/open-mmlab/mmdetection3d

论文盘点 | CVPR 2020 -目标检测篇
MMLab_第6张图片
MMSegmentation是一个基于PyTorch的开源语义分割工具箱.

主要特点:

  • 统一基准
  • 模块化设计
  • 支持开箱即用的多方法
  • 高效率
    MMLab_第7张图片
    Github | https://github.com/open-mmlab/mmsegmentation
    支持的骨干网:

+ResNet

  • ResNeXt
    +HRNet
    +支持的算法:
  • FCN
  • PSPNet
  • DeepLabV3
  • PSANet
  • DeepLabV3+
  • UPerNet
  • NonLocal Net
  • EncNet
    +CCNet
  • DANet
  • GCNet
  • ANN
  • OCRNet

论文盘点 | CVPR 2020 -语义分割篇
MMLab_第8张图片
MMClassification是基于PyTorch的开源图像分类工具箱。
主要特点:

  • 各种骨干与预训练模型
  • Bag of training tricks
  • 大规模训练配置
  • 高效率与可扩展性

MMLab_第9张图片
Github | https://github.com/open-mmlab/mmclassification

支持的骨干网:

  • ResNet
  • ResNeXt
  • SE-ResNet
  • SE-ResNeXt
  • RegNet
  • ShuffleNetV1
  • ShuffleNetV2
  • MobileNetV2
  • MobileNetV3

MMLab_第10张图片
MMPose是一个基于PyTorch的开源姿势估计工具箱。
MMLab_第11张图片
Github | https://github.com/open-mmlab/mmpose
论文盘点 | CVPR 2020 -人体姿态估计与动作捕捉篇
MMAction

MMAction是一个基于PyTorch开放源代码的工具箱,用于动作理解。

主要特点:

  • 可以解决以下任务:
  • 从剪辑视频中进行动作识别
  • 未剪辑视频中的时序动作检测(也称为动作定位)
  • 未剪辑视频中的时空动作检测。
  • 支持各种数据集
  • 支持多动作理解框架
  • 模块化设计
    Github | https://github.com/open-mmlab/mmaction

论文盘点 | CVPR 2020 -动作识别篇
MMLab_第12张图片
MMAction2是一个基于PyTorch开放源代码的工具箱,用于动作理解。

主要特点:

  • 模块化设计
  • 支持多种数据集
  • 支持多重动作理解框架
  • 完善的测试和记录

MMAction2比MMAction支持的算法更多,速度更快,开发者也更活跃。
MMLab_第13张图片Github | https://github.com/open-mmlab/mmaction2
支持的动作识别算法:

  • TSN
  • TSM
  • R(2+1)D
  • I3D
  • SlowOnly
  • SlowFast

支持的动作定位算法:

  • BMN
  • BSN
    论文盘点 | CVPR 2020 -动作识别篇

MMSkeleton

MMSkeleton

用于人体姿势估计,基于骨架的动作识别和动作合成。

特点:

高扩展性

多任务
MMLab_第14张图片

Github | https://github.com/open-mmlab/mmskeleton

论文盘点 | CVPR 2020 -动作识别篇

论文盘点 | CVPR 2020 -人体姿态估计与动作捕捉篇

MMFashion
MMLab_第15张图片
MMFashion是一个基于PyTorch的开源视觉时尚分析工具箱。

特点:

灵活:模块化设计,易于扩展

友好:外行用户的现成模型

全面:支持各种时装分析任务

demo:
MMLab_第16张图片
Github | https://github.com/open-mmlab/mmfashion

支持应用:

服饰属性预测

服饰识别与检索

服饰特征点检测

服饰解析和分割

服饰搭配推荐

相关解读 | 当时尚遇上AI!港中文MMLab开源MMFashion工具箱

相关解读 | 研究CV、研究美,MMFashion开源库升级~
MMLab_第17张图片MMEditing是基于PyTorch的开源图像和视频编辑工具箱

主要特点:

模块化设计

在编辑中支持多任务

SOTA

demo:
MMLab_第18张图片
Github | https://github.com/open-mmlab/mmediting

论文盘点 | CVPR 2020 -抠图Matting篇

论文盘点 | CVPR 2020 -图像质量评价篇

论文盘点 | CVPR 2020 -去雨去雾去模糊篇

论文盘点 | CVPR 2020 -图像修复Inpainting篇

论文盘点 | CVPR 2020 -图像增强与图像恢复篇

OpenPCDet

OpenPCDet 是一个清晰,简单,自成体系的开源项目,用于基于LiDAR的3D目标检测。

设计模式:
MMLab_第19张图片
Github | https://github.com/open-mmlab/OpenPCDet
支持一阶段和两阶段的3D目标检测框架、多机多卡分布式训练和测试、ATSS等。

论文盘点 | CVPR 2020 -目标检测篇

OpenUnReID

OpenUnReID是研究用于目标重识别的无监督学习和无监督域适应的开源库,基于PyTorch实现。

主要特点:

多机多卡分布式训练和测试

支持数据集、骨干网、损失函数高度灵活的结合

高速的基于GPU的伪标签生成和k-reciprocal重排序方法

即插即用的适用任何骨干网的批规范化方法:BatchNorms、sync BN

强大的基线实现

目前目标重识别领域无监督学习和域适应的众多SOTA算法

MMCV 有两个版本:
mmcv-full:全面,具有完整的功能和开箱即用的各种 CUDA 操作。构建需要更长的时间。
mmcv:精简版,没有 CUDA 操作但所有其他功能,类似于 mmcv<1.0.0。当您不需要那些 CUDA 操作时,它很有用。
注意:不要在同一个环境中安装两个版本,否则可能会遇到类似ModuleNotFound. 您需要先卸载一个,然后再安装另一个。Installing the full version is highly recommended if CUDA is available.

在安装 mmcv-full 之前,请确保 PyTorch 已经按照官方指南安装成功。

我们提供具有不同 PyTorch 和 CUDA 版本的预构建 mmcv 包(推荐),以简化Linux 和 Windows 系统的构建。此外,您可以在运行安装命令后运行 check_installation.py 来检查 mmcv-full 的安装情况。
安装最新版本。

安装最新的规则mmcv-full如下:

pip install mmcv-full -f https://download.openmmlab.com/mmcv/dist/{cu_version}/{torch_version}/index.html

请将url 中的{cu_version}和替换{torch_version}为您想要的,你已近安装好的版本,例如,要mmcv-full使用CUDA 11.1and安装最新版本,请PyTorch 1.9.0使用以下命令安装mmcv1.4.3:

pip install mmcv-full ==1.4.3 -f https://download.openmmlab.com/mmcv/dist/cu111/torch1.9.0/index.html

注意:mmcv-full 仅在 PyTorch 1.x.0 上编译
PyTorch 1.x.0 上编译,因为兼容性通常在 1.x.0 和 1.x.1 之间。如果您的 PyTorch 版本是 1.x.1,您可以安装使用 PyTorch 1.x.0 编译的 mmcv-full,它通常运行良好。

例如,如果您的 PyTorch 版本是 1.8.1,CUDA 版本是 11.1,则可以使用以下命令安装 mmcv-full。

pip install mmcv-full -f https://download.openmmlab.com/mmcv/dist/cu111/torch1.8.0/index.html

ii. 安装指定版本。

安装指定规则mmcv-full如下:

pip install mmcv-full=={mmcv_version} -f https://download.openmmlab.com/mmcv/dist/{cu_version}/{torch_version}/index.html

MMLab_第20张图片
手把手教你给 OpenMMLab 提 PR

1. 复刻 OpenMMLab 原代码库,点击 GitHub 页面右上角的 Fork 按钮即可
2. 克隆复刻的代码库到本地
    git clone [email protected]:XXX/mmcv.git
 
3. 添加原代码库为上游代码库
    git remote add upstream [email protected]:open-mmlab/mmcv
 
4. 拉取最新的原代码库的主分支
    git pull upstream master
 
5. 新建并检出一个新的分支,进行开发
    git checkout –b branchname
    # 写code
    git add [files]
    git commit -m 'messages'
 
6. 推送到复刻的代码库
    git push -u origin branchname
 
7. 创建一个 PR
    code部分有个Compare & pull request
 
8. 创建 PR 时,可以关联给相关人员进行 review
    点击create pull request
 
9. 关联相关的 issue 和 PR
10. 根据 reviewer 的意见修改代码,并推送修改
11. PR 合并之后删除该分支
    git branch –d branchname # 删除本地分支
    git push origin --delete branchname # 删除远程分支

2 Train code

2.1 overview
先上代码结构,训练时主要使用时用到configs,mmseg,tools,mmcv
MMLab_第21张图片
configs---- 其中configs保存了不同论文的不同实验的各种配置,包括模型,数据集,优化器,等等之类的。以configs/setr/setr_mla_512x512_160k_b8_ade20k为例:

_base_ = []其中是一些默认设置,_base_是一个configs目录下的一个文件夹。
下边的配置是用于覆盖默认配置的。
mmseg---- 其中mmseg主要包含了用于初始化dataset和model的类文件,训练文件(apis/train.py,训练部分的pipeline)还有一些其他辅助类的文件(log之类的)。

tools---- tools就是分布式训练的command(dist_train.sh)和训练的pipeline(train.py)。

mmcv---- mmcv是提供基础功能的。主要会用到mmcv/runner和mmcv/utils,runner中包含真正训练时的code(是按照iteration还是epoch之类的,有对应实现的类,前边两个train.py是更外层的pipeline code)
注:mmcv里这两个也是mmlab各种库的精髓,一个是runner中通过Hook类来操作训练中更微观的步骤(比如学习率更新,优化,模型保存,写入log之类的操作,如下图2),这些hook都有专门的类来实现,类中有对应的函数(‘before_train_iter’,‘after_train_iter’),在runner.train中串联调用(所有的hooks都存在了一个list中,self.call_hook依次调用对应函数)来实现训练过程(Hook类会被insert一个priority优先级参数来控制hook list的顺序,也就是执行顺序,其实一般是按照加入的顺序来的)。

这次的一大波更新包括 MMCV, MMClassification, MMSegmentation, MMEditing, MMDetection, MMDetection3D, MMPose, MMAction2。在这次更新中,OpenMMLab 的各个项目都支持了 pip install 直接安装,增加了对混合精度训练的支持和 ONNX 转换的支持,Dockerfile 全面升级到 PyTorch 1.6,并启用了新的模型库域名。从 7 月份的发布以来,共增加了 21 个新算法,目前 OpenMMLab 项目开放的总算法数超过了 120,总模型数达到了 900 以上。

另外一个就是mmcv/utils/registry.py中Registry的使用。训练中所有的模块几乎都是通过Registry来实现的。Registry可以将strings映射到真实的classes(如type“ResNet”到class ResNet)

方式是通过在定义ResNet时候就通过@MODELS.register_module()来统一管理了,相当于我手里有个小本本,我的库里有什么模型都有记录,你想要啥,你在config中写好type,我帮你找,初始化出来返还给你。mm系列的的model,dataset,optimizer包括hook都是通过这种形式实现的,也都有对应Registry类实例:MODELS,DATASETS,OPTIMIZERS,HOOKS等。
MMLab_第22张图片
2.2 mmcv模块
作为open-mmlab主库,还是值得记录一下的。
MMLab_第23张图片
2.2.1 utils
MMLab_第24张图片

2.2.1.1 config.py
·class ConfigDict(Dict): 继承自addict中的Dict(which继承自python的dict),是对python dict的一种用法上的改进。

·def add_args(parser, cfg, prefix=‘’): 在parser中添加argument

·class Config:A facility for config and config files. (一堆静态函数。。。)

# 在def __init__(self, cfg_dict=None, cfg_text=None, filename=None):中定义了三个attr
super(Config, self).__setattr__('_cfg_dict', ConfigDict(cfg_dict))
super(Config, self).__setattr__('_filename', filename)
super(Config, self).__setattr__('_text', text)

2.3 mmseg模块

segmentation task specific的库

  • init.py用来检查mmcv的版本是不是compatible,以及定义目录下外放的函数。
  • version.py记录mmseg版本之类的信息。

MMLab_第25张图片
2.3.1 apisMMLab_第26张图片
2.3.1.4 train.py
初始化seed的函数(set_random_seed);
以及mmseg的基础训练文件(build data_loaders、optimizer、给model套分布式壳子;构建runner(from mmcv)、register train和validation的hooks);
2.4 tools
一些训练测试脚本文件之类的。
各个算法库的更新简介如下:

MMCV

open-mmlab/mmcv

  • 新特性

    增加 build_runner 方法,方便下游代码库的 runner 定制化
    支持对 DCN 中 offset 层学习率的调整
    增加 EMAHook,支持指数移动平均方法
    为 Adaptive Average Pooling 提供 ONNX 的支持
    增加新的算子,如 TINShift,Conv2dAdaptivePadding
    增加新模块,如 DepthwiseSeparableConvModule,Swish activation
    增加新的数据处理模块,如 imshear,imtranslate,adjust_brightness 等

  • 代码改进

    JsonHandler 增加对 unserializable 的值与更多默认类型的支持
    图像处理模块支持对角线翻转
    优化 batched_nms 以处理框数量过多的情况,自动根据框的类别标签进行序列处理
    增加了 wrap_fp16_model 的接口
    改进 train/val_step 接口
    添加 deconv 的注册器
    支持在 fp16 optimizer hook 中记录梯度大小
    允许 imshow_det_bboxes() 同时返回框和图片

MMClassification

open-mmlab/mmclassification

  • 新特性

    增加 inference 的相关代码
    支持 PyTorch 到 ONNX 的转换
    增加新的 transform,包括基于 PIL 的 transform 和 albumentations
    增加新模型,包括 ResNeSt,VGG 等
    支持新更多数据集
    增加结果可视化模块

  • 代码改进和 BUG 修复

更新了 ShuffleNet 的配置文件,更新多个模型的预训练权重,包括 ShuffleNet 系列与 SE-ResNet 系列
解决多个 transform 中存在的错误
改进多个模型的参数和初始化问题

MMSegmentation

open-mmlab/mmsegmentation

  • 新算法/模型

    MobileNet V2
    EMANet
    DNL
    PointRend,
    Semantic FPN
    Fast SCNN
    ResNeSt
    ORNet ResNet
    DeepLabV3/DeepLabV3+ Dilate 16

  • 新数据集

Pascal Context

  • 代码改进

    支持 ONNX 导出上采样
    支持 Windows 环境下的安装
    迁移 DepthwiseSeparableConv,collect_env 到 MMCV
    支持用户自定义数据集类别和调色板

MMDetection:

open-mmlab/mmdetection

  • 支持新算法/模型

    YOLACT
    CentripetalNet
    SABL
    YOLOv3
    PAA Assign
    CornerNet
    DIOU/CIOU loss
    支持新数据集 LVIS V1

  • 文档完善

    新的colab tutorial:增加了训练教程,教程中包括将新的数据集转为MMDet的格式并对预训练模型进行微调和推理,方便新手了解目标检测中从数据预处理到模型训练和推理的全过程
    增加trouble shooting页面:总结了mmdet使用过程中的常见issue和解决方案
    完善了自定义数据集、自定义模型相关的教程

  • 新特性

    支持batch inference:支持在推理过程单卡 batch size >1的情况,提高模型推理的并行度
    支持pip install mmdet:从此支持一行命令安装mmdet了
    支持 RetinaNet 从 Pytorch 到 ONNX的转换:支持和完善了PyTorch2ONNX的功能,后续还会继续支持双阶段和多阶段检测器的Pytorch2ONNX
    支持了PyTorch 1.6 Dockerfile:更新了Dockerfile,用户可以使用基于PyTorch1.6的docker来使用MMDetection,注意,Pytorch 1.3 - Pytorch 1.5的docker仍然可以使用,用户只需要在Dockerfile中修改PyTorch相应版本即可。

  • 代码改进

    将所有的CUDA/C++ 算子迁移到了MMCV,统一管理 OpenMMLab 项目对 CUDA 算子依赖。
    对自定义数据集的灵活支持,支持根据类别自动筛选数据:之前对自定义数据集和自定义类别的数据使用不够友好,在指定训练类别的情况下无法控制剔除无GT图像的行为。最新版使得只有在 filter_empty_gt=True 和 test_mode=True 的情况下才会剔除无 GT 的图像,消除了数据筛选的歧义。
    统一了代码中的负样本标签定义,RPN head 中 0 代表正样本(第一正类),1 代表负样本,使得 v2.5 以后所有的 head 都使用 self.num_classes 来定义背景框的标签,不再有特殊情况。

MMDetection3D

open-mmlab/mmdetection3d

  • 支持新算法/模型

    H3DNet
    3DSSD
    CenterPoint

  • 支持新数据集

    Waymo:支持 Waymo 数据集,开放了 PointPillars 和 SECOND 的预训练模型和模型性能,为研究和开发提供性能基准
    nuImages:支持使用 nuImages 数据集进行目标检测、实例分割任务。包含 Mask R-CNN and Cascade Mask R-CNN 预训练模型和模型性能,提供性能基准的同时也为多模态检测提供了预训练模型。

  • 新特性

    支持 Batch Inference:支持在推理过程单卡 batch size >1 的情况,提高模型推理的并行度
    支持 Pytorch 1.6:支持了 Pytorch1.6,清理了 Pytorch1.6 (如 torch.nonzero)相关的warning
    支持 pip install mmdet3d:支持一行命令安装 mmdetection3d,方便开发者将 mmdet3d 作为基础代码库开发新的项目
    支持混合精度训练:对 PointPillars/SECOND 等基于 voxel 的模型支持混合精度训练,在 KITTI 和 nuScenes 数据集上显存减半但是精度不掉。

MMEditing

open-mmlab/mmediting

  • 新特性

    支持 NIQE,一种常用的图像质量评价指标,帮助大家更好地测试自己的模型
    支持 pip install mmedit
    加入 FP16 训练所需模块,支持 FP16 的训练,降低资源开销

MMAction2

open-mmlab/mmaction2

  • 新算法

    CSN
    TIN
    TPN
    Omini-source

  • 新数据集

    HVU
    UCF101-24
    JHMDB
    HMDB
    ActivityNet

  • 文档和教程

    完善与其他框架训练速度对比的 benchmark
    增加了不同分辨率输入的 benchmark
    完善了自定义数据集、自定义模型、微调模型、数据处理、导出模型等的代码库使用教程
    增加了新的 Colab 训练教程,包括自定义数据集的载入,对预训练模型进行微调和推理等

  • 新特性

    支持 batch inference,提高模型推理的并行度
    支持 pip install mmaction2,一行命令安装
    支持 validation 过程中保存最佳的指标和对应的模型
    支持直接从 url 读取视频进行训练
    提供由帧合成视频的工具
    增加了新的摄像头 demo,支持对摄像头的实时输入进行行为识别
    Demo 工具支持对输入的视频文件进行行为识别,并打上动作标签,输出 gif, mp4, mkv 等格式

MMPose

open-mmlab/mmpose

  • 新算法

CPM
HMR

  • 新骨干网络

    ResNeXt
    SEResNet
    ResNetV1D
    MobileNetv2
    ShuffleNetv1
    ShuffleNetv2

  • 新数据集

    AI Challenger
    MPII
    MPII-TRB
    OCHuman
    COCO -WholeBody
    FreiHand
    CMU Panoptic HandDB
    OneHand10K

  • 新特性

支持 Bottom-up | WholeBody 的 inference 和 demo
支持根据验证指标保存最佳模型

你可能感兴趣的:(python,mmlab,计算机视觉,深度学习,人工智能)