【目标检测】【边界框回归】Bounding-Box regression

news/2024/5/20 4:15:22/文章来源:https://blog.csdn.net/wzk4869/article/details/127530093

最近开始看目标检测的论文,第一篇为R-CNN论文,是两阶段目标检测的开山奠基之作。论文中的损失函数包含了边界框回归,且在R-CNN论文里面有详细的介绍。

一、为什么要做边界框回归?

在这里插入图片描述
对于上图,绿色的框表示Ground Truth,红色的框为Selective Search提取的Region Proposal。那么即便红色的框被分类器识别为飞机,但是由于红色的框定位不准(IoU<0.5),那么这张图相当于没有正确的检测出飞机。

这时,我们可以对红色的框进行微调,使得微调后的窗口跟Ground Truth更接近,这样就能实现较为准确的定位。

而Bounding-Box regression就是用来微调这个窗口的。

二、边界框回归是什么?

对于窗口,我们一般用四维向量(x,y,w,h)(x,y,w,h)(x,y,w,h)来表示,分别表示窗口的中心点坐标和宽高。
在这里插入图片描述
红色的框PPP代表原始的Proposal, 绿色的框 GGG 代表目标的Ground Truth, 我们的目标是寻找一种关系使得输入原始的窗口PPP经过映射得到一个跟真实窗口GGG更接近的回归窗口G^\hat{G}G^

边框回归的目的既是:给定(Px,Py,Pw,Ph)(P_x,P_y,P_w,P_h)(Px,Py,Pw,Ph)寻找一种映射fff,使得f(Px,Py,Pw,Ph)=(G^x,G^y,G^w,G^h)f(P_x,P_y,P_w,P_h) = (\hat{G}_x,\hat{G}_y,\hat{G}_w,\hat{G}_h)f(Px,Py,Pw,Ph)=(G^x,G^y,G^w,G^h)并且(G^x,G^y,G^w,G^h)≈(Gx,Gy,Gw,Gh)(\hat{G}_x,\hat{G}_y,\hat{G}_w,\hat{G}_h) \approx (G_x,G_y,G_w,G_h)(G^x,G^y,G^w,G^h)(Gx,Gy,Gw,Gh)

三、边界框回归怎么做的?

那么经过何种变换才能从图中的窗口 P 变为窗口G^\hat{G}G^呢?比较简单的思路就是: 平移+尺度放缩

第一步:先做平移(Δx,Δy)(\Delta_x,\Delta_y)(Δx,Δy)

其中:Δx=Pwdx(P)\Delta_x=P_wd_x(P)Δx=Pwdx(P)Δy=Phdy(P)\Delta_y=P_hd_y(P)Δy=Phdy(P),这是R-CNN论文里面的:
G^x=Pwdx(P)+Px\hat{G}_x=P_wd_x(P)+P_x\\ G^x=Pwdx(P)+Px
G^y=Phdy(P)+Py\hat{G}_y=P_hd_y(P)+P_y G^y=Phdy(P)+Py

第二步:做尺度缩放(Sw,Sh)(S_w,S_h)(Sw,Sh)

Sw=exp(dw(P))S_w=exp(d_w(P))Sw=exp(dw(P))Sh=exp(dh(P))S_h=exp(d_h(P))Sh=exp(dh(P)),对应的论文中:
G^w=Pwexp(dw(P))\hat{G}_w=P_wexp(d_w(P)) G^w=Pwexp(dw(P))
G^h=Phexp(dh(P))\hat{G}_h=P_hexp(d_h(P)) G^h=Phexp(dh(P))
观察上面的等式我们不难发现,边界框回归学习就是dx(P),dy(P),dw(P),dh(P)d_x(P),d_y(P),d_w(P),d_h(P)dx(P),dy(P),dw(P),dh(P)这四个变换。下一步就是设计算法得到这四个映射。

边界框回归,我们该如何去理解呢?

首先对于线性回归的概念,我们给定输入的特征向量XXX,学习一组参数ω\omegaω,使得经过线性回归后的值跟真实值YYY(Ground Truth)非常接近,即Y≈ωXY\approx \omega XYωX。那么Bounding-Box中我们的输入与输出分别是什么呢?

Input:

Region Proposal ->P(Px,Py,Pw,Ph)P(P_x,P_y,P_w,P_h)P(Px,Py,Pw,Ph),这个是什么? 输入就是这四个数值吗?

其实真正的输入是这个窗口对应的 CNN 特征,也就是 R-CNN 中的 Pool5 feature(特征向量)。

