H2RBox:HORIZONTAL BOX ANNOTATION IS ALL YOU NEED FOR ORIENTED OBJECT DETECTION(读论文)

2023-11-05

H2RBOX: HORIZONTAL BOX ANNOTATION IS ALL YOU NEED FOR ORIENTED OBJECT DETECTION


训练旋转目标检测器使用水平框就够了

abstract

利用水平框标注训练旋转框能够节省标注成本,并且优化大量的现有数据集。
本文使用弱监督结合自监督训练了一个旋转框检测器,并与基于水平框的实例分割模型比较了性能。
代码:https://github.com/yangxue0827/h2rbox-mmrotate

intro

介绍了几个数据集:
DIOR-R
SKU110K-R
介绍了一些HBox-supervised instance segmentation方法:
BoxInst
BoxLevelSet

由于本任务第一次提出,本文的模型将与 实例分割-外接矩形模型 性能比较。

在这里插入图片描述
本文的贡献:

  • 第一个HBox annotation-based oriented object detector,提出self-supervised angle prediction moule
  • 与H2RBox实例分割-外接矩形模型BoxInst (Tian et al., 2021)比较,mAP50(67.9% vs 53.59%),12 x faster(31.6fps vs 2.7fps),显存占用 (6.25 GB vs. 19.93 GB)
  • 与经典旋转目标检测模型FCOS比较,
    H2RBox is only 0.91% (74.40% vs. 75.31%) behind on DOTA-v1.0, and even surpasses it by 1.7% (34.90% vs. 33.20%) on DIOR-R ,29.1 FPS vs. 29.5 FPS on DOTA-v1.0.

related work

一些等看的论文:
SDI
MCG
BBTP
Mask R-CNN
BoxInst
CondInst
BoxLevelSet

proposed method

这一部分推荐结合论文看,毕竟方法是最重要的部分,作者在论文中阐述的已经是精简的版本了。
在这里插入图片描述

  • 增强视角生成

文本最有趣的地方就是使用了自监督,保证预测旋转框的角度一致性,如示意图右边所示。注意:旋转后输入网络,要么需要裁剪,要么需要填充。
1:保留中心区域
2:填充(空白填充 与 反射填充)
(这里填充区域不参与回归损失,不必担心填充部分出现了目标)
在这里插入图片描述

  • 弱监督分支

使用 resnet + FPN 结构,FCOS的头部网络用于regerssion
如何设置监督呢?
使用外接水平框作为监督,作者说明,这样会导致一个问题,即无法准确预测出RBox,导致如下情况出现
在这里插入图片描述

  • 自监督分支

作为ws分支的补充,ss分支只包含回归,不包含分类,这意味着ss就是用来优化网络对于框回归的学习,即xywha
简单回忆一下旋转变换矩阵
在这里插入图片描述
回忆FCOS学习xl xr yl yr四个参数,结合centerness完成label assignment。由于外接水平框一定满足,中心与原始旋转框中心重合,故旋转框需要学习的参数有w h theta,显然当w h都准确时,为了外接矩形与gtH相等,theat只有两种情况。在这里插入图片描述
B s s s = S ( R ⋅ B w s c ) B_{ss}^s = S(R\cdot B_{ws}^c) Bsss=S(RBwsc)
这里等式左边代表ss分支预测的镜像框,右侧S代表水平翻转变换(因为中心对称,称垂直翻转也可),R代表旋转矩阵(即,由 θ \theta θ得到的旋转矩阵,角度为ss的旋转角), B w s c B_{ws}^c Bwsc为ws分支预测的框coincident rbox

(下面几句话我不能理解)
The final SS learning consists of scale-consistent and spatial-location-consistent learning:
S i m ⟨ R ⋅ B w s , B s s ⟩ Sim \langle R\cdot B_{ws},B_{ss} \rangle SimRBws,Bss
Fig. 4(b) shows the visualization by using the SS loss, with accurate predictions. The appendix
shows visualizations of feasible solutions for different combinations of constraints.
(主要是我不认为这样就能确定出一个旋转框,让我们接着看吧)

  • label assignment

作者:ws分支与ss分支的一致性可以通过 设置中心点损失和角度损失,来学习。
ws 分支预测的rb用于监督ss分支预测出来的rbox。并且图中每一个像素点的centerness category target GT Hbox应该保持一致。
1)一对一,每一个原图点对应到ss图点,用其rb对应的Hb作为监督
2)一对多,最接近中心点的rb用来监督ss分支rb
在这里插入图片描述
(说实话,这几句,我似懂非懂,也不知道自己理解的对不对,还是得从代码入一下)

  • loss combining the ws and ss

ws分支:rotated object detector,基于FCOS,损失: L r e g L c l s L c n L_{reg} L_{cls} L_{cn} LregLclsLcn分别是focal loss cross-entropy loss IoU loss,# 为啥还有Lcn???
在这里插入图片描述
一些参数解释:(不想手打了,没啥区别)
在这里插入图片描述

