引言:大大降低水平框检测器改旋转框检测器的难度

MMRotate 是一个基于 PyTorch 和 MMDetection 的开源旋转框目标检测工具箱。它将目标检测从水平框扩展到旋转框,为场景文字、遥感影像、自动驾驶等领域的应用打下了基础,为学术界和产业界提供了高效强大的基准模型。

从今年 2 月 28 日发布至今,MMRotate 收获了 20 余位来自世界各地的贡献者,解决了 300 多个来自社区的 issues,收获了不少忠实用户和热情的社区开发者。截止到目前,MMRotate 已经 4 次登上 GitHub Trending 总榜,star 数也已经破千,这着实让我们受宠若惊。

为了回应大家的支持,经过半年多的迭代,MMRotate 终于在 11 月迎来了 1.0 版本的发布。我们根据社区的需求和算法的进展,对现有设计做出了改进,进一步提升了代码的扩展性和易用性。接下来,我们就一起来了解一下 MMRotate 1.0 中的主要变化吧!

全新引擎,全新体验

OpenMMLab 2.0 最新发布的深度学习训练框架 MMEngine,提供了功能非常强大的执行器,统一了算法库训练测试的启动和执行逻辑,另外规范了数据接口协议,使得各模块间(包括模型、数据集、数据增强、评测、可视化等)的数据传递更流畅,模块间的组合更灵活。

在 MMRotate 1.x 中,我们基于 MMEngine 和 MMDetection 3.x 对所有模型进行了重构,统一了各组件的接口。相信用户很快就能体验到 MMEngine 带来的全新体验!

在 MMRotate 0.x 中,组件都被注册到了 MMDetection 下面,不利于跨库调用。而在 MMRotate 1.x 中,我们搭上了 OpenMMLab 2.0 的顺风车,顺势将所有组件都注册到了 MMEngine 下面,与其他算法库平级。

这使得 MMRotate 1.x 可以和 OpenMMLab 2.0 中的其他算法库更加优雅地进行跨库调用,也为 MMRotate 带来了更多的玩法和可能性。

OpenMMLab 2.0 全家桶

后续我们将继续完善 MMRotate 的教程文档,手把手教大家:如何“白嫖” MMClassification 中各种强大的 Backbone,如何支持半监督旋转框检测任务,如何支持 MMOCR 中的文本检测任务,如何用 MMDeploy 部署模型。欢迎大家持续关注 MMRotate!

全新 BoxType 设计

在 OpenMMLab 2.0 中,我们对不同类型的 Box (水平框/旋转框/四边形框) 进行了抽象,统一了 MMDetection 3.x 和 MMRotate 1.x 中不同类型边界框的用法,以简化实现并减少冗余代码。

首先,我们在 MMDetection 3.x 中创建了一个抽象基类 BaseBoxes,所有的 BoxType 都会继承它并拥有一套统一的 API。OpenMMLab 2.0 一共支持了 3 种 BoxType 类型,包括 MMDetection 中的 HorizontalBoxes,MMRotate 中的 RotatedBoxes 和 QuadriBoxes。

用户只需要将水平框模型中相关函数用统一的 API 替换,就能让重构后的模型同时支持水平框检测、旋转框检测、四边形框检测任务。

水平框,旋转框和四边形框都具有统一的 API

目前我们对 MMDetection 3.x 中的 RetinaNet、Faster R-CNN、Cascade R-CNN 等模型进行了重构,使用统一的 API 替换掉了原来代码中写死的水平框操作。这样一来,用户在 MMRotate 1.x 中不再需要 MMDetection 中的 head 进行任何修改就能直接使用。

不得不说,BoxType 的提出大大降低了用户用水平框检测器改旋转框检测器的难度。我们鼓励感兴趣的同学自己动手试一试,将 MMDetection 中你认为最具潜力的水平框模型改造成旋转框模型,亲自体验一把 BoxType 统一 API 带来的便捷。当然也请大家别忘了给我们提 PR 哦!

上手简单,一学就会

听完上面那些抽象的概念,可能有的同学心里已经打起退堂鼓了。且慢!BoxType 其实并没有你想的那么复杂。为了降低用户的使用门槛,BoxType 实例具备了大多数 Tensor 的特性。这意味着用户能够直接将 BoxType 实例当作普通 Tensor 进行操作,真正降低了用户的学习成本。

Torch.Tensor 和 BaseBoxes 所共同拥有的内置函数和方法

一套代码,多框复用

BoxType 的设计不仅降低了用水平框检测模型魔改旋转框/四边形框目标检测模型的难度,还显著减少了 MMRotate 中的冗余代码。经过重构和精简,MMRotate 的各类 head 数量从 27 个变为了 14 个,减少了 48%。同时,MMRotate 支持的旋转框数据增强数量更是增加了近 5 倍!

模型数量不变,Head 更少,数据增强更多

以 Rotated RetinaNet 和 Rotated Faster R-CNN 为例,过去我们需要针对旋转框对 MMDetection 中的 head 进行一些修改和继承才能使其支持旋转框模型。

