VarifocalNet An IoU-aware Dense Object Detector 论文学习

news2024/12/23 12:58:32

1. 解决了什么问题?

密集目标检测器会预测出大量的候选检测框,如何准确地对它们进行排序是取得优异性能的关键。以前的方法通常会在 NMS 时根据类别得分对预测框做排序,但这可能损害模型表现,因为类别得分并不能体现边框定位的准确性,定位准确的边框可能会因为类别得分较低而被 NMS 错误地去除。

现有的一些方法会预测一个额外的 IoU 得分或 center-ness 得分,表示定位质量。然后在 NMS 排序时将它们乘上分类得分。这些方法能减轻目标定位准确率和分类得分不对齐的问题,但并不是最优的方案,因为一旦这两项预测值都不准确,那么排序也就会有问题。此外,增加一个分支来预测定位质量得分也不简洁,增加计算成本。

FCOS 的 neck 使用了 FPN,head 包含三个分支。一个分支预测特征图上每个点的分类得分,一个回归该点到边框四条边的距离,另一个则预测 center-ness 得分,在 NMS 排序时将 center-ness 得分与分类得分相乘。下图即 FCOS head 的输出。

在这里插入图片描述

作者对 FCOS+ATSS 做了消融实验,分析该算法性能的上界。在 NMS 前,将预测的前景点的分类得分、距离偏移量、center-ness 得分替换为相应的 ground-truth 值,然后在 COCO val2017 上评测其 AP 表现。对于分类得分向量,有两个选择,要么将 ground-truth 标签位置的值替换为 1.0,要么替换为预测框和 ground-truth 框的 IoU(gt_IoU)。

从下表可以看到,FCOS+ATSS 取得了 39.2 AP,推理时使用 ground-truth center-ness 得分(gt_ctr)只能提升 2.0 AP。将预测的 center-ness 得分替换为 gt_IoU(gt_ctr_iou) 也只取得了 43.5 AP。这表明对检测框排序时,分类得分无论是乘以预测的 center-ness 得分,还是乘以 IoU 得分都无法显著提升模型表现。

然而即便不使用 center-ness 得分,FCOS+ATSS 通过 ground-truth bbox(gt_bbox) 也能取得 56.1 AP。如果将 ground-truth 标签位置的分类得分替换为 1.0(gt_cls),用不用 center-ness 得分就变得关键了(43.1 AP vs. 58.1 AP),因为 center-ness 得分能够区分出边框是否准确。

将 ground-truth 类别的分类得分替换为 gt_IoU(gt_cls_iou) 结果最为惊艳。不加 center-ness 得分就能取得 74.7 AP。这说明在众多的候选目标里面,已经存在定位准确的边框。将 ground-truth 类的分类得分替换为 gt_IoU 效果最佳,这个分数向量就叫做 IACS。
在这里插入图片描述

2. 提出了什么方法?

  • 提出了 IoU-aware 分类得分(IACS)作为某一目标类别存在的置信度和预测框定位质量的联合表征。
  • 受 Focal Loss 启发,设计了 Varifocal Loss。它是一个动态缩放的二元交叉熵损失,采用非对称的训练样本加权方法,回归出连续的 IACS。它降低负样本的权重,以解决正负类别不均衡问题,同时增加高质量正样本的权重,以输出最佳的预测结果。
  • 提出了一个 star-shaped 边框特征表征,用于 IACS 预测和边框优化。通过可变形卷积,它使用九个固定的采样点来表示一个边框,从而获取边框的几何信息及周围的语义信息。

2.1 IACS

IACS 是分类得分向量里的一个标量元素,ground-truth 类索引位置的值是预测框与目标框之间的 IoU,其它索引位置都为 0。

2.2 Varifocal Loss

作者设计了 Varifocal Loss 训练密集检测器,以预测 IACS。

