
目录MMCVRegistry使用Runner使用mmCLS结构MMDetection如何使用 MMDetection 以支持新的算法/神经网络模块如何使用 MMDetection 以支持新数据集mmdetection3DMMCV内容基本来至于公众号“商汤学术”:https://mp.weixin.qq.com/s/vRCjM0RBxzpcaD39Hk-fjQMMCV两大功能公用底层模块文件和对象 IO对 JSON、YAML、PKL文件的统一读写接口所以不用再导其它包对吧图像/视频处理支持对图像进行 Geometric, Photometric, Color space 的变换理解应该时数据增强支持对 Flow 不就是视频嘛的处理, 同时支持图像和检测结果的可视化不需要cv matplotlib了。通用工具Progress Bar显示训练进度Timer运行时间文件路径处理环境信息收集等小工具算子加速模型训练CUDA 算子的高效实现抽象训练接口抽象接口就是C中的多态Runner负责训练流程目前实现了 IterBasedRunner 和 EpochBasedRunner两个类。Hooks在 Runner 运行过程中被触发而执行的函数如打印 log存储模型。配置文件类将 YAML、JSON、Python 定义的配置转成统一的 dict。一般通过 Registry 来实现配置文件中字段到模块类的映射和实例化。Registry管理从字符串到模块类的映射一般通过相应的 build 函数将配置字段映射到对应的模块类并将该类实例化。Registry使用使用 Registry 有如下四个步骤建Registry 》实现build函数 》 在Registry 中注册模块 》 使用模块Runner使用通过注册 hook 在预定义的位点执行自定义函数来实现自定义的训练流程。如下图所示的红色小方块即是预定义的位点包括训练开始前和结束后epoch 开始前和结束后iteration 开始前和结束后。Hook是如何实现的?首先每个固定的点位都有一个对应的接口函数如下一个具体自定义hook的例子如下是不是还是有点乱下面给出我的理解看call_hook函数每次到预定义的位点时调用这个函数。它做了啥for轮询注册过的hook(比如这里的ClearCacheHook和SamplerSeedHook)。用getattr获得hook的fn_name的函数实现调用。这里的fn_name应该就是hook预定于的6个接口函数。mmCLS参考视频https://www.bilibili.com/video/BV1Tg4y1K7hS/?spm_id_from333.1391.0.0p3vd_source1038a506ff56b51d53ae087a5b536aea自行安装mmlab。网上教程一大堆结构整个目录结构如下-configs- _base_ - datasets# 处理数据加载数据数据增强等的具体的配置文件如下图2所示- models#- schedules# 配置优化器、学习率等如下图3所示- default_runtime.py# 其他配置如图4所示- resnet - ***.py# 各种resnet的配置文件的路径等。文件内容基本形式如下图1。图1图2图3图4config下(除_base_外)是各种模型的一些.py配置文件_base_下是models、datasets、等一些文件的路径MMDetection目标检测框架分为目标检测和实例分割。目标检测是预测每个物体的矩形框框住其外边沿实例分割除了预测矩形框之外还需要对物体进行像素级别的分割。目标检测和实例分割都需要对物体的类别进行识别。MMDetection 主要将检测器拆分成四个主要的模块分别是BackboneNeckRoIHeadDenseHead。如何使用 MMDetection 以支持新的算法/神经网络模块实现这个模块并将它注册进对应的 Registry如 NECKS、HEADS、BACKBONES。如,利用MMDetection框架实现 PAFPN 。先将 PAFPN 注册进 NECKS。Import 这个模块这里在necks中import因为第一步是注册进 NECKS所以necks需要实例化对象故要import。修改配置文件让算法跑起来训练与测试如何使用 MMDetection 以支持新数据集详情可见https://github.com/open-mmlab/mmdetection/blob/master/demo/MMDet_Tutorial.ipynb在 MMDetection 中有如下三种方式去支持一个新数据集将数据转成中间数据格式。将数据转成 COCO 格式。实现一个新数据集类。注方法1和方法3所写的核心代码是一样的只不过实现起来有点差别。以Kitti数据集为了转成中间数据格式的具体步骤分为解析目录结构并比对中间格式。实现新的数据集类。KITTI 数据集在继承 CustomDataset 后只需要重载 load_annotations 函数将原KITTI 格式转化成中间数据格式。目前我理解的意思是如把00XXXX.jpeg转为 filename “00XXXX.jpeg”把00XXXX.txt转为 labels np.ndarray (n, )的格式。修改配置文件进行训练。这里将类别调整为3。mmdetection3D是 MMDetection 框架的拓展在一个场景中检测出物体的 3D 框架。预测每个物体在 3D 世界的坐标以及大小和旋转方向。对拓展 MMDetectionMMDet3D 直接使用MMDet 中的训练/测试 API。相同类型的模块直接使用 MMDetection 的 Registry。使用基本相同的目录结构3D 相关拓展模块。模块化设计算法丰富下略。我觉得对我没什么帮助。