当前位置: 首页 > news >正文

角度回归——角度编码方式

文章目录

  • 1.为什么研究角度的编码方式?
    • 1.1 角度本身具有周期性
    • 1.2 深度学习的损失函数因为角度本身的周期性,在周期性的点上可能产生很大的Loss,造成训练不稳定
    • 1.3 那么如何处理边界问题呢:(以θ的边界问题为例)
    • 1.3 顺时针(CW)
    • 1.4 逆时针(CCW)
  • 2 角度回归的方式
    • 2.1 长边定义法,强制W<H,range范围 [-90,+90)
    • 2.3 长边定义135度
    • 2.4 OpenCV旧版本定义法
    • 2.5 OpenCV新版本定义法
  • 不同编码方式之间的转化
  • 4 各种表示方法的边界问题
  • 参考:

1.为什么研究角度的编码方式?

从框的形式划分,可分为水平检测和旋转检测(即DOTA数据集比赛的task2和task1)。遥感目标检测难点主要包括小目标(small objects)、密集(cluttered arrangement)、方向任意(arbitary orientations)。

1.1 角度本身具有周期性

[ b x , b y , b w , b h , b a n g l e ] [{bx},{by},{bw},{bh},{bangle}] [bx,by,bw,bh,bangle] and [ b x , b y , b w , b h , b a n g l e + π ] [{bx},{by},{bw},{bh},{bangle+π}] [bx,by,bw,bh,bangle+π] 可以表征相同的旋转矩形框

[ b x , b y , b w , b h , b a n g l e ] [{bx},{by},{bw},{bh},{bangle}] [bx,by,bw,bh,bangle] and [ b x , b y , b h , b w , b a n g l e + π / 2 ] [{bx},{by},{bh},{bw},{bangle+π/2}] [bx,by,bh,bw,bangle+π/2] 可以表征相同的旋转矩形框

1.2 深度学习的损失函数因为角度本身的周期性,在周期性的点上可能产生很大的Loss,造成训练不稳定

由于学习的目标参数具有周期性,在周期变化的边界处会导致损失值突增,因此增大网络的学习难度。这句话可以参考下图进行理解:
在这里插入图片描述

1.3 那么如何处理边界问题呢:(以θ的边界问题为例)

1、寻找一种新的旋转目标定义方式,定义方式中不含具有周期变化性的参数,却又能表示周期旋转的目标物体,根本上杜绝边界问题的产生;(Anchor free/mask的思路,PolarDet、P-RSDet基于极坐标系表示一个任意四边形物体,BBA-Vectors、O^2-DNet基于向量来表示一个有向矩形,ROPDet、Beyond Bounding Box、Oriented Reppoints基于点集来表示一个任意形状的物体,)

2、从损失函数上入手,使用Smooth L1单独考虑每个参数时,赋予损失函数和角度同样的周期性,使得边界处θ之间差值可以很大,但loss变化实际很小;或者综合考虑所有回归参数的影响,使用旋转IoU损失函数也可以规避边界问题,不过RIoU不可导,近似可导的相关工作可以参考KLD、GWD,工程上实现RIoU可导的工作可以参考s2anet/README.md at master · csuhan/s2anet (github.com)

3、θ由回归问题转为分类问题。(把连续问题直接离散化,避开边界情况),当θ变为分类问题后,网络就无法学习到角度距离信息了,比如真实角度为-90,网络预测成89和-89产生的损失值我们期望是一样的,因为角度距离实际上都是1

1.3 顺时针(CW)

在这里插入图片描述

1.4 逆时针(CCW)

在这里插入图片描述
注:在MMCV中可以设置旋转方向的算子有:box_iou_rotated (默认为CW),nms_rotated (默认为CW),RoIAlignRotated (默认为CCW),RiRoIAlignRotated (默认为CCW)。

2 角度回归的方式

  • opencv定义法、
  • 长边定义法,
  • 四边形定义法

在这里插入图片描述在这里插入图片描述

在这里插入图片描述
实际上,旋转框既可以由水平框绕在中心点顺时针旋转得到,也可以由水平框绕在中心点逆时针旋转得到。 旋转方向和坐标系的选择密切相关。图像空间采用右手坐标系(y,x) ,其中y轴 是上->下, x轴是左->右。 此时存在2种相反的旋转方向。