Focal Loss 用于解决密集目标检测器训练过程中遇到的前背景类别不均衡问题。定义如下:
FL(p,y) = { − α ( 1 − p ) γ log ⁡ ( p ) , if y = 1 − ( 1 − α ) p γ log ⁡ ( 1 − p ) , otherwise \text{FL(p,y)}=\left\{ \begin{array}{ll} -\alpha (1-p)^\gamma \log(p), \quad \quad \text{if} \quad y=1 \\ -(1-\alpha)p^\gamma \log(1-p)\quad, \quad \text{otherwise} \end{array} \right. FL(p,y)={α(1p)γlog(p),ify=1(1α)pγlog(1p),otherwise

其中 y ∈ { ± 1 } y\in \left\{\pm1\right\} y{±1}表示 ground-truth 类别, p ∈ [ 0 , 1 ] p\in[0,1] p[0,1]是前景类的预测概率。如上式,前景类的调节系数 ( 1 − p ) γ (1-p)^\gamma (1p)γ和背景类的 p γ p^\gamma pγ能降低容易样本的损失贡献,提高错误分类样本的重要性。Focal Loss 能防止容易负样本占据模型训练,更加关注于少量的难例样本。

作者借鉴了 Focal Loss 的加权思想,解决类别不均衡问题。它以非对称的方式解决正负样本不均衡问题。Varifocal Loss 基于二元交叉熵损失而来:
VFL(p,q) = { − q [ q ⋅ log ⁡ ( p ) + ( 1 − q ) ⋅ log ⁡ ( 1 − p ) ] , q > 0 − α ⋅ p γ ⋅ log ⁡ ( 1 − p ) , q = 0 \text{VFL(p,q)}=\left\{ \begin{array}{ll} -q\left[q\cdot\log(p)+(1-q)\cdot\log(1-p)\right], \quad \quad q>0 \\ -\alpha\cdot p^\gamma\cdot \log(1-p), \quad \quad \quad \quad \quad \quad \quad \quad q=0 \end{array} \right. VFL(p,q)={q[qlog(p)+(1q)log(1p)],q>0αpγlog(1p),q=0

p p p是预测的 IACS, q q q是目标得分。如下图所示,对于一个前景点,ground-truth 类的 q q q定义为预测框和目标框之间的 IoU,其余为 0,而背景点所有类别的目标 q q q则都是 0。

Varifocal Loss 通过 p γ p^\gamma pγ调节损失大小,只降低负样本( q = 0 q=0 q=0)的损失贡献,不会降低正样本( q > 0 q>0 q>0)的贡献。这是因为正样本非常稀少,应当保留它们的学习信号。用训练目标 q q q对正样本做加权,如果一个正样本有较高的 gt_IoU,它对损失的贡献就相对要大一些。这样就更加关注于训练高质量正样本,它们对取得较高的 AP 更重要。为了平衡正负样本,作者在 q = 0 q=0 q=0的损失项加入了一个可调节的缩放系数 α \alpha α
在这里插入图片描述

2.3 Star-Shaped Box Feature Representation

为了预测 IACS,作者设计了一个星形的边框特征表征。通过可变形卷积,它用九个固定采样点(上图的黄圈)的特征来表示一个边框。该表征能获取边框的几何信息和邻近的语义信息。

给定图像平面的一个采样点 ( x , y ) (x,y) (x,y),首先用 3 × 3 3\times 3 3×3卷积回归出初始边框。它用一个 4D 向量 ( l ′ , t ′ , r ′ , b ′ ) (l',t',r',b') (l,t,r,b)表示 ( x , y ) (x,y) (x,y)到初始边框四条边的距离。然后就可以选择九个采样点: ( x , y ) (x,y) (x,y), ( x − l ′ , y ) (x-l',y) (xl,y), ( x , y − t ′ ) (x,y-t') (x,yt), ( x + r ′ , y ) (x+r',y) (x+r,y), ( x , y + b ′ ) (x,y+b') (x,y+b), ( x − l ′ , y − t ′ ) (x-l',y-t') (xl,yt), ( x + l ′ , y − t ′ ) (x+l',y-t') (x+l,yt), ( x − l ′ , y + b ′ ) (x-l',y+b') (xl,y+b), ( x + r ′ , y + b ′ ) . (x+r',y+b'). (x+r,y+b). 然后将它们映射到特征图上。它们到 ( x , y ) (x,y) (x,y)的映射点的相对偏移量作为可变形卷积的偏移量使用,用可变形卷积对这九个映射点的特征做卷积,以表示一个边框。

2.4 Bounding Box Refinement

通过边框优化步骤进一步提升目标检测的准确率。边框优化在目标检测中常用,但由于密集目标检测器缺乏一个高效的、判别性强的目标表征,就很少用于密集目标检测方法。现在有了星形表征,就可以在密集目标检测中使用它了。

将边框优化建模为一个残差学习问题。对于初始边框回归量 ( l ′ , t ′ , r ′ , b ′ ) (l',t',r',b') (l,t,r,b),首先提取其星形表征。然后基于该表征,学习四个距离缩放系数 ( Δ l , Δ t , Δ r , Δ b ) (\Delta l,\Delta t, \Delta r,\Delta b) (Δl,Δt,Δr,Δb)对初始距离向量做缩放,这样优化后的边框就更接近于 ground-truth,记为 ( l , t , r , b ) = ( Δ l × l ′ , Δ t × t ′ , Δ r × r ′ , Δ b × b ′ ) (l,t,r,b)=(\Delta l\times l',\Delta t \times t', \Delta r\times r',\Delta b\times b') (l,t,r,b)=(Δl×l,Δt×t,Δr×r,Δb×b)

2.5 VarifocalNet

将上面三块改进加入到 FCOS,并去除原来的 center-ness 分支,就得到了 VarifocalNet。VFNet 的主干和 FPN 网络部分与 FCOS 一样,head 结构不同。

VFNet 的 head 有两个子网络。定位子网络完成边框回归及优化。其输入是 FPN 每一层的特征图,先经过三个 3 × 3 3\times 3 3×3卷积及 ReLU 激活。输出特征图有 256 个通道。定位子网络的一条分支对特征图做卷积,为每个空间位置都输出一个 4D 距离向量 ( l ′ , t ′ , r ′ , b ′ ) (l',t',r',b') (l,t,r,b)以表示初始边框。有了初始边框和特征图,另一分支对九个特征采样点使用星形的可变形卷积,输出距离缩放系数 ( Δ l , Δ t , Δ r , Δ b ) (\Delta l,\Delta t, \Delta r,\Delta b) (Δl,Δt,Δr,Δb),然后与初始距离向量相乘,得到优化后的边框 ( l , t , r , b ) (l,t,r,b) (l,t,r,b)

另一子网络输出 IACS,该子网络与定位子网络的优化分支结构相似,除了它为每个空间位置都输出一个 C C C维向量,每个元素都代表着目标类别的概率及定位准确率。
在这里插入图片描述

2.6 损失函数及推理

Loss = 1 N p o s ∑ i ∑ c VFL ( p c , i , q c , i ) + λ 0 N p o s ∑ i q c ∗ , i L b b o x ( b b o x i ′ , b b o x i ∗ ) + λ 1 N p o s ∑ i q c ∗ , i L b b o x ( b b o x i , b b o x i ∗ ) \begin{align} \text{Loss}=&\frac{1}{N_{pos}}\sum_i \sum_c \text{VFL}(p_{c,i}, q_{c,i})\nonumber\\ +&\frac{\lambda_0}{N_{pos}}\sum_i q_{c^*,i}\text{L}_{bbox}(bbox_i', bbox_i^*)\nonumber\\ +&\frac{\lambda_1}{N_{pos}}\sum_i q_{c^*,i}\text{L}_{bbox}(bbox_i, bbox_i^*)\nonumber \end{align} Loss=++Npos1icVFL(pc,i,qc,i)Nposλ0iqc,iLbbox(bboxi,bboxi)Nposλ1iqc,iLbbox(bboxi,bboxi)
p c , i p_{c,i} pc,i q c , i q_{c,i} qc,i表示 FPN 每层特征图位置 i i i处类别 c c c的预测 IACS 和真实 IACS。 L b b o x L_{bbox} Lbbox GIoU \text{GIoU} GIoU损失, b b o x i ′ , b b o x i , b b o x i ∗ bbox_i', bbox_i, bbox_i^* bboxi,bboxi,bboxi分别是初始边框、优化后边框和 ground-truth 边框。用训练目标 q c ∗ , i q_{c^*,i} qc,i L b b o x L_{bbox} Lbbox加权,对于前景点, q c ∗ , i q_{c^*,i} qc,i是 gt_IoU;对于背景点, q c ∗ , i q_{c^*,i} qc,i就是 0。 λ 0 , λ 1 \lambda_0, \lambda_1 λ0,λ1用于平衡 L b b o x L_{bbox} Lbbox的权重,分别设为 1.5 和 2.0。 N p o s N_{pos} Npos是前景点的个数,归一化总损失。

VFNet 的推理很直接,输入图像经过网络后用 NMS 后处理去除冗余的预测框。

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

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

相关文章

畅网n6005 nas主机更新微码

原因 由于畅网n6005小主机上安装了 pve , 在pve中安装了iStore OS ,然后用docker安装了alist 用作nas, 平时在外经常要访问。但是这个机器偶尔死机,导致无法脸上网盘,且家里会断网, 因为我家用这个路由器做软路由。做…

k8s核心概念

一、集群架构与组件 1,相关组件 【1】 master node三个组件 k8s的控制节点,对集群进行调度管理,接受集群外用户去集群操作请求master node 组成(四个组件):控制面 API Server:通信kube-Sche…

WormGPT – 网络犯罪分子用来犯罪的人工智能工具

WormGPT – 网络犯罪分子用来发起商业电子邮件泄露攻击的生成式人工智能工具 前言 什么是蠕虫GPT(WormGPT) WormGPT是基于EleutherAI于2021年创建的大型语言模型GPT-J的AI模型。它具有无限的字符支持、聊天记忆保留和代码格式化功能。 如果未部署适当…

文件或文件夹名称中有空格如何批量去除

平时在工作中会经常碰到文件或文件夹里面有特殊符号,那么要如何批量去除文件名中的特殊符号?其实去符号也不是困难的事,可以使用《文件批量改名高手》对文件名进行批量去除特殊符号,操作步骤如下。 先打开《文件批量改名高手》&a…

React Native实现震动反馈效果

React Native实现理想的震动效果 一、背景说明 业务开发中,总会用到一些和用户反馈的效果,用来提升用户对于某个事件或者操作的重要程度,比如常见的就是 长按复制、滑动或点击图表、点击底部TabBar时的反馈等操作。 二、构思实现及过程 2.…

【Yolov8自动标注数据集教程】

Yolov8自动标注数据集教程 1 前言2 先手动标注数据集,训练出初步的检测模型2.1 手动标注数据集2.2 Yolov8环境配置2.2.1 Yolov8下载2.2.2 Yolov8环境配置 2.3 Yolov8模型训练,得到初步的检测模型2.3.1 训练方式 3 使用初步的检测模型实现自动数据集标注3…

vue3中 状态管理pinia得使用

在做项目中 vue2改造vue3项目时的vuex 发生得一些变化 vue3项目中 先看下 stores.jsimport { defineStore } from pinia 引入方法注册方法 import { getListFieldLevel } from ..api/index.jsexport const useScreenStore defineStore(screen, {state: () > ({fieldList:…

MySQL:MHA高可用

目录 1.什么是 MHA 2.MHA 的组成 3.MHA 的特点 4、MHA工作原理 5、搭建 MySQL MHA 5.1 实验思路 5.1.1 MHA架构 5.1.2 故障模拟 5.2 实验环境 5.3 准备工作 5.4 安装MHA所有组件与测试 5.4.1 安装 MHA 软件 5.4.2 manager与node工…

动态内存管理之柔性数组

柔性数组: 只存在于结构体中,而且还要是结构体的最后一个成员,并且在他的前面必须要有其他成员, 大小是未知的,所以在用sizeof计算出的结构体大小是出柔性数组外的, 柔性数组的大小是可以变化的&#xff0…

Staples Drop Ship EDI 需求分析

Staples 是一家美国零售公司,总部位于马萨诸塞州弗拉明汉,主要提供支持工作和学习的产品和服务。该公司于 1986 年在马萨诸塞州布莱顿开设了第一家门店。到 1996 年,该公司已跻身《财富》世界 500 强,后来又收购了办公用品公司 Qu…

小学期笔记——天天酷跑7

玩家吃金币的动作是加分的事件源 吃到炸弹更改游戏角色的生命状态 if (person.x person.width > bomb2.x&& person.x < bomb2.width bomb2.x&& person.y person.height > bomb2.y&& person.y < bomb2.y bomb2.height) 效果&#xff1…

OpenShift 4 - 可观测性之用 OpenTelemetry+Jaeger 实现 Distributed Tracing

《OpenShift / RHEL / DevSecOps 汇总目录》 说明&#xff1a;本文已经在支持 OpenShift 4.13 的环境中验证 文章目录 技术架构部署 Distributed Tracing 运行环境安装测试应用并进行观测跟踪参考 说明&#xff1a; 本文使用的测试应用采用的是 “手动 Instrumentation” 方式在…

【雕爷学编程】Arduino动手做(85)---LCD1602液晶屏模块6

37款传感器与执行器的提法&#xff0c;在网络上广泛流传&#xff0c;其实Arduino能够兼容的传感器模块肯定是不止这37种的。鉴于本人手头积累了一些传感器和执行器模块&#xff0c;依照实践出真知&#xff08;一定要动手做&#xff09;的理念&#xff0c;以学习和交流为目的&am…

02 linux 基础(2)

shell 基本维护命令 获取联机帮助 使用 man 命令可以找到特定的联机帮助页&#xff0c;并提供简短的命令说明。一般语法格式为&#xff1a; 联机帮助页提供了指定命令 commandname 的相关信息&#xff0c;包括&#xff1a;名称、函数、语法以及可选参数描述等。无论帮助有多长…

PyAutoGUI

概述 PyAutoGUI是一个纯Python开发的跨平台GUI自动化工具&#xff0c;它是通过程序来控制计算机的键盘和鼠标的操作&#xff0c;从而实现自动化功能。所谓的GUI是指图形用户界面&#xff0c;即通过图形方式来显示计算机的界面&#xff0c;早期的计算机是以命令行界面来操作&am…

Vector3.Cross

上期介绍了Vector.Dot可以用来判断敌人处于自身的前方or后方&#xff0c;那么这期就是通过叉乘来判断敌人处于自身的左方or右方 public class CrossTest : MonoBehaviour {public GameObject sphere;public GameObject cube;// Start is called before the first frame updatev…

性能测试工具 Locust + Boomer In Docker

目录 前言&#xff1a; 背景 启动 Locust-master Boomer 调试模式启动 boomer locust worker 模式启动 get 请求 post 请求 指定请求头 直接使用 curl 命令 动态读取 csv --json-value-type 说明 前言&#xff1a; Locust 是一种开源的性能测试工具&#xff0c;可…

【js小游戏案例】纯前端实现飞机大战,附带源码

技能&#xff1a; 使用html js css实现飞机大战小游戏 需求&#xff1a; 我军飞机左右移动&#xff0c;并且按空格 可以发射炮弹&#xff0c;敌方飞机从上往下飞&#xff0c;接触到我方炮弹 飞机被歼灭&#xff0c;我军接触到敌军飞机也将会被歼灭&#xff0c;我方飞机吃到道…

【C++】vector类的模拟实现(增删查改,拷贝构造,赋值运算,深浅拷贝)

文章目录 前言一、 整体1.命名空间:2构造函数&#xff1a;1普通构造2迭代器构造3初始化字符构造4拷贝构造&#xff1a; 3析构函数 二、成员函数实现1.大小1当前大小(size())2总体容量(capacity()) 2.返回头尾迭代器1begin&#xff08;&#xff09;2end&#xff08;&#xff09;…

改进的北方苍鹰算法优化BP神经网络---回归+分类两种案例

今天采用前作者自行改进的一个算法---融合正余弦和折射反向学习的北方苍鹰(SCNGO)优化算法优化BP神经网络。 文章一次性讲解两种案例&#xff0c;回归与分类。回归案例中&#xff0c;作者选用了一个经典的股票数据。分类案例中&#xff0c;选用的是公用的UCI数据集。 BP神经网络…