重点的,让我们看一下ss分支损失:
在这里插入图片描述
额,这个Lxy中的t没有解释,然后B(-,-,+,+)我没有看懂。。

experiment

见论文

ablation studies

在这里插入图片描述

  • 生成边界方法对结果的影响
  • 不同assigner对结果影响
  • 特殊圆形物体的训练、测试策略(st为storage tank)
  • ss方法对结果的提升

代码层面解读

代码见论文中链接
看了代码整体代码非常简洁,本文主要是在loss设计新颖
接下来分三个步骤介绍代码

model.forwar_train(self,img,img_meta,gt_bboxes,gt_labels,gt_bboxes_ignore)

这一部分是网络前向传播的代码干了如下事情:

  • 随机生成一个角度
  • 对原始图片进行旋转,然后反射填充边界
  • 旋转后图片和原始图片送入backbone+neck(共享权重)
  • 然后把得到的特征图送入head.forward_train

可见与一般的model.forward_train不同的仅仅是多了一个并行分支。

losses=self.bbox_head.forward_train(x,x_aug,rot,img_metas,gt_bboxes,gt_labels,gt_bboxes_ignore)

送入了头部网络Rotated_FCOS_head
头部网络首先是对于原始的x,直接forward(x)作用上去得到,bbox_pred,angle_pred,class,centerness
然后对于x_aug,走一遍回归分支(共享权重)得到bbox_pred,angle_pred

下面就是最重要的loss计算,如何设计loss?
按照论文中,首先关于x的loss使用FCOS的自带loss即可,分类+回归+角度+centerness都有损失,然后x_aug相关的损失可以称为一致性损失。下面让我们细看

loss(outs,outs_aug,tf,gt_bboxes, gt_labels, img_metas)

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

H2RBox:HORIZONTAL BOX ANNOTATION IS ALL YOU NEED FOR ORIENTED OBJECT DETECTION(读论文) 的相关文章

  • 阿里云存储图片x-oss-process常用方法处理

    图片缩放至80 转换为webp格式 质量为原来的80 转换后尺寸为480px 320px x oss process image resize p 80 format webp quality q 80 宽度调整为180 通常只调整至指定宽
  • 【考研先知】

    官网 中国研究生招生信息网https yz chsi com cn 考试流程 学硕专硕 AB区 地区 A区 北京 天津 上海 江苏 浙江 福建 山东 河南 湖北 湖南 广东 河北 山西 辽宁 吉林 黑龙江 安徽 江西 重庆 四川 陕西21个
  • 在H+框架下的一个给iframe 的body 添加事件。

    需求 在后台框架下面点击F5的时候只刷新子页面 不刷新主站点 菜单表来自同域名下的不同的站点 里面涉及到跨域问题 通过document domain可解决 想法在点击F5的时候阻止父页面的刷新 并获取当前iframe的src 重新刷新即可
  • 分子图形学(转载自维基,英文)

    分子图形学 来自http en wikipedia org wiki Molecular graphics Molecular graphics MG is the discipline and philosophy of studying
  • 单片机开发---基于ESP32-CAM的人脸识别应用

    背景 学习了一下OpenCV 熟悉了一点基础概念 就寻找了一下单片机上能否支持人脸识别 用来做一些小玩意 结果还真发现了一个模块叫ESP32 CAM ESP32 CAM算得上是一款最便宜的支持人脸识别的单片机开发板了 性能算是单片机里相当不
  • python快速编程入门-期末版一版课后习题

    不喜勿喷 python书中课后习题 黑马程序员 第一章 python概述 1 编程实现打印 print print print 第二章 python基础语法 2 由三角形两直角边求斜边长度 import math a float input
  • 【MATLAB】图像处理相关函数gscale函数

    function g gscale f varargin GSACLE函数实现对输入图像的标度 G GSACLE F full8 将图像标度到 0 255 全范围 默认值 G GSACLE F full16 将图像标度到 0 65535 全
  • iphone如何查看wifi密码_手机连接wifi如何查看密码 手机连接wifi查看密码方法【介绍】...

    随着无线WiFi的普及 一个家庭中只要有一个账号 就能实现多人多台设备上网 节省了不少手机流量的开支 尤其是哪些看追剧 看视频的朋友 如果运用手机流量可能会花不少的资金呢 如果手机上的无线WiFi密码忘记了该怎么办呢 怎么查看手机无线WiF