2.1 长边定义法,强制W<H,range范围 [-90,+90)

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

我们采用的是长边定义法,所以我们的注释文件格式为:

[  classid    x_c   y_c   longside   shortside    Θ  ]  Θ∈[0, 180)* longside: 旋转矩形框的最长边* shortside: 与最长边对应的另一边* Θ: x轴顺时针旋转遇到最长边所经过的角度

利用好cv2.minAreaRect()函数+总结规律就可以

注意opencv4.1.2版本cv2.minAreaRect()函数生成的最小外接矩形框(x,y,w,h,θ)的几个大坑:

(1) 在绝大数情况下 Θ∈[-90, 0);

(2) 部分水平或垂直的目标边框,其θ值为0;

(3) width或height有时输出0, 与此同时Θ = 90;

(4) 输出的width或height有时会超过图片本身的宽高,即归一化时数据>1。

注意:数据加载器中存在大量的归一化和反归一化的操作,以及大量涉及到图像宽高度的数据变化,因此网络输入的图像size:HEIGHT 必须= WIDTH,因为长边定义法中的longside和shorside与图像的宽高没有严格的对应关系。

数据加载器中涉及三类数据增强方式:Mosaic,random_perspective(仿射矩阵增强),普通数据增强方式。

其中Mosaic,仿射矩阵增强都是针对(X_LT, Y_LT, X_RB, Y_RB)数据格式进行增强,修改时添加θ维度就可以,不过仿射矩阵增强函数内共有 Translation、Shear、Rotation、Scale、Perspective、Center 6种数据增强方式,其中旋转与形变仿射的变换会引起目标角度上的改变。

所以只要超参数中的 [‘perspective’]=0,[‘degrees’]=0 ,这块函数代码就不需要修改逻辑部分,为了方便我们直接把涉及到角度的增强放在最后的普通数据增强方式中。

注意:Mosaic操作中会同时触发MixUp数据增强操作,但是在遥感/无人机应用场景中我个人认为并不适用,首先背景复杂就是该场景中的普遍难题,MixUp会融合两张图像,图像中的小目标会掺杂另一张图的背景信息(包含形似物或噪声),从而影响小目标的特征提取。(不过一切以实验结果为准)

2.3 长边定义135度

在这里插入图片描述

2.4 OpenCV旧版本定义法

在这里插入图片描述

2.5 OpenCV新版本定义法

在这里插入图片描述

不同编码方式之间的转化

查阅

上面只列了三种转换关系,未列的可以通过这三个进行多步转换或者有兴趣的可以自己总结一下转换关系。不管是哪个表示法的转换,我们可以发现当需要进行变换操作的时候一般是这两种:

边进行交换,同时角度加减 pi/2

边不交换,角度加减 pi

这就很有意思,熟悉GWD论文的朋友可能也回想起不同定义法下的边界问题好像也是这两个关系。我们再来回顾一下为什么高斯建模可以统一不同的定义法和边界问题:

在这里插入图片描述

红框中是协方差

中三种不同的元素,这三个元素有一个共同的特点就是经过上面两种变换前后还是相同的,所以高斯建模的优势就在于此。之所以需要三个,那是因为这里有三个参数。抛开高斯分布这个框架,我们是不是可以自己先构造三个这样性质的不同组合,通过直接回归这些参数组合而不是采用GWD和KLD也能成功。

如果再思考得深入一点,我们发现对于不同的表示方式,它们计算IoU的代码其实都是通用的。这是为什么呢?因为IoU的计算过程是和第2节讲的旋转变换有关。在框的旋转过程中我们是不需要考虑旋转角度是怎么定义的,也就不需要担心变换之后是否超过定义范围,逆时针旋转5度对应的就是原始角度减去5度。检测器的参数回归也是这么做的,即使在解码中出现了我们所说的边界问题,其本质还是一个正常的旋转变换。边界问题是针对某一个确定的表示法来说的,因此如果使用IoU损失这种不用考虑框表示方式的损失函数来优化检测器就能完全不用在意边界问题。相同的,高斯建模中的协方差