通过对 MMDetection 3.x 中的相关 head 进行 BoxType 升级,用户在 MMRotate 1.x 中不需要对 head 进行任何修改和继承就能直接支持旋转框模型,显著减少了 head 的数量。

大刀阔斧,砍掉冗余 head

通过重构 MMDetection 中的数据增强模块,MMRotate 1.x 的用户目前已经能够直接使用绝大部分 MMDetection 3.x 中的数据增强策略了。在 MMRotate 1.0 版本中,用户能够直接使用的旋转框数据增强总数已经达到了 24 个。真正做到了“一套代码,多框复用”。丰富数据增强也为用户训练强大和鲁棒的旋转框模型提供了坚实的后盾。

更多数据增强,带来更多可能

任意切换,来去自如

另外,我们还提供了统一的转换函数,方便用户在不同类型的 BoxType 实例之间进行转换。用户不需要关心 BoxType 的具体类型,就能将其转为指定类型的框。

这种特性在一些实际应用中是十分方便的。例如在计算旋转框指标时,不管模型输出的预测结果的是水平框、旋转框还是多边形框,转换函数都能自动将其转换成旋转框。

不同框之间可以通过统一的函数任意转换

在 MMRotate 1.x 中,我们将角度表示法的切换功能移到了 RotatedBoxes 内部,通过 regularize_boxes 接口来进行统一的管理。另外,我们对模型旋转框角度表示法的切换也进行了精简和优化。

在 MMRotate 0.x 版本中,用户在一个配置文件中需要同时给 dataset、 pipeline、head 传入角度表示法的参数。过于分散的参数对用户的使用和理解都造成了困扰,稍不留神就会漏掉一两个参数。

通过用户反馈和实验分析,我们发现在最初的数据读取阶段就将角度转换成对应的表示法是没有必要的,实际上只需要在 bbox coder 前将旋转框的角度表示法转换好即可。

为了减轻用户的负担,我们将角度表示法的作用范围限定在了 head 内部。用户只需要修改 anchor_generator 和 bbox_coder 两个组件就可以完成对旋转框模型角度表示法的切换,不再需要关心其他地方的角度表示法。

降低角度表示法的配置难度

管你啥框,手到擒来

BoxType 还具备良好的扩展性,用户可以根据实际的需求注册新的 BoxType 类或者增加新的 API。在 MMRotate 1.0 中,我们通过添加 QuadriBoxes 类实现了对四边形框检测任务的支持。

用户只需要修改 LoadAnnotations 中的 box_type 字段,就可以轻松地加载四边形框标注用于模型训练。后续我们还会根据用户的反馈和实际需求,考虑添加更多的 BoxType 类型。

加载四边形框标注的流程

其他升级

除了全新的引擎和 BoxType 设计之外,MMRotate 1.0 还为大家准备了一些实用的小更新。在数据集方面,MMRotate 1.0 新增了对 SRSDD 和 RSDD 两个 SAR 数据集的支持。

目前,MMRotate 一共支持了 6 个数据集,包括 2 个光学遥感数据集和 4 个 SAR 数据集。同时,我们还支持了 COCO 格式自定义数据集的读取。

Mask2BoxType 数据增强模块会将 mask 格式的标注转换成旋转框或者多边形框标注。在评测指标方面,我们不仅新增了对四边形框的支持,还支持了更为详尽的 COCO 格式的旋转框指标。

新的数据集和评测指标

总结

经过数个月紧锣密鼓的开发与打磨,MMRotate 1.0 的整体架构已经变得更加成熟和鲁棒。作为 OpenMMLab 2.0 的旋转框目标检测算法库,MMRotate 已在开源社区被广泛使用。基于全新的架构和 BoxType 设计,我们进一步统一了 MMDetection 3.x 和 MMRotate 1.x 中不同类型边界框的用法,显著减少了冗余代码。

同时,可扩展易配置的特性将会为学术研究带来更多的可能性。MMRotate 绝不仅仅只是一个开源旋转框目标检测工具箱,它更是我们对该领域经常被吐槽的“角度定义不统一”、“算子编译难度大”等问题的不妥协。

MMRotate 之后的发展,除了进一步紧跟学术热点,实时支持学术界最新的 sota 模型之外,我们也希望它能更高效、更强大,更灵活,应用场景更全面,更易上手,希望能助力旋转框检测新算法的诞生,和科技产业的落地。开源项目的核心是社区共建,我们也希望让更多社区成员有机会参与到算法库的开发和管理中来,共同推进旋转框目标检测领域研究的发展。

后续规划

未来,我们也将不断地迭代更新,为社区带来更好用的旋转目标检测模型库。我们计划在未来支持更多的数据集和精度更高的算法,积极与其他算法库进行联动。同时我们也将不断提高 MMRotate 的易用性,完善并充实文档内容。欢迎更多的社区用户参与到 MMRotate 的建设中来,为旋转框目标检测社区的发展助力。

我们将在 2023 年 1 月 1 日正式发布 MMRotate 1.0.0 版本到主分支,对新版本感兴趣的同学可以使用 dev-1.x 分支来体验我们的全新版本。我们将在未来保持双分支的同时维护,主要维护时间线如下所示:

MMRotate 全面升级,新增 BoxType 设计相关推荐

  1. android 升级带服务端,安卓应用升级服务端设计思路

    原标题:安卓应用升级服务端设计思路 前言 去年支付宝集福卡活动玩出新花样,增加了一种花花卡,豪称全年帮你还花呗,一时火热.听到很多人在说要花花卡时,不准备玩集福卡的我准备再玩一把.进入页面功能点直接系 ...

  2. WCF 项目应用连载[6] - 升级Lig服务 - 设计ILigger 构建一个完善的Lig版本

    前面我们已经搞定了对ChannelFactory与ServiceHost的扩展,形成了我们自己用的两个类: public class LWCF<T> public class LServi ...

  3. 基于linux 开源机顶盒_基于linux的数字电视机顶盒几种升级方式的设计与实现

    摘要: 本文主要阐述了基于linux操作系统的数字电视机顶盒的常用几种升级方式:OTA,USB,网络,结合常用的bootloader:cfe,u-boot实现升级做了简述,并综合对比其各自的优劣. 关 ...

  4. 基于Java多线程的打怪升级类游戏设计与开发

    摘要:本文论述了通过JAVA多线程.基于JAVA Swing的GUI图形用户界面设计.IO输入输出流.JDBC技术,实现了游戏系统的UI设计.游戏数据的存储.关卡的设置.用户头像的上传与更改.游戏数据 ...

  5. 网站安全狗Apache 3.5版升级 新增网站后台防护功能

    2019独角兽企业重金招聘Python工程师标准>>> 网站安全狗是一款集网站内容安全防护.网站资源保护及网站流量保护功能为一体的服务器网站安全防护软件.功能涵盖了网马/木马扫描.防 ...

  6. 杭州人有福了!菜鸟配送升级新增24小时送药服务

    在杭州,深夜生病买不到药这个大问题终于被解决了!当你对物流的印象还停留在网购快递时,杭州这座新物流城市已经展开了许多尝试,还把互联网时代的红利辐射到了医药行业,从现在开始,市民夜间买药只需要动动手指, ...

  7. 【企业架构设计实战】0 企业数字化转型和升级:架构设计方法与实践

    企业架构整体结构 图例:企业架构整体结构 企业架构整体结构从战略层.规划层.落地层这三层来分别对应企业架构中 业务.架构和实施的各种重要活动和产出. 业务架构,数据架构,应用架构和技术架构之间的内在逻 ...

  8. 8xmax升级鸿蒙,配置设计各种寒酸:Redmi10X开箱

    大家好,我是梦龙君. 本来红米已经发布了K30和K30Pro两款不同价位的5G产品,产品线挺完整的了--结果突然冒出来个Redmi 10X还挺莫名其妙的,毕竟我印象中也没有9X 8X之类的产品.以官网 ...

  9. 阿里云ET城市大脑全面升级 新增城市规划、应急调度等七领域

    6月7日,阿里云在云栖大会·上海峰会上宣布ET城市大脑将向医疗应急调度.城市管理.环境治理.旅游开发.城市规划.平安城市.民生服务等七大领域拓展,从智能交通管理全面升级为整个城市的人工智能中枢.同时, ...

最新文章

  1. struts2拦截器底层原理
  2. python爬虫实例-python爬虫实例大全
  3. java 方法中定义类_在Java方法中使用类定义
  4. 在数据库技术中脏数据是指_数据库安全关键技术之数据库加密技术
  5. java之路漫漫(一)
  6. android handler 的removeMessages的使用
  7. 漫画:如何实现大整数相加
  8. 推荐系统--联邦学习下的矩阵分解(6)
  9. word实现文献引用2
  10. html把图片定位在盒子中心,html – CSS在图像的右上角定位一个图标
  11. 颜色叠加 java_可绘制Android上的颜色叠加
  12. LordPE - PE编辑工具
  13. 钉钉人脸识别,戴个太阳帽就找不到人脸
  14. 从原子操作走向模板部署,详解云上资源自动化部署新模式
  15. 孙玄:年薪75万的真实技术面试实践攻略(篇章一)
  16. UI——day15.H5和小程序的设计
  17. AutoCAD2014的安装
  18. 随机矩阵stochastic matrix和双随机矩阵 doubly stochastic matrix 和bistochastic matrix
  19. 滴滴打车CTO张博:下一阶段重点机器学习
  20. 【MySQL】听柠檬班公开课后,学习笔记及作业(一)

热门文章

  1. 计算机内部线有,电脑主机内部有几根线?分别叫什么?
  2. 常见安全产品系统默认口令
  3. Functional Programming in Java venkat(5) Using Collections part3
  4. python专科就业前景_Python就业前景怎么样?
  5. 多年亿级流量下的高并发经验总结,我毫无保留的写在了这本书中(CSDN创始人、总裁、副总裁联合推荐)
  6. linux系统 oracle 11g字符界面详细安装过程
  7. 链家武汉二手房分析和数据建模
  8. 在学RTX之前的操作系统知识
  9. 当Python和R遇上北京二手房(上)
  10. 01-计算机原理基础