目标检测——Libra R-CNN算法解读

news/2024/10/19 11:37:11/

论文:Libra R-CNN: Towards Balanced Learning for Object Detection (2019.4.4)
作者:Jiangmiao Pang, Kai Chen, Jianping Shi, Huajun Feng, Wanli Ouyang, Dahua Lin
链接:https://arxiv.org/abs/1904.02701
代码:https://github.com/OceanPang/Libra_R-CNN



目录

  • 1、算法概述
  • 2、Libra R-CNN细节
    • 2.1 IoU-balanced Sampling
    • 2.2 Balanced Feature Pyramid
    • 2.3 Balanced L1 Loss
  • 3、实验结果

1、算法概述

该论文指出,现如今与模型结构设计相比,训练过程优化在目标检测中受到的关注相对较少。作者通过实验发现检测性能往往受到训练过程中不平衡的限制,这种不平衡通常包括三个层面——样本层面,特征层面和目标层面。如下图所示:
在这里插入图片描述
为此,作者从三个层面做出改进分别应对以上三处不平衡现象;针对于样本层面的不平衡提出了基于IoU的平衡采用法,使得不使用过多的简单负样本参与训练;针对于特征层面的不平衡提出了平衡金字塔方法重新整合、提炼并增强了高层语义与低层细节特征;针对目标层面的不平衡提出了balanced L1损失函数。作者将改进后的算法命名为Libra R-CNN,整理处理流程如下图所示:
在这里插入图片描述


2、Libra R-CNN细节

2.1 IoU-balanced Sampling

作者主要想提升困难负样本的利用率,作者通过实验发现,IoU值大于0.05的困难负样本是超过60%的,但如果只是采用随机采用的方式,只会利用到30%比例的困难负样本。这会导致困难负样本和简单负样本的不平衡,从而导致梯度被大量的简单负样本主导,这样对模型更新没有太大帮助。

假设我们需要从M个对应的候选样本中抽取N个负样本。在随机抽样下,每个样本所选择的概率为:P = N/M,为了提高困难负样本的选择概率,作者根据IoU将采样间隔均匀地分成K个分组,N个需要的负样本被均匀地分配到每个分组中。然后均匀地从中选择样本。因此,基于IoU平衡的采样方法所得到选择概率为:
在这里插入图片描述
Mk是每个分组中样本的数量,K在作者的实验中被设置成为了3。
如下图所示,通过IoU平衡法抽样困难负样本,得到的样本分布与困难负样本分布基本一致。
在这里插入图片描述

2.2 Balanced Feature Pyramid

与FPN,PAN通过横向连接整合多层次特征的方法不同,作者使用相同的深度集成平衡语义特征来强化多层次特征。如图下图所示。它包括重整、整合、精炼和强化四个步骤。
在这里插入图片描述
第一步:获得平均语义特征图,如上图将特征图{C2,C3,C4,C5}通过插值上采样和maxpooling下采样变换到同一个尺寸,最后求平均得到均衡化的语义特征图,如上图红框部分,包含重整和整合两个操作。公式如下:
在这里插入图片描述
Cl代表重整后的特征图。
第二步:提炼均衡化后的语义特征图,上图黄框部分。平衡的语义特征可以进一步细化,使其更具有辨别力。
第三步:从低层到高层的特征进行聚合强化,上图绿框部分。

2.3 Balanced L1 Loss

作者从Fast R-CNN的损失值出发,公式如下:
在这里插入图片描述
定义损失值大于等于1.0的为离群值(outliers)样本,剩余的为内联值(inliers)。内联值可看作简单样本,相对于离群值只贡献了30%的梯度,考虑到内联值与离群值对梯度的贡献度不平衡,作者提出了平衡L1损失,作者先从梯度方面入手,使得在内联值范围内,增加梯度,而离群值范围,不受影响,公式如下:
在这里插入图片描述
梯度曲线如下:
在这里插入图片描述
对上面公式求积分,可以得到balanced L1损失如下:
在这里插入图片描述
其中参数α,b,γ满足如下公式:
在这里插入图片描述
实验中,α和γ取值分别为0.5,1.5。balanced L1损失函数曲线为:
在这里插入图片描述


