【深度学习】——物体检测细节处理(NMS、样本不均衡、遮挡物体)

目录

一、候选框大量重叠问题

1、NMS核心思想

2、 步骤:

        3、缺陷

4、改进

1)soft NMS——衰减的方式来减小预测框的分类得分

 2)softer nms——增加了位置置信度

二、样本不平衡问题

1、不平滑的来源(3方面)

1)正负样本不平衡

2)难易样本不平衡

3)类别间样本不平衡

 2、解决样本不平衡的方法

 1)在线难样本挖掘(online hard example mining,OHEM)

2) Focal Loss(专注难样本的一个损失函数)

        标准交叉熵损失

        平衡交叉熵损失

        Focal Loss

3、一阶段和二阶段的区别

三、过拟合问题


一、候选框大量重叠问题

1、NMS核心思想

NMS:非极大值抑制,抑制的是得分低的预测框,涉及到两个指标,IOU(交并比:两个框的重叠区域面积与两个框并集面积的比值)和预测框得分,若有多个预测框预测的是同一个物体,若两个框的IOU值大于阈值(一般阈值取0.5和0.7),那么NMS算法将会把得分低的预测框丢弃。

 

2、 步骤:

1)得到所有的预测框

2)将预测框按照得分降序排序

3)将最高得分的预测框与剩余的预测框,计算IOU,将IOU大于阈值的框去掉

4)将最高得分的预测框记录下来,再从剩下的预测框中重复1)-4)直到只有一个预测框为止

3、缺陷

1)当物体出现比较密集的时候,两个预测框的IOU比值也有可以会超过阈值,强制将得分低的预测框去掉,会导致漏检,降低模型的召回率。这对于互相遮挡的物体群检测是不利的。

2)阈值难以确定。过高导致误检率高,过低导致漏检低。

3)单纯使用预测框得分来作为预测框的置信度,不太合适,因为有的预测框虽然得分高,但是预测的位置不准确

4)速度慢,算法涉及多重循环,在进行大量预测框的计算时,会速度减慢

4、改进

1)soft NMS——衰减的方式来减小预测框的分类得分

NMS强制将IOU超过阈值的低分预测框归零,soft nms是通过衰减的方法来将低分的预测框的得分降低,这样在后面可能会将这个框保留下来。开始不会将预测框强制去掉,而是到最后去掉低于置信度阈值的预测框

具体得分衰减公式主要分为线性衰减和高斯衰减,线性衰减因为在阈值附近会出现得分的突变,不是连续的,这种跳变会给检测带来很大的波动,一般情况下采用的是连续的高斯衰减。

Soft-NMS的改进有两种形式,一种是线性加权的:

一种是高斯加权的:

不足:

1)阈值还是比较难确定

2)得分高的位置未必准确

改进:

相对于nms的改进在于不是强制将得分低的预测框给丢弃,而是将其保留但是降低了其得分,使得对于密集目标检测的时候不至于漏检,减缓了这种问题,有效地提高了准确率

 2)softer nms——增加了位置置信度

nms和soft nms都是采用了分类置信度(得分)来作为预测框的排序指标,这种情况只适用于所有的得分高的预测框的位置和分类一样准确的情况下。但是实际情况不是这样的,分类得分高的预测框其位置不一定准确,因此基于这个考虑,提出了sofer nms,主要是在nms的基础上不断地改变预测框的位置,以此来增加预测框的位置精度。

二、样本不平衡问题

1、不平滑的来源(3方面)

1)正负样本不平衡

正样本:含有目标物体的候选框

负样本:不含目标物体的候选框

在一张图像中,一般只存在个位数的目标对象,但是深度学习网络一般会生成大量的候选框,比如faster-rcnn利用RPN网络生成了2000个锚框,这里面可能有100个正样本框,其余都是大量的背景框(负样本),导致正负样本数量极度不平衡,降低了精度

2)难易样本不平衡

难样本:分类不明确的样本,比如候选框在前景和背景的过渡区域的框,分为难正样本,难负样本

易样本:分类明确,分为易正样本与易负样本,和真实框重合度非常高为易正样本,和真实框不重合的为易负样本

在fasterrcnn中rpn生成框网络中,生成了大量的候选框,大部分的候选框都是易样本,这对于模型的参数收敛作用是非常有限的,而我们更加希望的是模型去利用难样本进行模型的训练,以此来提高精确度。但是大量的候选框都是在背景上,这导致易样本数量庞大,而这部分更有价值的难样本的数量却非常有限,这就造成了难易样本的不平衡。一般难易不平衡和正负样本不平衡问题是有交叉的,这就导致解决这两个问题的方法是可以通用有效的。

3)类别间样本不平衡

在有些问题中,存在多类别分类,但是不同目标的数量不一样,如数据集中有100万个车辆的标签,有1000个行人的标签,这导致在训练的过程中,模型会更加地关注与减小车辆的损失,而导致行人的检测精度大大下降。不同类别的数量差异,导致了类别间不平衡。

 2、解决样本不平衡的方法

通用方法:

1)在fasterRcnn和SSD中,根据样本与真实物体的IOU大小,设置了3:1的正负样本比例。缓解了前两种的不均衡物体