随机推荐

  • C# Modbus通信从入门到精通(11)——调试软件Modbus Slave和Modbus Poll的使用

    前言 我们在开发Modbus程序的时候 会需要测试以下我们写的Modbus程序有没有问题 这时候就需要使用到Modbus Slave和Modbus Poll这两个软件 Modbus Slave是模拟Modbus从站 Modbus Poll是
  • 逆序栈(递归⚠)

    给你一个栈 请逆序这个栈 不能申请额外的数据结构 只能使用递归求解 题解 这道题难点就在于无法申请额外数据结构 可以用两个递归函数实现 第一个递归函数GetBottom 主要用途是将栈底的数据出栈 并返回该数据的值 所以我们可以使用递归让栈
  • 微信小程序实现黑白化

    像在清明节 经常来看到有很多网站或者App还有小程序 界面显示黑白化 那么原理是怎么实现的呢 对于不同平台可能会有区别 但是原理都差不多 几行代码就可实现 原理都是给页面加上一层灰色滤镜 效果 1 网页实现方式 第一种 修改CSS文件 我们
  • java file 网络文件_Java 网络文件传输

    读者范围 本文是一篇简短入门文章 本文假设读者对Java的IO系统和Java的网络系统有所了解 正文 关于文件传输的问题 实际也是一种IO读写的基本问题 对于网络而言也是一种IO读写问题 因此所谓网络的文件传输实际是两种IO问题的综合讨论
  • 带头结点的链表的基本操作(超详细)

    目录 前言 一 链表的定义 二 链表的 C 语言描述 三 链表中基本操作的实现 3 1构造一个带头结点的空链表 3 2取第i个数据元素 3 3在链表中查找值为e的元素 3 3 1返回值类型是节点的地址 3 3 2返回值类型是节点的位置 序号
  • 数据清洗有哪些方法?

    随着大数据时代的发展 越来越多的人开始投身于大数据分析行业 当我们进行大数据分析时 我们经常听到熟悉的行业词 如数据分析 数据挖掘 数据可视化等 然而 虽然一个行业词的知名度不如前几个词 但它的重要性相当于前几个词 即数据清洗 顾名思义 数
  • LeetCode 算法题 - 判断根结点是否等于子结点之和(简单)

    题目 Definition for a binary tree node type TreeNode struct Val int Left TreeNode Right TreeNode func checkTree root TreeN
  • 关于WebSocket的心跳重连机制(详解)

    前言 遇到的问题 实时聊天过程中 1 websocket连接后 长时间远端和客户端不发消息 服务端会把websocket给断开 2 所以就需要一种机制来检测客户端和服务端是否处于正常的链接状态 3 因此就有了websocket的 心跳监测
  • Vue element-ui form 表单 前端提交和后端的接收

    一 前端 1 新建弹窗dialog
  • Flink java wordcount案例(批处理、流处理)

    基本思路 首先构造pom xml 构造数据源 把数据都写在文件中 批处理 使用import org apache flink api java DataSet 读取数据 流处理 使用import org apache flink strea
  • 九十五.深度优先搜索DFS(深入递归(二))

    题一 数独游戏 你一定听说过 数独 游戏 如图 玩家需要根据9 9盘面上的已知数字 推理出所有剩余空格的数字 并满足每一行 每一列 每一个同色九宫内的数字均含1 9 不重复 数独的答案都是唯一的 所以 多个解也称为无解 本图的数字据说是芬兰
  • QT中使用函数指针

    想仿命令行 所以定义了一个类 让一个String 对应一个 function 将两者输入list容器 类中定义了 QString commandStr void MainWindow commandFun void 一个QString 一个
  • Protege新手入门(基础篇)

    通过制作一个简单的动物本体 来使大家了解protege建立owl的基础用法 步骤1 建立新的项目 打开protege 然后会出现对话框 点击Create New Project 出现Create New Project对话框后 选择OWL
  • 【kali】kali换了root权限后无法打开firefox浏览器

    从普通权限换成root权限后发现火狐进不去鸟 终端报错 Running firefox as root in a regular user s sessin is not supported HOME is home miehahaha w
  • redis(1)-hiredis-Windows下的编译

    1 linux编译说明文档 GitHub sewenew redis plus plus Redis client written in C 2 hiredis 编译 2 1 hiredis下载 https github com redis
  • hdu 1060

    Given a positive integer N you should output the leftmost digit of N N Input The input contains several test cases The f
  • Linux下进程内存空间组成/进程的内存映像

    http blog csdn net yusiguyuan article details 45155035 http javathinker iteye com blog 1733058 前言 在偏底层的开发中 需要了解程序的是如何存储的
  • ddl是什么意思网络语_DDL是什么意思

    1 It is necessary to accurately monitor location of gas water interface in annular between casing and test tube for pres
  • Java实现设计模式之——单例模式

    目录 1 什么是单例模式 2 单例模式的实现 2 1 饿汉式单例模式 2 2 懒汉式单例模式 3 线程安全的单例模式 3 1 版本 1 3 2 版本 2 双重检测 3 3 版本 3 禁止指令重排 1 什么是单例模式 单例模式是 Java 中
  • H2RBox:HORIZONTAL BOX ANNOTATION IS ALL YOU NEED FOR ORIENTED OBJECT DETECTION(读论文)

    H2RBOX HORIZONTAL BOX ANNOTATION IS ALL YOU NEED FOR ORIENTED OBJECT DETECTION 文章目录 H2RBOX HORIZONTAL BOX ANNOTATION IS