MMLab
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最知名的开源库,几乎是研究目标检测必备!
主要特点:
- 模块化设计
- 支持开箱即用的多方法
- 高效率
- SOTA demo: 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
从CVPR2020 中也可以看出3D目标检测研究异常火热,该库是专门用于3D目标检测的开源库。
主要特点:
- 支持开箱即用的多模态/单模态检测器
- 支持开箱即用的室内/室外检测器
- 与2D目标检测自然融合
- 高效率 Github | https://github.com/open-mmlab/mmdetection3d
论文盘点 | CVPR 2020 -目标检测篇
MMSegmentation是一个基于PyTorch的开源语义分割工具箱.
主要特点:
- 统一基准
- 模块化设计
- 支持开箱即用的多方法
- 高效率 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 -语义分割篇
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
手把手教你给 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
# 写codegitadd[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
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)
2.3 mmseg模块
segmentation task specific的库
- init.py用来检查mmcv的版本是不是compatible,以及定义目录下外放的函数。
- version.py记录mmseg版本之类的信息。
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
支持根据验证指标保存最佳模型
版权归原作者 皮肤科大白 所有, 如有侵权,请联系我们删除。