MMLab的主要研究方向:
机器学习、强化学习、半监督/弱监督/自监督学习等方向的前沿方法和理论
长视频理解、3D视觉、生成模型等的计算机视觉新兴方向
物体检测、动作识别等核心方向的性能突破
深度学习的创新应用探索,以及与医疗、社会科学、艺术创作等领域的交叉创新
深度学习时代,算法与计算、系统框架、以及计算机体系结构的结合创新
历时不知道多久,OpenMMLab又迎来了一次全面的更新。为了方便社区的研究者和开发者能够及时获悉 OpenMMLab 各个项目的进展,我们对近期的更新做一个整体的介绍。 本次发布赶在 CVPR 之前,希望 OpenMMLab 的各个项目能够帮助到大家的研究和开发。
MMClassification
:OpenMMLab 图像分类工具箱和基准。
MMDetection
:OpenMMLab 检测工具箱和基准测试。
MMDetection3D
:OpenMMLab 的下一代通用 3D 对象检测平台。
MMRotate:
OpenMMLab 旋转对象检测工具箱和基准测试。
MMSegmen
tation: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
视窗
苹果系统
MMCV是用于计算机视觉研究的基础Python库,支持OpenMMLab旗下其他开源库。
Github | https://github.com/open-mmlab/mmcv
主要功能是I/O、图像视频处理、标注可视化、各种CNN架构、各类CUDA操作算子
MMDetection是基于PyTorch的开源目标检测工具箱。是OpenMMLab最知名的开源库,几乎是研究目标检测必备!
主要特点:
- 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
从CVPR2020 中也可以看出3D目标检测研究异常火热,该库是专门用于3D目标检测的开源库。
主要特点:
论文盘点 | CVPR 2020 -目标检测篇
MMSegmentation是一个基于PyTorch的开源语义分割工具箱.
主要特点:
+ResNet
- ResNeXt
+HRNet
+支持的算法:- FCN
- PSPNet
- DeepLabV3
- PSANet
- DeepLabV3+
- UPerNet
- NonLocal Net
- EncNet
+CCNet- DANet
- GCNet
- ANN
- OCRNet
论文盘点 | CVPR 2020 -语义分割篇
MMClassification是基于PyTorch的开源图像分类工具箱。
主要特点:
- 各种骨干与预训练模型
- Bag of training tricks
- 大规模训练配置
- 高效率与可扩展性
Github | https://github.com/open-mmlab/mmclassification
支持的骨干网:
- ResNet
- ResNeXt
- SE-ResNet
- SE-ResNeXt
- RegNet
- ShuffleNetV1
- ShuffleNetV2
- MobileNetV2
- MobileNetV3
MMPose是一个基于PyTorch的开源姿势估计工具箱。
Github | https://github.com/open-mmlab/mmpose
论文盘点 | CVPR 2020 -人体姿态估计与动作捕捉篇
MMAction
MMAction是一个基于PyTorch开放源代码的工具箱,用于动作理解。
主要特点:
- 可以解决以下任务:
- 从剪辑视频中进行动作识别
- 未剪辑视频中的时序动作检测(也称为动作定位)
- 未剪辑视频中的时空动作检测。
- 支持各种数据集
- 支持多动作理解框架
- 模块化设计
Github | https://github.com/open-mmlab/mmaction
论文盘点 | CVPR 2020 -动作识别篇
MMAction2是一个基于PyTorch开放源代码的工具箱,用于动作理解。
主要特点:
- 模块化设计
- 支持多种数据集
- 支持多重动作理解框架
- 完善的测试和记录
MMAction2比MMAction支持的算法更多,速度更快,开发者也更活跃。
Github | https://github.com/open-mmlab/mmaction2
支持的动作识别算法:
- TSN
- TSM
- R(2+1)D
- I3D
- SlowOnly
- SlowFast
支持的动作定位算法:
- BMN
- BSN
论文盘点 | CVPR 2020 -动作识别篇
MMSkeleton
MMSkeleton
用于人体姿势估计,基于骨架的动作识别和动作合成。
特点:
高扩展性
Github | https://github.com/open-mmlab/mmskeleton
论文盘点 | CVPR 2020 -动作识别篇
论文盘点 | CVPR 2020 -人体姿态估计与动作捕捉篇
MMFashion
MMFashion是一个基于PyTorch的开源视觉时尚分析工具箱。
特点:
灵活:模块化设计,易于扩展
友好:外行用户的现成模型
全面:支持各种时装分析任务
demo:
Github | https://github.com/open-mmlab/mmfashion
支持应用:
服饰属性预测
服饰识别与检索
服饰特征点检测
服饰解析和分割
服饰搭配推荐
相关解读 | 当时尚遇上AI!港中文MMLab开源MMFashion工具箱
相关解读 | 研究CV、研究美,MMFashion开源库升级~
MMEditing是基于PyTorch的开源图像和视频编辑工具箱
主要特点:
模块化设计
在编辑中支持多任务
SOTA
demo:
Github | https://github.com/open-mmlab/mmediting
论文盘点 | CVPR 2020 -抠图Matting篇
论文盘点 | CVPR 2020 -图像质量评价篇
论文盘点 | CVPR 2020 -去雨去雾去模糊篇
论文盘点 | CVPR 2020 -图像修复Inpainting篇
论文盘点 | CVPR 2020 -图像增强与图像恢复篇
OpenPCDet
OpenPCDet 是一个清晰,简单,自成体系的开源项目,用于基于LiDAR的3D目标检测。
设计模式:
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
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.1 overview
先上代码结构,训练时主要使用时用到configs,mmseg,tools,mmcv
configs----
其中configs保存了不同论文的不同实验的各种配置,包括模型,数据集,优化器,等等之类的。以configs/setr/setr_mla_512x512_160k_b8_ade20
k为例:
_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等。
2.2 mmcv模块
作为open-mmlab主库,还是值得记录一下的。
2.2.1 utils
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)
segmentation task specific的库
2.3.1 apis
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
支持根据验证指标保存最佳模型