百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术教程 > 正文

深度学习难分样本挖掘(Hard Mining)

csdh11 2024-12-31 10:28 4 浏览

来源:深度学习这件小事本文约1500字,论文复现了一遍建议阅读5分钟本文为你介绍关于难分样本的挖掘,如何将难分样本抽取出来。


最近看了几篇文章关于难分样本的挖掘,如何将难分样本抽取出来,通过训练,使得正负样本数量均衡。一般用来减少实验结果的假阳性问题。


Training Region-based Object Detectors with Online Hard Example Mining


论文:https://arxiv.org/pdf/1604.03540.pdf

代码:https://github.com/abhi2610/ohem


01、概念


对于分类来说:


正样本:我们想要正确分类出的类别所对应的样本,例如,我们需要对一张图片分类,确定是否属于猫,那么在训练的时候,猫的图片就是正样本。


负样本:根据上面的例子,不是猫的其他所有的图片都是负样本。


难分正样本(hard positives):错分成负样本的正样本,也可以是训练过程中损失最高的正样本。

难分负样本(hard negatives):错分成正样本的负样本,也可以是训练过程中损失最高的负样本。

易分正样本(easy positive):容易正确分类的正样本,该类的概率最高。也可以是训练过程中损失最低的正样本。

易分负样本(easy negatives):容易正确分类的负样本,该类的概率最高。也可以是训练过程中损失最低的负样本。


02、核心思想


用分类器对样本进行分类,把其中错误分类的样本(hard negative)放入负样本集合再继续训练分类器。


关键是找出影响网络性能的一些训练样本,针对性的进行处理。



简单来说就是把难分的样本,剔除出来,放到另外一个地方里面。最后将难分样本,给负样本,加强训练分类器。但是,这样又会造成数据不平衡的问题,下面会讲到。


03、方法:离线和在线


  • 离线:


在样本训练过程中,会将训练结果与GroundTruth计算IOU。通常会设定一个阈值(0.5),结果超过阈值认为是正样本,低于一定阈值的则认为是负样本,然后扔进网络中训练。


但是,随着训练的进行,这样的策略也许会出现一个问题,那就是正样本的数量会远远小于负样本,这样会导致数据的分布不平衡,使得网络的训练结果不是很好。


当然有些论文作者针对这种导致不平衡的数据,提出了一种对称的模型。就是类似上图,将Hard Posiotive也重新赋给正样本。


  • 在线:


CVPR2016的Training Region-based Object Detectors with Online Hard Example Mining(oral)将难分样本挖掘(hard example mining)机制嵌入到SGD算法中,使得Fast R-CNN在训练的过程中根据region proposal的损失自动选取合适的Region Proposal作为正负例训练。


上面的论文就是讲的在线的方法:Online Hard Example Mining,简称OHEM


实验结果表明使用OHEM(Online Hard Example Mining)机制可以使得Fast R-CNN算法在VOC2007和VOC2012上mAP提高 4%左右。


即:训练的时候选择hard negative来进行迭代,从而提高训练的效果。


简单来说就是从ROI中选择hard,而不是简单的采样。


Forward: 全部的ROI通过网络,根据loss排序;


Backward:根据排序,选择B/N个loss值最大的(worst)样本来后向传播更新model的weights.


这里会有一个问题,即位置相近的ROI在map中可能对应的是同一个位置,loss值是相近的,所以针对这个问题,提出的解决方法是:对hard做nms,然后再选择B/N个ROI反向传播,这里nms选择的IoU=0.7。


在后向传播时,直觉想到的方法就是将那些未被选中的ROI的loss直接设置为0即可,但这实际上还是将所有的ROI进行反向传播,时间和空间消耗都很大,所以作者在这里提出了本文的网络框架,用两隔网络,一个只用来前向传播,另一个则根据选择的ROIs进行后向传播,的确增加了空间消耗(1G),但是有效的减少了时间消耗,实际的实验结果也是可以接受的。





给定图像和选择性搜索RoI,卷积网络计算转换特征映射。在(a)中,只读RoI网络在特征映射和所有RoI上运行正向传递(以绿色箭头显示)。然后Hard RoI模块使用这些RoI损失来选择B个样本。在(b)中,RoI网络使用这些硬性示例来计算前向和后向通道(以红色箭头示出)。


想法很类似于新扩展一个空间,错放错误样本,然后单独训练这些样本,更新权重。


04、扩展idea


难分样本挖掘的思想同样可以利用到图像的语义分割上。


