首页 > 新闻中心 > 职场故事

文@000007

MMDetection 检测库已经开源一段时间了,用户反响也非常热烈,从社区群与各种路径中我们也收到一些非常好的反馈。总结发现大家的问题主要集中在环境配置、文件配置用法以及模型参数方面。当然还有部分用户是初学者或者第一次使用,对 MMDetection 框架还比较陌生,理解上存在一定的难度。

为了方便大家愉快的使用 MMDetection,本文结合个人学习经历来简要描述 MMDetection 的学习进阶路线,主要是针对初学者和不熟悉 MMDetection 的用户。下一篇文章则会针对目前社区和 issue 中反映的常见问题进行统一解答,大家以后碰到这些常见问题就可以通过查询对应文章快速找到答案 (如果大家有特别想知道的内容与问题,欢迎留言提问~)。

GitHub:https://github.com/open-mmlab/mmdetection 欢迎 star~

docs: https://mmdetection.readthedocs.io/en/latest/

对于任何一个开源框架,找到 GitHub 地址后第一件事情应该是阅读 docs。目前 MMDetection 的 docs 暂时是英文版本,但不久就会推出中文版文档哦。同时,我们在知乎社区中已经发布了一系列 MMDetection 解读文章,方便初学的同学参考入门。

以下内容主要是基于个人的学习经历来说明, 供大家参考~

运行一个库,第一步肯定是安装对应环境(对于 MMDetection 来说,主要就是 MMCV 和 PyTorch),而这一步通常是劝退初学者的大老虎。很多初学者由于配置不好环境导致没有继续用的动力了。关于这个步骤我们在下一篇文章中会详细说明。

挑选一个自带拳重的模型,然后运行成功 image_demo.py,一般来说是可以显著增强自身信心的。如果电脑内存较小,推荐试用 RetinaNet,如果要效果好看,可以试用 Mask R-CNN,对应的命令如下:

其中 是你本机下载了对应拳重的文件路径,可能需要更改,拳重下载地址可以打开 进行下载。

如果你修改了代码或者改动了某些位置,修改后请运行 image_demo.py 脚本可视化效果是否正确,代码是否报错。一般来说至少可以排除推理相关的问题。

一旦你成功运行了,可视化也不错,那么你应该比较激动,这时候就赶紧加入社区吧,里面都是志同道合的用户,大家可以在里面交流用法、心得等等,减少学习成本。步骤是: 关注知乎 OpenMMLab 人方账号加入 QQ 社区群:144762544

在前置工作都准备好后,下一步应该就是深入理解源码了,不过在阅读源码之前,我推荐大家先阅读知乎解读,对整个 MMDectection 开源库有个清晰整体的认识后,再去看各个细节才能使得大家不迷路。

简单来说学习 MMDetection 主要是学习两个库:MMCV 和 MMDectection,MMCV 是面向整个 OpenMMLab 所有开源库的,里面都是通用类和工具类,方便下游各个 codebase 复用。学习顺序大概是:轻松掌握 MMDetection 整体构建流程(一)。这篇文章对 MMDectection 整体最上层的结构进行了深入分析,并且对每个划分的组件进行了简要描述轻松掌握 MMDetection 整体构建流程(二)。 这篇文章进一步对整个训练和测试流程进行详细说明,使大家能够清晰的理解整个训练和测试流轻松掌握 MMDetection 中 Head 流程。 由于 Head 组件是最复杂也是最核心的部分,所有的后处理逻辑都在这个部分,故针对这个部分单独进行了说明 ( 如果阅读起来比较吃力,可以后续结合源码反复多阅读几遍)MMCV 核心组件分析(四): Config。OpenMMLab 系列框架都是默认采用 py 配置方式,通过复用加上继承实现功能扩展。大家打开某个模型配置文件几乎就可以了解整个算法过程,配置文件及其参数的含义是非常关键的,本文对配置文件的使用进行了详细描述,大家需要多看看MMCV 核心组件分析(五): Registry。OpenMMLab 系列框架的一个特点是所有组件都可以通过 Registry 注册进去,从而使得组件和组件之间完全隔离,方便复用和扩展维护。能够熟悉且正确的应用 Registry,对于理解 MMDetection 非常重要,请多阅读几遍MMCV 核心组件分析(六): Hook。Hook 机制可以管理训练过程中的所有生命周期,目前训练过程中很多功能例如优化器、EvalHook 以及日志文件等等操作都是通过 Hook 实现的。使用 Hook 进行开发的最大好处是可以无侵入的扩展功能MMCV 核心组件分析(七): Runner。 Runner 是整个训练过程的引擎类,而且是所有任务统一的,非常重要Pytorch 源码解读系列。这个系列属于辅助内容,如果有空可以深入阅读下

前三篇文章主要是能够让大家从整体上把握 MMDectection 框架的构建方式、训练流和测试流,除了 PyTorch 源码解读系列外,后几篇文章属于用户必须掌握的内容,服务于所有 OpenMMLab 开源框架,理解这些内容至关重要,请大家有空时候务必多多去阅读。

在打好基础后,下一步就是深入阅读源码了。由于模型训练过程涉及的内容比较复杂,我个人经验是先选择经典算法对前向过程进行深入分析,阅读部分主要包括 DataLoader 构建过程、数据前处理流程、Backbone、Neck、Head 和后处理模块。重点是理解网络输出形式以及后处理的具体步骤,暂时忽略 loss 计算部分。

目前 MMDetection 实现的算法中主要包括 one-stage 和 two-stage 算法,而 two-stage 算法可以简单认为是 one-stage + pool + one-stage 步骤,为了方便理解,建议第一个深入阅读的模型是 RetinaNet,我想当你多看几遍 RetinaNet 算法后,对 MMDetection 算法的实现方式就会有一个非常清晰的认识。

在此之后,如果想阅读其他模型,那么建议深入阅读 算法。推荐的这两个经典算法可以说是后续所有算法的 baseline,后续大部分算法都或多或少的继承了这个算法,同时实现方式也是非常类似。

在阅读过程中,可以再次去查看知乎相关源码解读文章,对照看,多看几遍,应该会加快理解。

如果 RetinaNet 和 Faster R-CNN 的前向推理流程都很清楚了,下一步就可以深入阅读训练过程中 loss 计算流程了,重点关注的是正负样本定义规则、bbox 编解码规则和 loss 计算函数。阅读顺序依然是先深入理解 RetinaNet 后,再看 Faster R-CNN。

如果在阅读过程中有疑问,可以在社区中提问。

目前 MMDetection 中 issue 大概有 3500 条,如果你有空或者碰到问题,可以在 issue 中搜索看下是否有类似问题,大部分 issue 都已经解决了。 通过 issue 和 PR 列表也可以提前了解人方的开发进度等等信息。

如果你在使用中发现任何问题,也可以通过 issue 模板详细描述你的情况(使用reimplementation issues 的模板新建 issue 哦~),我们也会在第一时间处理回复的呢。

最后一步就是实战了,这一步骤是检验你是否真正熟练掌握了整个框架的重要一步。MMDetection 是一个开源开放的目标检测框架,非常欢迎社区用户提供 PR,共同推动 MMDetection 发展。同时我们也对社区优异贡献者有相应的激励机制。

期望每一位初学者都能够通过本文所描述的步骤,快速成长,最终从用户转变为开发者,在这过程中大家共同进步,共同推动目标检测领域发展和开源库发展。

您可能还喜欢的
最新信息
返回顶部