也存在旋转变换,基于它的回归损失同样不需要考虑定义方式和边界问题。我暂将这种回归损失称为表示方式无关和边界问题免疫。

因此在设计旋转检测器过程中,表示法的作用应该局限于给初始候选框(如anchor)一个初始的表示形式,不能参与回归损失的计算,否则不同表示法和边界问题都会对检测器的优化带来影响,即回归损失应该是表示方式无关和边界问题免疫的。

MMRotate支持 OpenCV、长边135°、长边90° 3 种角度定义法,也支持 DOTA、SSDD、HRSID 3 个遥感数据集。

在OpenMMLab的MMCV中,实现了RiRoIAlignRotated, RotatedFeatureAlign 等高性能旋转框 CUDA 算子,因此 MMRotate 无愧是真正的史上最全、最统一的旋转目标检测算法框架。

4 各种表示方法的边界问题

由于大长宽比的目标对于角度的变化是非常敏感的,因此研究边界问题是比较有意义的。我们希望在边界情况也能预测的比较准确,减少有预测框但是不准被当FP的情况。先给出上面三种定义方法边界问题的描述图:

在这里插入图片描述

(a)90-regression-based:最理想的角度回归路线是由蓝色框逆时针旋转到红色框,但由于角度的周期性,导致按照这个回归方式的损失非常大(参见上图右边的Example)。此时模型必须以更复杂的形式回归(例如蓝色框顺时针旋转,同时缩放w和h),增加了回归的难度。通过下图(a)右边的example,我们可以发现损失值的突增来源于两部分,一个是角度周期性(periodicity of angular,PoA),另一个是边的交换性(exchangeability of edges,EoE)。

(b) 180-regression-based:相同的,这种方式比上面稍微简单一些,损失值的突增只来源于PoA。

© Point-based: 看©图,如果是蓝框是anchor,红框是ground-truth,那么通过点的排序之后,实际和理想的回归方式是一样的(按照回归的距离定义),都是:

在这里插入图片描述

通过上述三种例子的分析,我们不难得出这样的结论:理想的预测结果超出了我们所定义的范围,导致出现边界问题,即产生一个较大的损失值。

参考:

论文:RAPiD Rotation-Aware People Detection in Overhead Fisheye Images
https://zhuanlan.zhihu.com/p/358441134
https://zhuanlan.zhihu.com/p/108185873
https://zhuanlan.zhihu.com/p/111493759

相关文章:

角度回归——角度编码方式

文章目录 1.为什么研究角度的编码方式&#xff1f;1.1 角度本身具有周期性1.2 深度学习的损失函数因为角度本身的周期性&#xff0c;在周期性的点上可能产生很大的Loss&#xff0c;造成训练不稳定1.3 那么如何处理边界问题呢&#xff1a;&#xff08;以θ的边界问题为例&#x…...

【C# Programming】值类型、良构类型

值类型 1、值类型 值类型的变量直接包含值。换言之&#xff0c; 变量引用的位置就是值内存中实际存储的位置。 2、引用类型 引用类型的变量存储的是对一个对象实例的引用&#xff08;通常为内存地址)。 复制引用类型的值时&#xff0c;复制的只是引用。这个引用非常小&#xf…...

Linux Day18 TCP_UDP协议及相关知识

一、网络基础概念 1.1 网络 网络是由若干结点和连接这些结点的链路组成&#xff0c;网络中的结点可以是计算机&#xff0c;交换机、 路由器等设备。 1.2 互联网 把多个网络连接起来就构成了互联网。目前最大的互联网就是因特网。 网络设备有&#xff1a;交换机、路由器、…...

【Java 基础篇】Java网络编程实时数据流处理

在现代计算机应用程序中&#xff0c;处理实时数据流是一项关键任务。这种数据流可以是来自传感器、网络、文件或其他源头的数据&#xff0c;需要即时处理并做出相应的决策。Java提供了强大的网络编程工具和库&#xff0c;可以用于处理实时数据流。本文将详细介绍如何使用Java进…...

Oracle 和 mysql 增加字段SQL

在Oracle和MySQL中&#xff0c;可以使用ALTER TABLE语句来增加字段。下面是分别是两种数据库增加字段的SQL示例&#xff1a; 在Oracle中增加字段的SQL示例&#xff1a; ALTER TABLE 表名ADD (新字段名 数据类型);例如&#xff0c;如果要在名为"employees"的表中添加…...