可以对难以分割的样本,或者无法分割的样本,单独建立字典或者模型来训练,更新网络权重。


用于不平衡数据的扩增也是一个不错的选择。


文中图片中的思想可以借鉴哦。读者可以自定义一个自己的Hard ROI模块哟~


【参考】

https://blog.csdn.net/u014381600/article/details/79161261

https://blog.csdn.net/qq_29981283/article/details/83350062

https://blog.csdn.net/u013608402/article/details/51275486

相关推荐

10种常见的MySQL错误,你可中招?

【51CTO.com快译】如果未能对MySQL8进行恰当的配置,您非但可能遇到无法顺利访问、或调用MySQL的窘境,而且还可能给真实的应用生产环境带来巨大的影响。本文列举了十种MySQL...

MYSQL数据库基础和常用语法汇总03篇-数据查询

【数据查询语言】(1)查询系统内部函数返回内容和算式计算显示MYSQL的版本:selectversion();显示当前时间:selectnow();显示年月日:SELECTDAYOFMONTH...

MySql 十分钟查询数据库500W数据逐条输出比分页查询快100倍

大家好,我是云枫,今天给大家分享我最近困扰我许久的一个问题,大数据量场景下需要把一张表的数据全部查询出来处理加工然后入库另外一张表遇到问题对于这样的场景其实就类似于ETL工具处理数据抽取,数据加工,数...

DBA技术分享(九)- MySQL数据库中查找最常用的数据类型

一、概述今天分享几个关于MySQL数据类型的查询,具体如下:在MySQL数据库中查找最常用的数据类型...

sql查看mysql中各数据库大小

mysql数据库版本:mysql5.7用SQL命令查看Mysql数据库大小要想知道每个数据库的大小的话,步骤如下:1、进入information_schema数据库(存放了其他的数据库的信息)use...

mysql数据误删除后的恢复方法

1、首先查看是否开启了mysql数据操作日志,如果没有那记得打开为以后做好准备。查看的方法如下:在mysql中执行命令:showvariableslike'%bin%';通过上图...

数据库数据恢复—MYSQL数据库MYI文件损坏的数据恢复案例

mysql数据库故障:mysql数据库文件ibdata1、MYI、MYD损坏。故障表现:1、数据库无法进行查询等操作;2、使用mysqlcheck和myisamchk无法修复数据库。mysql数据库数...

「删库跑路」使用Binlog日志恢复误删的MySQL数据

前言“删库跑路”是程序员经常谈起的话题,今天,我就要教大家如何删!库!跑!路!开个玩笑,今天文章的主题是如何使用Mysql内置的Binlog日志对误删的数据进行恢复,读完本文,你能够了解到:MySQL...

MySQL常用基础用法集锦,都在这里了

大家还记得我们之前介绍过MySQL的执行顺序吗?MySQL数据插入INSERTINTO与条件查询WHERE的基本用法(二)。本节课我们将给大家介绍MySQL中常用的几个关键字SELECT/HAVIN...

MySQL数据实时同步到Elasticsearch解决方案

概述在实际的项目开发与运维过程中,MySQL常常扮演着业务数据库的核心角色,以其强大的事务处理能力和数据完整性保障,支撑着系统的稳定运行。然而,随着数据量的急剧增长和查询复杂度的不断提升,单一依赖...

MySql中查询JSON结构数据

由于以前用的数据里面,为了方便后续的扩展,很多用了JSON结构存储在mysql字段里面,于是就经常需要去使用mysql进行JSON数据的检索,比如用:SELECT*FROMdataWHERE...

大数据量查询容易OOM?试试MySQL流式查询

一、前言程序访问MySQL数据库时,当查询出来的数据量特别大时,数据库驱动把加载到的数据全部加载到内存里,就有可能会导致内存溢出(OOM)。其实在MySQL数据库中提供了流式查询,允许把符合条...

Oracle通过dblink连接mysql数据库实时数据同步

1.检查oracle数据库所在的主机上是否已经装了mysqlodbc客户端rpm-qa|grepmysql-connect...

如何使用Python连接MySQL数据库?

数据分析离不开数据库,如何使用python连接数据库呢?听我娓娓道来哈该笔记参考了PyMySQL官方文档和《python数据采集》关于数据存储的部分,欢迎大家去阅读原著,相信会理解的更加透彻。...

Mysql联表update数据

1.MySQLUPDATEJOIN语法在MySQL中,可以在UPDATE语句中使用JOIN子句执行跨表更新。MySQLUPDATEJOIN的语法如下:拉勾IT课小编为大家分解UPDATE...