MMDetection V2.0:更快更强的通用目标检测平台

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

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


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

最大最全的模型库

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

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

灵活的设计,全新的体验

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

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

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

  • 痛点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 行,而且所有的改动一目了然,如下图所示。

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

飞一般的速度

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

它变强了,但没有秃

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

总结

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

open-mmlab/mmdetection


广告时间

最后,还是要给商汤我们的团队打个小广告,目前有许多坑等待优秀的同学们一起来填,欢迎大家推荐和转发,简历投递请联系 [email protected]

1. 算法研究员(全职/实习,多名)

负责开源框架(各种方向,不限于检测)的开发和维护,例如定期实现新的 SOTA 算法,添加新功能把轮子打磨得更顺手等。实习 base 香港优先,长期实习优先。保证这段经历能让你在算法和工程能力上都能有不小的收获。

以下为加分项:

  • 对 CV 的某个方向有深入理解,发表过一作顶会论文
  • 有大中型开源项目或商业项目的开发经验
  • 熟悉任一深度学习框架如PyTorch/TensorFlow/MXNet的源码
  • 熟悉CUDA编程和优化

2. 算法工程师(全职/实习,1 到 2 名)

负责支持开源框架的模型部署,搭建推理系统,要求熟悉 Caffe 或 ONNX。

以下为加分项:

  • 获得过 ACM 区域赛金牌或以上奖项,或信息学奥赛获奖
  • 有产品化的模型部署系统开发经验
  • 熟悉任一硬件后端,有 Tensor RT/NNIE/SNPE 等开发和优化经验
  • 熟悉任一深度学习框架如 PyTorch/TensorFlow/MXNet 的源码
  • 熟悉自动化流程如 CI/CD 系统搭建,Github bot 开发等

3. 见习算法研究员(检测方向,1 名)

负责研究和实现最前沿的算法,保持算法的领先性,推动检测技术在不同场景的性能优化和落地。

以下为加分项:

  • 在检测相关方向发表过一作顶会论文
  • 有顶尖学术机构或公司实习经历
  • 极强的算法实现能力

4. 算法研究员(分割方向,全职/实习,1 名)

负责研究和实现最前沿的算法,保持算法的领先性,推动分割技术在不同场景的性能优化和落地。

以下为加分项:

  • 在分割相关方向发表过多篇一作顶会论文
  • 熟悉传统图像处理算法,数学基础扎实
  • 极强的算法实现能力

5. 见习全栈工程师(1 名)

负责自动化模型生产迭代系统的前后端模块设计和功能开发。

要求:

  • 熟悉 web 前端框架,对 React 和 Vue 中的至少一种能熟练运用
  • 熟悉常见数据库如 MySQL,MongoDB
  • 熟练掌握 python,C++,Golang 中至少一种语言
  • 熟悉模型生产流程,包括数据、训练和部署。

6. 开源社区运营(全职/实习,1 名)

负责开源社区运营,提升社区开发者活跃度,挖掘和整理用户需求。负责中英文平台的宣传。

要求:

  • 本科及以上学历,计算机相关专业
  • 有开源社区社区运营经验,熟悉AI算法,参与过开源项目优先
  • 具备专业的文档撰写能力,好的跨团队沟通和协调能力,良好的英文能力
  • 做事认真,仔细,有很强的责任感,对开源有热情
  • 有人工智能/计算机视觉/机器学习项目经验者优先

7. 项目经理(全职/实习,1 名)

负责设计、细化和实施开源项目开发计划,把控项目风险,协调核心开发团队以及社区开发者的开发工作。协助社区负责人进行开源规划,分析前沿的技术进展,负责技术文档的维护和撰写。

要求:

  • 计算机相关背景,具备通过 git 等在开源社区进行协同工作的能力
  • 有开源项目或者大型软件开发项目管理经验,熟悉 AI 算法
  • 熟悉开发者心理和行为特点,提供有效的项目产品规划
  • 有良好的人际交往技巧,文字写作能力,英文读写优秀
  • 具有强烈的责任心,善于推动和协调计划,具有较强的学习能力

同时,也给 MMLab 打个广告,实验室长期招收有志于在 CV 和 NLP领域有所突破,做出有影响力工作的同学,有CUHK,NTU、HKU、USYD、SIAT 等多个base可以申请,欢迎大家直接联系对应的老师。

来源:知乎 www.zhihu.com

作者:陈恺

【知乎日报】千万用户的选择,做朋友圈里的新鲜事分享大牛。
点击下载