MMDetection V2.0发布!速度精度全面提升,现有检测框架最优

本文授权转自知乎作者陈恺,https://zhuanlan.zhihu.com/p/145084667。未经作者许可,不得二次转载。

MMDetection V1.0 版本发布以来,我们收到了很多用户的反馈,其中有不少有价值的建议,同时也有很多开发者贡献代码,和我们一起不断完善。经过 2 个月的酝酿,再经过 3 个月的开发和打磨(也就说了五六次“下周发版”吧,这里十分感谢主要开发的小伙伴们:文蔚,嘉瑞和钰杭),终于,在 2020 年 5 月 6 日,我们低调地发布了MMDetection V2.0。今天我们打算介绍一下。

太长不看版: 经过对模型各个组件的重构和优化,我们全面提升了 MMDetection 的速度和精度,达到了现有检测框架中的最优水平。通过更细粒度的模块化设计,MMDetection 的任务拓展性大大增强,成为了检测相关项目的基础平台。同时对文档和教程进行了完善,增强用户体验。

下面简单介绍下 MMDetection V2.0 的各项改进,更具体的细节见文档。

最大最全的模型库

截至 2020 年 5 月底,MMDetection 官方模型库已经支持了35篇论文中的算法,提供了超过 250 个预训练模型,是目标检测领域最大规模的模型库。除此之外,还有 16 篇论文在 Github 上开源了基于 MMDetection 的代码。目前官方支持的方法如图所示:

MMDetection V2.0发布!速度精度全面提升,现有检测框架最优_第1张图片 MMDetection V2.0发布!速度精度全面提升,现有检测框架最优_第2张图片

从 V1.0 到 V2.0,我们新支持了 Res2Net,RegNet(独家放送)等 backbone,也支持了CARAFE,PISA,FSAF,NASFCOS 等方法。对新方法的及时支持使得 MMDetection 既可以用作学术研究的标准 benchmark,也可以用作各种 idea 实现的助力,以及各种比赛的刷(pai)分(lie)利(zu)器(he)。

灵活的设计,全新的体验

模块化设计是 MMDetection 自诞生之初就遵循的原则,使得它能保持强大的生命力,得到社区的广泛支持。

从设计上看,MMDetection V2.0 的模块化设计比之前的版本更加细粒度,使得更多的模块可以被更灵活地替换或调整,让 MMDetection 从单纯的目标检测框架向检测类任务的框架平台转变。新的模块设计如下图所示。

MMDetection V2.0发布!速度精度全面提升,现有检测框架最优_第3张图片

在进行代码重构的过程中,我们针对之前的反馈,在用户体验上着重进行了改进,这里举几个例子。

  • 痛点1:部分模块存在封装太深的问题,例如 AnchorHead 的 target 相关函数实现在了 core 里面,浏览和修改相关代码就需要在 head 和 core 两个文件夹之间来回跳跃,而且在继承拓展的时候无法和核心代码解耦。

  • V2.0改进:对代码结构进行了调整,简化了封装层次,head 的函数都尽量实现在了一个文件内,代码实现一目了然,同时拓展更加容易。

  • 痛点 2:配置文件非常长,修改起来容易出错,而且改动的点不够清晰。

  • V2.0改进:我们设计了新的 config 系统,支持了多重继承机制。将常用的数据集配置、基础模型以及训练策略放到了 _base_ 文件夹中,每个新的 config 只需要继承一个或者多个已有的 config,然后对其中需要修改的字段进行重载即可。下图是 Mask R-CNN R-101 的配置文件在 1.0 和 2.0 版本的对比。V2.0 版本 只需要 2 行,而且所有的改动一目了然,如下图所示。

MMDetection V2.0发布!速度精度全面提升,现有检测框架最优_第4张图片

除此之外,我们在 V2.0 中增加了不少实用的小功能和改进,使得 MMDetection 简直是各位开发者的贴心小棉袄。(还有什么需求都可以提,我们慢慢加,当然能直接提 PR 就最好不过了。。。)

飞一般的速度

在进行代码重构的时候,我们也针对各个模块进行了优化, 实现了30%以上的训练加速和60%以上的测试加速。

MMDetection V2.0发布!速度精度全面提升,现有检测框架最优_第5张图片

它变强了,但没有秃

**MMDetection V2.0 的基准模型精度相比于 V1.x 有了显著的提升。**我们虽然在 V1.0 的技术报告中对各种参数做了 ablation study,但是代码库中的默认配置选用了最朴实无华的版本。在 V2.0 中,在不增加训练和测试代价的前提下,通过对默认超参的调节和实现的优化,例如使用 L1 Loss 而非 SmoothL1 Loss 等,获得了不小的精度提升。Detectron2 在这方面也有不少可圈可点的地方,和 MMDetection V2.0 的主要区别在于默认采用了 multi-scale 训练,而我们仍然选择以 single-scale 作为默认配置。不过在采用相同参数的情况下,精度几乎一致。

MMDetection V2.0发布!速度精度全面提升,现有检测框架最优_第6张图片

总结

其实大多数研究员和开发者在写代码的过程中都会逐渐感受到,代码的工程质量会显著影响研发效率。对于整个社区而言,目标检测的代码框架不仅需要工程上稳定高效的实现,还需要保持灵活性来支持新方法。而 MMDetection 正是在朝着这个方向不断努力。也欢迎各位提 PR 和Issue,让我们一起把它变得更好。

https://github.com/open-mmlab/mmdetection

觉得有用麻烦给个在看啦~  

你可能感兴趣的:(MMDetection V2.0发布!速度精度全面提升,现有检测框架最优)