3、实验结果

作者以ResNet50 FPN为主干的Faster R-CNN算法为baseline,比较了三种平衡方式改进在COCO val-2017数据集上的提升效果,结果如下表所示:
在这里插入图片描述

与其他算法的比较:
在这里插入图片描述
从上表可以看出,针对于Faster R-CNN和RetinaNet算法,利用了Libra R-CNN做了平衡处理,AP值都得到了一到两点的AP值提升。对于区分目标大小的AP指标,Libra R-CNN主要提升在对大目标的AP值,小目标和中等目标只有在backbone规模不大(ResNet-50-FPN),提取特征能力不强的时候才有较大提升,这也进一步证明Libra R-CNN能增强backbone提取特征能力。


http://www.ppmy.cn/news/1540242.html

相关文章

如何给手机换ip地址

在当今数字化时代,IP地址作为设备在网络中的唯一标识,扮演着举足轻重的角色。然而,有时出于隐私保护、网络访问需求或其他特定原因,我们可能需要更改手机的IP地址。本文将详细介绍几种实用的方法,帮助您轻松实现手机IP…

2024-10-18 问AI: [AI面试题] 神经网络有哪些不同类型?

文心一言 神经网络有多种不同类型,每种类型都有其特定的结构和应用场景。以下是一些主要的神经网络类型: 前馈神经网络(FNN): 也称为全连接神经网络或感知器网络。由输入层、隐藏层和输出层组成,信息流是单…

20201017-【C、C++】跳动的爱心

效果图片 代码 #include "graphics.h" #include <conio.h> #include <time.h> #include <math.h> #include <stdlib.h>struct Point {double x, y;COLORREF color; };COLORREF colors[256] {RGB(255,32,83),RGB(252,222,250),RGB(255,0,0)…

启动service报错ORA-44317: database open read-only

ADG&#xff08;RAC&#xff09;备库环境&#xff0c;srvctl添加service服务成功&#xff0c;启动service时报错ORA-44317: database open read-only。 这是预期行为&#xff0c; 使用“srvctl add service -d <db_name> -s <service_name>”创建服务时&#xff0c…

【c++/C#】 混编的多线程,thread_local,

C 通过 thread_local 变量来实现线程局部存储&#xff08;Thread-Local Storage, TLS&#xff09;&#xff0c;而 C 动态库并不需要直接感知线程是从 C 还是 C# 端创建的。线程的管理、调度等由操作系统处理&#xff0c;而 thread_local 的工作机制是与具体的编程语言无关的。让…

Flink时间窗口程序骨架结构

前言 Flink 作业的基本骨架结构包含三部分&#xff1a;创建执行环境、定义数据处理逻辑、提交并执行Flink作业。 日常大部分 Flink 作业是基于时间窗口计算模型的&#xff0c;同样的&#xff0c;开发一个Flink时间窗口作业也有一套基本的骨架结构&#xff0c;了解这套结构有助…

LLM 相关 API Key 配置速查

文章目录 LangChain智谱DashScope - QwenMoonshot AI - KimiOpenAItavily API Key 是个很简单的功能&#xff0c;但网站一大&#xff0c;就忘记在哪里&#xff0c;这里记录下 环境变量 及 Python 中常用设置代码为&#xff1a; import getpass import os# 简单配置 OPENAI_API…

2024年科技赋能教育,AI辅导引领新趋势

在近日举行的2024年中国国际服务贸易交易会上&#xff0c;教育服务展区凭借科技与教育深度融合的特色&#xff0c;成功吸引了大量参观者的注意。特别是主打AI个性化辅导的学习产品&#xff0c;更是成为了众多家长眼中的“省妈神器”。 “大语言模型”技术的快速发展及其科学化…