(注:训练阶段输入还包括 Ground Truth, 也就是下边提到的t∗=(tx,ty,tw,th)t_{\ast}=(t_x,t_y,t_w,t_h)t=(tx,ty,tw,th)

Output:

需要进行的平移变换和尺度缩放dx(P),dy(P),dw(P),dh(P)d_x(P),d_y(P),d_w(P),d_h(P)dx(P),dy(P),dw(P),dh(P), 或者说是Δx,Δy,Sw,Sh\Delta_x,\Delta_y,S_w,S_hΔx,Δy,Sw,Sh,我们的最终输出不应该是 Ground Truth 吗? 是的, 但是有了这四个变换我们就可以直接得到 Ground Truth, 这里还有个问题, 根据公式我们可以知道, P 经过dx(P),dy(P),dw(P),dh(P)d_x(P),d_y(P),d_w(P),d_h(P)dx(P),dy(P),dw(P),dh(P)得到的并不是真实值 G, 而是预测值G^\hat{G}G^。的确, 这四个值应该是经过 Ground Truth 和 Proposal 计算得到的真正需要的平移量(tx,ty)(t_x,t_y)(tx,ty)和尺度缩放(tw,th)(t_w,t_h)(tw,th)

这也就是 R-CNN 中的下述的公式:
tx=(Gx−Px)/Pwt_x=(G_x-P_x)/P_w tx=(GxPx)/Pw
ty=(Gy−Py)/Pht_y=(G_y-P_y)/P_h ty=(GyPy)/Ph
tw=log⁡(Gw/Pw)t_w=\log(G_w/P_w) tw=log(Gw/Pw)
th=log⁡(Gh/Ph)t_h=\log(G_h/P_h) th=log(Gh/Ph)
那么目标函数可以表示为:
d∗(P)=w∗TΦ5(P)d_{\ast}(P)=w_{\ast}^{T}\Phi_5(P) d(P)=wTΦ5(P)
其中Φ5(P)\Phi_5(P)Φ5(P)是输入 Proposal 的特征向量,w∗w_{\ast}w是要学习的参数(∗\ast表示x,y,w,hx,y,w,hx,y,w,h,也就是每一个变换对应一个目标函数,d∗(P)d_{\ast}(P)d(P)是得到的预测值。我们要让预测值跟真实值t∗=(tx,ty,tw,th)t_{\ast}=(t_x,t_y,t_w,t_h)t=(tx,ty,tw,th)差距最小,得到损失函数为:
Loss=∑iN(t∗i−w^∗Tϕ5(Pi))2Loss=\sum_{i}^{N}(t_{\ast}^i-\hat{w}_{\ast}^{T}\phi_5(P^i))^2 Loss=iN(tiw^Tϕ5(Pi))2
函数优化目标为:
W∗=arg min⁡w∗∑iN(t∗i−w^∗Tϕ5(Pi))2+λ∣∣w^∗∣∣2W_{\ast}=\argmin_{w_{\ast}}\sum_{i}^N(t_{\ast}^i-\hat{w}_{\ast}^{T}\phi_5(P^i))^2+\lambda||\hat{w}_{\ast}||^2 W=wargminiN(tiw^Tϕ5(Pi))2+λ∣∣w^2
利用梯度下降法或者最小二乘法就可以得到w∗w_{\ast}w

四、为什么宽高尺度会设计这种形式?

文章将会重点解释一下为什么设计的tx,tyt_x,t_ytx,ty为什么除以宽高,为什么tw,tht_w,t_htw,th会有log⁡\loglog形式?

首先CNN具有尺度不变性,以下图为例(图片来源于知乎):

在这里插入图片描述

x,y坐标除以宽高

上图的两个人具有不同的尺度,因为他都是人,我们得到的特征相同。假设我们得到的特征为ϕ1\phi_1ϕ1ϕ2\phi_2ϕ2。如果我们直接学习坐标差值,以xxx坐标为例,xix_ixipip_ipi分别代表第i个框的xxx坐标,学习到的映射为fff
f(ϕ1)=x1−p1f(\phi_1)=x_1-p_1 f(ϕ1)=x1p1
同理,f(ϕ2)=x2−p2f(\phi_2)=x_2-p_2f(ϕ2)=x2p2

从上图显而易见,x1−p1≠x2−p2x_1-p_1\neq x_2-p_2x1p1=x2p2。也就说同一个xxx对应于多个yyy,这明显不满足函数的定义。

边界框回归学习的是回归函数,然而你的目标却不满足函数定义,当然学习不到什么。

宽高坐标log形式

我们想要得到一个放缩的尺度,也就是说这里限制尺度必须大于0。

我们学习的tw,tht_w,t_htw,th怎么保证满足大于0呢?直观的想法就是expexpexp函数,如R-CNN论文里面的公式,那么反过来推到就是log函数的来源了。

为什么IoU较大,认为是线性变换?

当输入的 Proposal 与 Ground Truth 相差较小时(RCNN 设置的是 IoU>0.6), 可以认为这种变换是一种线性变换, 那么我们就可以用线性回归来建模对窗口进行微调, 否则会导致训练的回归模型不 work(当 Proposal跟 GT 离得较远,就是复杂的非线性问题了,此时用线性回归建模显然不合理)。这里解释:

Log函数明显不满足线性函数,但是为什么当Proposal 和Ground Truth相差较小的时候,就可以认为是一种线性变换呢?大家还记得这个公式吗?
lim⁡x=0log⁡(1+x)=x\lim_{x=0}\log(1+x)=x x=0limlog(1+x)=x
现在反过来看公式:
tw=log⁡(Gx/Pw)=log⁡(Gx+Pw−PwPw)=log⁡(1+Gw−PwPw)t_w=\log(G_x/P_w)=\log(\frac{G_x+P_w-P_w}{P_w})=\log(1+\frac{G_w-P_w}{P_w}) tw=log(Gx/Pw)=log(PwGx+PwPw)=log(1+PwGwPw)
当且仅当Gw−Pw=0G_w-P_w=0GwPw=0的时候,才会是线性函数,也就是宽度和高度必须近似相等。

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

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【VIO】第2讲 基于优化的IMU

第2讲 基于优化的 IMU 与视觉信息融合 1.最小二乘问题求解 &#xff08;1&#xff09;最小二乘基础概念 ​ 1 定义&#xff1a;找到一个n维的变量 x∈Rnx \in R^nx∈Rn &#xff0c;使得损失函数 F(x)F(x)F(x) 取得局部最小值&#xff1a; F(x)12∑i1m(fi(x))2F(x) \frac{1…

Word控件Spire.Doc 【文本】教程(5) ;从 Word 文档中的文本框中提取文本

文本框的目的是允许用户输入程序要使用的文本信息。也可以从文本框中提取现有的文本信息。以下指南重点介绍如何通过Spire.Doc for .NET从 C# 中 Word 文档的文本框中提取文本。 Spire.Doc for.NET 最新下载&#xff08;qun:767755948&#xff09;https://www.evget.com/produ…

3、Java对象相关

目录JVM内存分配机制对象的创建对象大小与指针压缩java对象的指针压缩指针压缩的原因分代回收机制分代GC分类对象内存分配栈上分配逃逸分析标量替换标量与聚合量Eden区分配大对象分配老年代分配对象动态年龄判断老年代空间分配担保机制对象的内存布局对象的访问定位对象内存回收…

WebDAV之葫芦儿·派盘+一刻日记

一刻日记 支持webdav方式连接葫芦儿派盘。 是一款强大的记录软件,通过平台可以随意的记录重要的事情,让用户在平台里能获得更多的帮助,实时的解决你的记录需求,让你可以更好的进行使用;在使用的过程中,用户可以记录当天重要的事情,把你的感想更好的记录在平台里,让用…

js-键盘事件

onkeydown:按键被按下 onkeyup:按键被松开 事件绑定的对象&#xff1a;键盘事件一般绑定给可以获取焦点的对象或者document对象 焦点&#xff1a;光标在闪的&#xff1a;比如input标签 如果一直按按键不松手&#xff0c;按键会一直被触发 当&#xff1a;onkeydown连续触发时…

后端php项目和数据库启动

有两种方法可以启动 1.使用小皮面板 ①启动php项目开启后端网站 可去官网下载 下载后就能使用了 官网地址&#xff1a;小皮面板(phpstudy) - 让天下没有难配的服务器环境&#xff01; 下载完成后打开 php项目需要启动apache 创建一个php项目的网站 注意这里要写public 点击…

亚马逊云 RDB数据库故障转移(多可用区)

RDB关系数据库(Relational Database,RDB) 创建名为VPC for RDS的vpc 两个可用区,两组公内网创建安全组创建RDS数据库实例用的数据库子网组创建RDS数据库实例创建数据库连接RDS数据库实例并给数据库test添加数据 1.创建安全组2.创建用来连接数据库实例的EC2选择vpc for rds那…

MyBatis 环境搭建配置全过程【IDEA】

文章目录一、MyBatis 介绍二、MyBatis 环境搭建1.MyBatis 下载2.配置 jdk 版本3.创建 Maven 工程4.IDEA 连接数据库5.项目文件构架6.引入相关依赖7.命令行创建数据库8.数据库配置文件9.核心配置文件三、入门测试程序1.创建表准备数据2.创建 POJO 实体3.创建映射文件4.修改核心配…

將一個react+nodejs聊天軟件前後端項目進行docker打包並運行

文章目录1概述2将react前端打包入docker2.1打包react项目2.2nginx配置2.3创建Docker镜像2.4打包和运行2.5上传dockerhub3将nodejs打包入dockerDockerfile文件.dockerignore 文件打包和运行上传dockerhub1概述 https://gitee.com/chuge325/practise–chat-app-react-nodejs.git…

爱上源码,重学Spring IoC深入

回答&#xff1a; 我们为什么要学习源码&#xff1f; 1、知其然知其所以然 2、站在巨人的肩膀上&#xff0c;提高自己的编码水平 3、应付面试1.1 Spring源码阅读小技巧 1、类层次藏得太深&#xff0c;不要一个类一个类的去看&#xff0c;遇到方法该进就大胆的进 2、更不要一行…

左程云老师算法课笔记( 四)

前言 仅记录学习笔记&#xff0c;如有错误欢迎指正。 啊啊&#xff0c;才发现二被我挤掉了&#xff0c;有空补下&#xff01; 一、图&#xff1a; 图的深度优先遍历&#xff1a;&#xff08;和二叉树的区别就是有环&#xff0c;不能重复打印&#xff09;&#xff08;Queue队…

网课搜题接口-查题校园题库系统

网课搜题接口-查题校园题库系统 本平台优点&#xff1a; 多题库查题、独立后台、响应速度快、全网平台可查、功能最全&#xff01; 1.想要给自己的公众号获得查题接口&#xff0c;只需要两步&#xff01; 2.题库&#xff1a; 查题校园题库&#xff1a;查题校园题库后台&…

全球名校AI课程库(28)| MIT麻省理工 · 基因组学机器学习课程『Machine Learning for Genomics』

&#x1f3c6; 课程学习中心 | &#x1f6a7; AI生物医疗课程合辑 | &#x1f30d; 课程主页 | &#x1f4fa; 中英字幕视频 | &#x1f680; 项目代码解析 课程介绍 MIT 6.047/6.878是全球顶校麻省理工开设的基因组学与机器学习的交叉专业课程。课程以基因组学为主要应用领域…

智慧城市万亿级蓝海赛道机遇何在?

工商业的发展&#xff0c;为人类居住历史增添了“城市”这一全新的选项。从春秋战国时期的“货市”&#xff0c;到13世纪地中海沿岸星罗棋布的都市&#xff0c;风格迥异的城市为身处不同时代的居民提供了栖居之地。仅在中国&#xff0c;城市就以不到6%的土地面积&#xff0c;维…

个人征信预测

个人征信预测 --数据分析项目报一、项目概述 通过脱敏的现有数据&#xff0c;如&#xff1a;用户基本身份信息&#xff0c;消费行为&#xff0c;银行还款等&#xff0c;进行数据处理特征&#xff0c;选取并建立逾期预测模型&#xff0c;预测用户是否会逾期还款。二、项目概述数…

SSD目标检测网络ONNX推理,为tensorrt推理做准备【附代码】

本篇文章是实现SSD的onnx推理&#xff0c;主要是为后期tensorrt推理打下基础&#xff0c;YOLOv4以及YOLOv5的tensorrt推理可以看我之前的文章。 SSD的代码我这里下载的是b站up主Bubbliiiing的pytorch版SSD&#xff0c;大家可自行下载【我这里就不传代码了&#xff0c;等最近把…

期货开户用心服务每个客户

用心服务每一个客户&#xff01;以信为本&#xff0c;点石成金&#xff01; 蓄之既久&#xff0c;其发必速 如果价格连续多天在—个狭窄的幅度内升降&#xff0c;在图表上形成一幅有如建筑地盘布满地基桩的图景&#xff0c;习惯上称之为密集区&#xff0c;亦即专家所说的技术…

【GraphQL】Node + Postgres + adminer实现demo应用

1、程序目录 在第一级目录下存在三个文件&#xff0c; db.sql用于创建tables和demo数据&#xff0c;可以直接在adminer里登录执行sql语句进行创建&#xff0c;可以看到如下图绿色部分的执行结果 docker-compose.yaml用于为node、postgres和adminer分别创建一个容器&#xff0…

数明SLM27517能驱动MOSFET和IGBT功率开关 低侧栅极驱动器兼容UCC27517

SLM27517 单通道&#xff0c;高速&#xff0c;低侧栅极驱动器器件可以有效地驱动MOSFET和IGBT功率开关。使用设计其固有地最小化击穿电流&#xff0c;可以源汇高峰值电流脉冲转换为电容性负载轨对轨驱动能力非常小传播延迟通常为15ns。可提供4 A电源&#xff0c;5 A接收器12 V …

语音识别 CTC Loss

(以下内容搬运自 PaddleSpeech) Derivative of CTC Loss 关于CTC的介绍已经有很多不错的教程了&#xff0c;但是完整的描述CTCLoss的前向和反向过程的很少&#xff0c;而且有些公式推导省略和错误。本文主要关注CTC Loss的梯度是如何计算的&#xff0c;关于CTC的介绍这里不做…