MMRotate 全面升级,新增 BoxType 设计

news2024/10/6 4:05:12

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

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 分支来体验我们的全新版本。我们将在未来保持双分支的同时维护,主要维护时间线如下所示:

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/25708.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

瞄准镜-第12届蓝桥杯Scratch选拔赛真题精选

[导读]:超平老师计划推出Scratch蓝桥杯真题解析100讲,这是超平老师解读Scratch蓝桥真题系列的第82讲。 蓝桥杯选拔赛每一届都要举行4~5次,和省赛、国赛相比,题目要简单不少,再加上篇幅有限,因此我精挑细选…

数据结构——单链表

一.简介 上一篇文章,我们介绍了线性表中的顺序表。 而顺序表拥有一些缺陷 1.空间不够时需要增容,增容需要付出代价 2.为避免重复扩容,我们进行指数扩容,可能会造成空间浪费 3.顺序表从开始位置连续存储,插入删除数…

卡特尔世界杯来了,只喝精酿啤酒不玩望京扑克,其实也是一种缺失

北京时间2022年11月20日,卡特尔世界杯正式拉开了序幕,全球都进入了世界杯时间。世界杯的开幕,最高兴的还是球迷朋友,大家可以欢聚一堂,喝着精酿啤酒看着足球,那滋味别提多舒服了。 世界杯对于广大球迷来说&…

表的增删查改

目录 插入数据 基本查询 更新数据 清空数据 聚合函数 group by子句 内置函数 基本查询练习 多表查询 子查询 合并查询 表的内外连接 插入数据 单行—全列插入 如下图,全列插入可以省略要在哪些列插入! 多行—指定列插入 如下图&#xff0…

安装 Red Hat Enterprise Linux 9.1 虚拟机

目录1. 官方下载链接与新闻2. 安装提示3. 系统安装步骤(1)进入系统引导界面(2)进入【系统语言选择】界面(3)进入【安装信息摘要】界面① 设置【root密码】② 设置【安装目的地】(4)进…

【python】使用python将多个视频合并、延长视频的时间

今天做知识分享的时候,最后保存的视频时长是58分钟,那么如何改变视频的时长,将视频时长改为一个小时呢? 下面提供3个方案: 方案1,重新录,很显然,不合理; 方案2&#xf…

蓝屏page_fault_in_nonpaged_area的解决办法

用户在操作电脑的过程中,难免会遇到蓝屏问题,最近就有用户遇到电脑蓝屏重启无限循环,提示代码page_fault_in_nonpaged_area,这要如何解决呢?下面就来看看详细的解决办法。 page_fault_in_nonpaged_area蓝屏代码解决方法…

【MySQL篇】第一篇——数据库基础

目录 什么是数据库 主流数据库 基本使用 MySQL安装 连接服务器 服务器管理 服务器,数据库,表关系 使用案例 创建数据库 使用数据库 创建数据库表 表中插入数据 查询表中的数据 数据逻辑存储 MySQL架构原理 MySQL整体逻辑架构 MySQL逻辑…

Eureka架构篇 - 服务发现

前言 从客户端与服务端两个角度概述一下Eureka服务发现的原理,如下: 客户端 依赖自动装配机制,客户端启动时就会从Eureka服务端全量获取服务实例的注册信息并缓存到本地。之后每隔30秒向Eureka服务端发起增量获取的请求,如果增…

云原生周刊 | 波音公司允许员工给开源项目做贡献

如果你要问谁对开源项目的贡献最小,那一定是保密等级很高的国防工业机构,但这个魔咒最近被波音公司给打破了。在最近的一次 Linux 基金会成员峰会 keynote 演讲中,波音公司提到他们会在 2022 年成立一个开源办公室,并且从即日起&a…

m基于MATLAB-GUI的GPS数据经纬度高度解析与kalman分析软件设计