【脚本】 【Linux】循环执行命令

loop.sh #!/bin/bashif [ "" "$1" ]; thenecho 用法: ./loop.sh 命令内容 时间间隔(毫秒) 循环次数(小于0表示无限循环)echo 示例: ./loop.sh "ps -ef" 1000 10exit 0 fiinterval1000 if [ "" ! "$2" ]; thenif echo &quo…...

快速用Python进行数据分析技巧详解

概要 一些小提示和小技巧可能是非常有用的&#xff0c;特别是在编程领域。有时候使用一点点黑客技术&#xff0c;既可以节省时间&#xff0c;还可能挽救“生命”。 一个小小的快捷方式或附加组件有时真是天赐之物&#xff0c;并且可以成为真正的生产力助推器。所以&#xff0…...

BD就业复习第二天

Hbase 1. 架构 HBase&#xff08;Hadoop Database&#xff09;是一个开源的分布式、面向列族&#xff08;Column Family&#xff09;的NoSQL数据库&#xff0c;它是构建在Hadoop之上的。HBase的架构设计旨在处理大规模的数据&#xff0c;特别适用于需要快速读写和随机访问大量…...

大数据Flink(八十五):Window TVF 支持多维数据分析

文章目录 Window TVF 支持多维数据分析 一、Grouping Sets 二、​​​​​​​Rollup...

css-边框原理教程

1. CSS中边框原理 他不是一条直线&#xff0c;根据盒子原理&#xff0c;当边框宽度大于元素的长和宽时&#xff0c;呈现一个梯形和三角形的形状&#xff0c;用如下的代码来实地理解一下边框画法实现的原理 注&#xff1a;学习网址&#xff1a; CSS画几种图形的方法_css画图_老…...

【数据结构】时间、空间复杂度

⭐ 作者&#xff1a;小胡_不糊涂 &#x1f331; 作者主页&#xff1a;小胡_不糊涂的个人主页 &#x1f4c0; 收录专栏&#xff1a;浅谈数据结构 &#x1f496; 持续更文&#xff0c;关注博主少走弯路&#xff0c;谢谢大家支持 &#x1f496; 时间、空间复杂度 1. 算法效率3. 时…...

Databend 开源周报第 111 期

Databend 是一款现代云数仓。专为弹性和高效设计&#xff0c;为您的大规模分析需求保驾护航。自由且开源。即刻体验云服务&#xff1a;https://app.databend.cn 。 Whats On In Databend 探索 Databend 本周新进展&#xff0c;遇到更贴近你心意的 Databend 。 理解 SHARE END…...

iOS自动化测试方案(一):MacOS虚拟机保姆级安装Xcode教程

文章目录 一、环境准备二、基础软件三、扩展&#xff1a;usb拓展插件 一、环境准备 1、下载VMware虚拟机的壳子&#xff0c;安装并注册软件(可以百度注册码)&#xff0c;最新版本&#xff1a;v17 2、下MacOS系统iOS镜像文件&#xff0c;用于vmware虚拟机安装&#xff0c;当前镜…...

vue3 - Vue 项目处理GitHub Pages 部署后 _plugin-vue_export-helper.js 404

GitHub Demo 地址 在线预览 vue3项目打包后部署到github pages 后&#xff0c;预览网站提示下划线开头的一个文件_plugin-vue_export-helper访问不到&#xff0c;网络请求显示404 处理GitHub Pages 部署 _plugin-vue_export-helper.js 404 https://github.com/rollup/rollup/b…...

一百八十一、Hive——海豚调度HiveSQL任务时当Hive的计算引擎是mr或spark时脚本的区别(踩坑,附截图)

一、目的 当Hive的计算引擎是spark或mr时&#xff0c;发现海豚调度HQL任务的脚本并不同&#xff0c;mr更简洁 二、Hive的计算引擎是Spark时 &#xff08;一&#xff09;海豚调度脚本 #! /bin/bash source /etc/profile nowdatedate --date0 days ago "%Y%m%d" y…...

Linux 隔离网段下端口转发