2)在RPN中根据前景的得分排序筛选出了2000个框作为候选框,也实现了样本不平衡的缓解

3)权重惩罚:对于难易样本不平衡和类别间不平衡的方法,可以增加对难样本和少样本的损失权重,缓解不平衡问题

4)数据增强:扩充数据量来实现类别间不平衡的方法

 1)在线难样本挖掘(online hard example mining,OHEM)

由两个RCNN组成,一个RCNN负责前向传播,得到难样本,一个RCNN进行前向和后向传播,实现参数的更新。难样本的话主要是将损失较大的样本作为难样本

参考:https://zhuanlan.zhihu.com/p/59002127

2) Focal Loss(专注难样本的一个损失函数)

参考:https://blog.csdn.net/qq_42013574/article/details/105864230

1.标准交叉熵损失

标准的交叉熵(Cross Entropy,CE)函数,其形式如下所示。

公式中,p代表样本在该类别的预测概率,y代表样本标签。可以看出,当标签为1时,p越接近1,则损失越小;标签为0时p越接近0,则损失越小,符合优化的方向。(当预测标签越接近真实标签时,损失越小

标准的交叉熵中所有样本的权重都是相同的,因此如果正、负样本不均衡,大量简单的负样本会占据主导地位,少量的难样本与正样 本会起不到作用,导致精度变差。

为了方便表示,按照中将p标记为pt:

则交叉熵可以表示为:


2.平衡交叉熵损失

 

为了改善样本的不平衡问题,平衡交叉熵在标准的基础上增加了 一个系数αt来平衡正、负样本的权重,αt由超参α按照下式计算得来,α取值在[0,1]区间内


有了αt,平衡交叉熵损失公式如式:


尽管平衡交叉熵损失改善了正、负样本间的不平衡,但由于其缺 乏对难易样本的区分,因此没有办法控制难易样本之间的不均衡。

3.Focal Loss

Focal Loss为了同时调节正、负样本与难易样本,提出了如下式所示的损失函数。

对于该损失函数,有如下3个属性:

    与平衡交叉熵类似,引入了αt权重,为了改善正负样本的不均衡,可以提升一些精度。
    ·(1-pt)^γ是为了调节难易样本的权重。当一个边框被误分类时,pt 较小,则(1-pt)γ接近于1,其损失几乎不受影响;当pt接近于1时,表明其分类预测较好,是简单样本,(1-pt)γ接近于0,因此其损失被调低了。
    γ是一个调制因子,γ越大,简单样本损失的贡献会越低

为了验证Focal Loss的效果,何凯明等人还提出了一个一阶物体 检测结构RetinaNet。

 对于RetinaNet的网络结构,有以下5个细节:

    在Backbone部分,RetinaNet利用ResNet与FPN构建了一个多尺 度特征的特征金字塔。
    RetinaNet使用了类似于Anchor的预选框,在每一个金字塔层, 使用了9个大小不同的预选框。
    分类子网络:分类子网络为每一个预选框预测其类别,因此其 输出特征大小为KA×W×H,A默认为9,K代表类别数。中间使用全 卷积网络与ReLU激活函数,最后利用Sigmoid函数输出预测值。
    回归子网络:回归子网络与分类子网络平行,预测每一个预选框的偏移量,最终输出特征大小为4A×W×W。与当前主流工作不同 的是,两个子网络没有权重的共享。
    ·Focal Loss:Focal Loss在训练时作用到所有的预选框上。对于两个超参数,通常来讲,当γ增大时,α应当适当减小。实验中γ取2、α取0.25时效果最好
 

3、一阶段和二阶段的区别

fasterrcnn的精度比SSD高的原因主要是因为多了一个RPN网络,用于生成正负样本3:1的样本,解决了正负样本不平衡的问题,但是SSD一阶段的是直接筛选得到的预测框,因此主要的原因就是因为正负样本不平衡的原因造成了二者之间精度的区别。而focal loss损失函数构造出来的retinanet模型在精度上是可以和fasterrcnn媲美的。

三、过拟合问题

可看文章:原创 【深度学习】——过拟合的处理方法

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

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

相关文章

第6章 循环结构

循环语句: 可以让一部分代码,反复执行 1.1 循环语句while while循环: 编写格式:while(条件){ 循环体 } 条件: 当条件是true,就执行循环体,执行完循环体后 程序再次执行while中的条件,如果条件还是true,继续执行循环体 直到条件是false的时候,循环就结束 public class WhileDem…

MongoDB复制集技术

为什么使用MongogDB复制集技术? mysql中:一主一从,一主多从结构存在的问题 1、 fileover(故障转移)a) 选主投票b) 切换 2、 是否对就用透明化 3、 数据补偿的问题a) 两阶段数据补偿 4、 解决方法 mysql中使用MHAVIP b…

Linux文件系统的实现 (图文并茂,比较好)

作者:Vamei 出处:http://www.cnblogs.com/vamei 欢迎转载,也请保留这段声明。谢谢! Linux文件管理从用户的层面介绍了Linux管理文件的方式。Linux有一个树状结构来组织文件。树的顶端为根目录(/),节点为目录&#xff0…