目录 1.算法概述 2.仿真效果预览 3.MATLAB部分代码预览 4.完整MATLAB程序 1.算法概述 经度纬度和高度来自GPS信号的中的GPGGA的数据。所以提取这三个信息主要是对GPGGA中的数据进行整理。GPGGA的数据格式如下所示: GPGGA是GPS数据输出格式语句,意思是…

9问502

一、502意味着什么 502 Bad Gateway是指错误网关,无效网关;在互联网中表示一种网络错误。表现在WEB浏览器中给出的页面反馈。它通常并不意味着上游服务器已关闭(无响应网关/代理) ,而是上游服务器和网关/代理使用不一…

latex 模板使用技巧——参考文献篇

参考文献说明: 一、 常用参考文献类型 1、会议 (INPROCEEDINGS) 示例: INPROCEEDINGS{rcnn,title{Rich feature hierarchies for accurate object detection and semantic segmentation},author{Girshick, Ross and Donahue, J…

骨传导耳机是利用什么原理听歌?什么骨传导耳机好用

这几年来骨传导耳机的火热程度不言而喻,很多运动人士手上必有一款骨传导耳机,也随着骨传导耳机的兴起,越来越多小伙伴都加入了运动当中。当然,也有很多小伙伴是不知道骨传导耳机的,更不知道骨传导耳机有什么作用&#…

KESION(.NET版)安装方法

若是windows2008系统,访问xxxxxx.com - xxx sex videos free hd porn 资源和信息。 安装界面没有样式加载,请先编辑web.config 去掉 <defaultDocument> <files> <clear /> <add value"index.aspx" /> </files> </defaultDocume…

Android App开发手机阅读中PDF文件渲染器的讲解及使用(附源码 简单易懂)

需要源码和图片集请点赞关注收藏后评论区留言~~~ 一、PDF文件渲染器 Android集成了PDF的渲染操作&#xff0c;从很大程度上方便了开发者&#xff0c;这个PDF文件渲染器便是PdfRenderer。渲染器允许从存储卡读取PDF文件 打开PDF文件只是第一步&#xff0c;接下来使用PdfRender…

Java FreeMarker模板引擎注入深入分析

0x01 前言 最近和 F1or 大师傅一起挖洞的时候发现一处某 CMS SSTI 的 0day&#xff0c;之前自己在复现 jpress 的一些漏洞的时候也发现了 SSTI 这个洞杀伤力之大。今天来好好系统学习一手。 有三个最重要的模板&#xff0c;其实模板引擎本质上的原理差不多&#xff0c;因为在…

CPT-MNPS/Fe3O4 NPs/Au NPs顺铂偶联磁性纳米粒子/四氧化三铁纳米粒子/金纳米粒子

小编下面整理了CPT-MNPS/Fe3O4 NPs/Au NPs顺铂偶联磁性纳米粒子/四氧化三铁纳米粒子/金纳米粒子&#xff0c;来看&#xff01; CPT-偶联纳米粒子 采用新工艺制备了包载盐酸阿霉素的明胶-泊洛沙姆纳米脂质体&#xff0c;并进行相关性能的表征。采用WW型明胶-泊洛沙姆乳液体系结合…

131. 分割回文串-思路整理

题目 给你一个字符串s&#xff0c;请你将 s分割成一些子串&#xff0c;使每个子串都是回文串。返回 s 所有可能的分割方案。 回文串: 是正着读和反着读都一样的字符串。 输入&#xff1a;s "aab" 输出&#xff1a;[["a","a","b"]…

Advances in Graph Neural Networks笔记4:Heterogeneous Graph Neural Networks

诸神缄默不语-个人CSDN博文目录 本书网址&#xff1a;https://link.springer.com/book/10.1007/978-3-031-16174-2 本文是本书第四章的学习笔记。 感觉这一章写得不怎么样。以研究生组会讲异质图神经网络主题论文作为标准的话&#xff0c;倒是还行&#xff0c;介绍了HGNN的常见…