设备在隔离网段下&#xff0c;设置端口转发。使A设备可访问C设备的服务 #!/bin/bash #输出成绩脚本 echo -n "请输入外网服务器的IP地址&#xff1a;" read score sudo iptables -t nat -A PREROUTING -p tcp --dport 1883 -j DNAT --to-destination $score:1883 s…...

【CDN和UDN】CDN和UDN技术特点以及使用场景

内容分发网络&#xff08;CDN&#xff09;和用户自定义网络&#xff08;UDN&#xff09;是两种不同的网络技术&#xff0c;在选择时&#xff0c;往往不能准备把握具不同的技术特点和应用场景。CDN 主要用于加速内容分发&#xff0c;而 UDN 则主要用于支持用户自定义的网络需求。…...

【Linux】改变缓存路径、清理缓存

写在前面 在做项目的过程中&#xff0c;服务器base路径下空间不足&#xff0c;准备在另一个目录下创建虚拟环境&#xff0c;但在安装的过程中&#xff0c;发现base路径下的空间还是在减少&#xff0c;后来经过学习了解到&#xff0c;pip安装下载依赖包时&#xff0c;会先下载缓…...

python+opencv寻找图片或视频中颜色进行追踪之HSV颜色处理

pythonopencv寻找图片或视频中颜色进行追踪之HSV颜色处理 1.颜色空间转换 import cv2img cv2.imread(1.jpg) # 转换为灰度图 img_gray cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)cv2.imshow(img, img) cv2.imshow(gray, img_gray) cv2.waitKey(0)cv2.cvtColor()用来进行颜色模…...

ubuntu 22.04 服务器网卡无IP地址

ssh连接服务器连接不上&#xff0c;提示如下&#xff1b; 连接显示器&#xff0c;ip addr ls 命令查看IP地址&#xff0c;有网卡但没有IP地址 solution&#xff1a; sudo dhclient enp10s0用于通过 DHCP 协议获取网络配置信息并为名为 enp10s0 的网络接口分配 IP 地址,enp1…...

基于SpringBoot的网上点餐系统

目录 前言 一、技术栈 二、系统功能介绍 用户功能模块 管理员功能模块 美食店功能模块 前台首页功能模块 三、核心代码 1、登录模块 2、文件上传模块 3、代码封装 前言 系统管理也都将通过计算机进行整体智能化操作&#xff0c;对于网上点餐系统所牵扯的管理及数据保存…...

浅谈xss

XSS 简介 XSS,全称Cross Site Scripting,即跨站脚本攻击,是最普遍的Web应用安全漏洞。这类漏洞能够使得攻击者嵌入恶意脚本代码到正常用户会访问到的页面中,当正常用户访问该页面时,则可导致嵌入的恶意脚本代码的执行,从而达到恶意攻击用户的目的。需要强调的是,XSS不仅…...

悬崖边:企业如何应对网络安全漏洞趋势

在本文中&#xff0c;我们将讨论企业在处理漏洞时面临的挑战&#xff0c;解释安全漏洞是如何引发网络攻击的&#xff0c;以及为什么它会导致不可接受的事件。我们还将分享我们在识别趋势性漏洞方面的经验。 现代信息安全方法正在成为企业的工作流程。例如&#xff0c;不久前&a…...

MyBatis 动态 SQL、MyBatis 标签、MyBatis关联查询

MyBatis 动态 SQL、MyBatis 标签、MyBatis关联查询 1、MyBatis动态 sql 的特性2、MyBatis 标签2.1、if 标签&#xff1a;条件判断2.2、whereif 标签2.3、set 标签2.4、choose(when,otherwise) 语句2.5、trim2.6、MyBatis foreach 标签 3、整合案例3.1、XML3.2、测试类 4、sql 标…...

在Vue中使用Immutable.js

在Vue3中使用Immutable.js 以下是如何在Vue.js中使用Immutable.js的步骤&#xff1a; 首先&#xff0c;需要安装immutable.js。你可以通过npm或yarn来安装&#xff1a; npm install immutable或者 yarn add immutable在你的Vue组件中导入Immutable&#xff1a; import { Ma…...

基于Yolov8的工业端面小目标计数检测(1)