ROS探索总结(一)——ROS简介

随着机器人领域的快速发展和复杂化,代码的复用性和模块化的需求原来越强烈,而已有的开源机器人系统又不能很好的适应需求。2010年Willow Garage公司发布了开源机器人操作系统ROS(robot operating system),很快在机器人…

利用union判断系统的大小端

int checkCPUendian()//返回1,为小端;反之,为大端; { union{ unsigned int a; unsigned char b; }c; c.a 1; return 1 c.b; }大端模式(Big-endian),是指数据的高字节保存在内存的低地址中,而数据…

ROS探索总结(二)——ROS总体框架

一、 总体结构 根据ROS系统代码的维护者和分布来标示,主要有两大部分:(1)main:核心部分,主要由Willow Garage公司和一些开发者设计、提供以及维护。它提供了一些分布式计算的基本工具,以及整个…

【深度学习】——利用pytorch搭建一个完整的深度学习项目(构建模型、加载数据集、参数配置、训练、模型保存、预测)

目录 一、深度学习项目的基本构成 二、实战(猫狗分类) 1、数据集下载 2、dataset.py文件 3、model.py 4、config.py 5、predict.py 一、深度学习项目的基本构成 一个深度学习模型一般包含以下几个文件: datasets文件夹:存放…

GUI登录界面

在这次的作业中,我先使用单选按钮,输入框,复选框设计了一个简单地登录界面。接着我使用了MouseListener将登陆按钮与下一个“查询界面”连接起来。最后我使用了我们本周所学的JFrame框架与事件处理机制设计了一个简单地界面。我所设计的登录界…

浅谈ROS操作系统及其应用趋势

ROS操作系统是最先由斯坦福开发的开源机器人操作系统,目前由willowgarage公司开发和维护,相关的开发社区也很成熟( http://www.ros.org , http://answers.ros.org, http://www.willowgarage.com), 经过几年的发展API也逐渐稳定&a…

CRM项目总结

CRM项目总结 一:开发背景 在公司日益扩大的过程中,不可避免的会伴随着更多问题出现。 对外 : 如何更好的管理客户与公司的关系?如何更及时的了解客户日益发展的需求变化?公司的产品是否真的符合客户需求?以…

js变量和数据类型

转载于:https://www.cnblogs.com/songyinan/p/6181421.html

(九)模板方法模式详解(包含与类加载器不得不说的故事)

作者:zuoxiaolong8810(左潇龙),转载请注明出处,特别说明:本博文来自博主原博客,为保证新博客中博文的完整性,特复制到此留存,如需转载请注明新博客地址即可。 模板方法模…

阿里云openapi接口使用,PHP,视频直播

1.下载sdk放入项目文件夹中 核心就是aliyun-php-sdk-core,它的配置文件会自动加载相应的类 2.引入文件 include_once LIB_PATH . ORG/aliyun-openapi/aliyun-php-sdk-core/Config.php; 3.配置客户端对象,需要Access Key ID,Access Key Secret $iClientProfile Defa…

Android之网络编程利用PHP操作MySql插入数据(四)

因为最近在更新我的项目,就想着把自己在项目中用到的一些的简单的与网络交互的方法总结一下,所以最近Android网络编程方面的博文会比较多一些,我尽量以最简单的方法给大家分享,让大家明白易懂。如果有什么不对的地方,还…

【常用网址】——opencv等

opencv官网Releases - OpenCVhttps://opencv.org/releases/

(五):C++分布式实时应用框架——微服务架构的演进

C分布式实时应用框架——微服务架构的演进 技术交流合作QQ群:436466587 欢迎讨论交流 上一篇:(四):C分布式实时应用框架——状态中心模块 版权声明:本文版权及所用技术归属smartguys团队所有,对于抄袭,非经同意转载等…

Robot Application Builder

软件开发工具包 Robot Application Builder是安装在PC机(Windows 2000或Windows XP操作系统)上的一种独立开发工具,可用于创建运行于ABB FlexPendant示教器或PC机上的定制化操作界面。为此,该软件包由以下两部分组成:…

asp.net model 验证和取出 ErrorMessage 信息

为什么80%的码农都做不了架构师?>>> public class Users{public int Id { get; set; }public string Name { get; set; }[Required(ErrorMessage "邮箱不能为空")][EmailAddressAttribute(ErrorMessage "邮箱格式不正确")]public…

【pyqt5学习——信号与槽】实例计时器(解决界面卡顿问题)

目录 一、方法一:另开线程 1、什么是信号与槽 1)GUI控件(信号)与槽 2)自定义信号与槽 2、实战1:计时器(不自定义信号槽和不使用多线程) 1)界面设计——利用qt-desi…

【数据库学习笔记】——创建数据库连接对象connection

目录 connect函数的参数 创建连接对象连接MySQL代码 连接对象常见属性与方法 事务名词解释 课程视频链接: 第14节 Python操作数据库_哔哩哔哩_bilibili666https://www.bilibili.com/video/BV1q54y147KX?fromsearch&seid968950907021994347&spm_id_from3…