1.端面小目标计数数据集介绍 工业端面小目标计数类别:一类,类别名object 数据集大小:训练集864张,验证集98张 缺陷特点:小目标计数,检测难度大,如下图所示; 1.1 小目标定义 1)以物体检测领域的通用数据集COCO物体定义为例,小目标是指小于3232个像素点(中物体是指…...

1.什么是jwt?jwt的作用是什么?2.jwt的三个部分是什么?三者之间的关系如何?3.JWT运行的流程是什么

1. **什么是JWT&#xff1f;JWT的作用是什么&#xff1f;** JWT&#xff08;JSON Web Token&#xff09;是一种用于在不同系统或组件之间传输信息的紧凑且安全的标准。它的作用主要有两个方面&#xff1a; - **身份验证&#xff08;Authentication&#xff09;**&#xf…...

十三、MySql的视图

文章目录 一、前言二、定义三、为什么使用视图四、基本使用&#xff08;—&#xff09;创建视图&#xff08;二&#xff09;案例1.修改了视图&#xff0c;对基表数据有影响2.修改了基表&#xff0c;对视图有影响3.删除视图 五、视图规则和限制 一、前言 通过视图&#xff0c;可…...

MFC扩展库BCGControlBar Pro v33.6亮点 - 流程图、Ribbon Bar功能升级

BCGControlBar库拥有500多个经过全面设计、测试和充分记录的MFC扩展类。 我们的组件可以轻松地集成到您的应用程序中&#xff0c;并为您节省数百个开发和调试时间。 BCGControlBar专业版 v33.6已正式发布了&#xff0c;此版本包含了对图表组件的改进、带隐藏标签的单类功能区栏…...

前端 JS 经典:文件流下载

重点&#xff1a;调用接口时&#xff0c;一定要配置 responseType 的值为 blob&#xff0c;不然获取的文件流&#xff0c;不会转义成 blob 类型的文件。 1. 接口返回文件流 // BLOB (binary large object)----二进制大对象&#xff0c;是一个可以存储二进制文件的容器 // 下载…...

网页设计做网站首页/域名注册万网

前言 上一篇的标题改了一下&#xff0c;以一、二、三为章节对读者来说是种困扰&#xff0c;现在的标题是依照项目进度来编写的。上篇文章地址为 https://segmentfault.com/a/11... 这一系列文章并不准备写太多章节&#xff0c;大概规划的只有4~5章左右&#xff0c;具体实现代码…...

徐州网站制作费用/北京seo优化多少钱

股市赢家十大铁律&#xff1a;不求完美 只求收获2009-04-08 15:10股市中有无数先行者&#xff0c;他们的成败得失&#xff0c;值得后来者总结与借鉴。而其中的规律&#xff0c;对指导我们今后的投资&#xff0c;是大有裨益的。一、以"我"为主&#xff0c;培养自己独立…...

个人网页设计制作题目目的/seo诊断

据日经新闻6月29日消息&#xff0c;多亏开发出了新的人工智能分析系统&#xff0c;东芝的支柱产业闪存业务的生产效率提升&#xff0c;东芝有望加快逃出经营困局。在东芝的三重县四日工厂&#xff0c;AI分析技术主要用于监控半导体生产过程中的良品率&#xff0c;对于不合格的电…...

郑州做网站建设/湖南正规seo优化

66666666666666666转载于:https://www.cnblogs.com/tudousi1/p/5891039.html...

合肥网站建设需要多/武威网站seo

《UltraSR Spatial Encoding is a Missing Key for Implicit Image Function-based Arbitrary-Scale Super-Resolution》&#xff08;说明&#xff1a;如果您认为下面的文章对您有帮助&#xff0c;请您花费一秒时间点击一下最底部的广告以此来激励本人创作&#xff0c;谢谢!!!&…...

八大处做双眼预约网站/app开发公司排名

你还在为了Word、Excel、PDF、CAD等文档格式转换而发愁吗&#xff1f; 你是否在寻找一款能够在应用程序中文档管理的工具呢&#xff1f; Aspose——支持100多种文件格式创建、编辑、转换和打印&#xff01; 往下看&#xff0c;找一找哪款产品满足您的开发需求~ ▼▼▼▼▼ ★…...