目录

前言

在接触一个新技术之前,肯定是因为遇到了新的难题,但这可以促使我们前进。

hard Negative Mining介绍

OHEM 概要解读

mmdetection中的OHEM

损失函数当中加入OHEM思想——图像分割损失函数OhemCELoss

文献引用:


前言

在接触一个新技术之前,肯定是因为遇到了新的难题,但这可以促使我们前进。

之前做个一个目标检测任务,每个类别之间的数据量差距较大,有明显的类别不均衡现象(当样本比例大于4:1时)。

解决类别不平衡问题现以有了较多的可行解决方案:

  • 对于目标检测,可以使用OHEM技术进行扩大数据广度。
  • 使用基于交叉熵损失改进的Focal Loss损失函数
  • 对类别多的数据类别进行欠采样(减少一些重复的数据)。
  • 对于类别较少的数据使用过采样,通过数据增广(色彩变换,仿射变换等)进行扩充。

本篇博客主要会记录在研究OHEM技术时的一些总结。


hard Negative Mining介绍

在two-stage检测算法中,RPN阶段会生成大量的检测框,由于很多时候一张图片可能只会有少量几个标注框(真实框),也就是说绝大部分检测框与真实框没有很大的交集,一般计算的IOU大于设置阈值时认为是正样本,小于设置阈值时是负样本。

但是这样选出来的框不一定是最容易错的框。

我们通常在生成检测框负样本中选出容易预测错误的(当成正样本的),作为新的数据集进行参与训练。

即hard Negative Mining(困难样本挖掘)。

思想:

你不会把所有错题都放到错题集中,只对当中最容易的错放入。

实现思想:

迭代地交替训练,用样本集更新模型,然后再固定模型,来选择分辨错的目标框并加入到样本集中继续训练。

缺点:

hard Negative Mining(困难样本挖掘)需要在不断的训练当中冻结参数、预测选出hard Negative再放入训的训练集,这大幅度的增加了工作量,加大了模型训练的时间。

注:一般使用 SVM 分类器才能使用此方法(SVM 分类器和 Hard Negative Mining Method 交替训练)


OHEM 概要解读

前言:

hard Negative Mining(困难样本挖掘)思想值得我们去使用和学习,但是我们试图在不影响效果的前提下去提高模型的迭代训练速度。故我们提出了OHEM(在线难例挖掘)。

论文:

1604.03540.pdf (arxiv.org)https://arxiv.org/pdf/1604.03540.pdfOHEM(在线难例挖掘)流程概述:

1、进行一次的前向传播,获得每个Region proposal单独的损失值。
2、对每个Region proposal进行NMS计算。
3、对剩下的Region proposal按照损失值进行排序,然后选取损失最大的前一部分Region当做输入再次输入分类回归网络,对于训练多次loss还较高的我们可以认为其是困难样本。
4、将困难样本输入图中的(b)模块,(b)模块是(a)模块的复制版,(b)模块是用来反向传播的部分,然后吧更新的参数共享到(a)部分。

注:所谓的线上挖掘,就是先计算loss→筛选→得到困难负样本。


mmdetection中的OHEM

前言:

其实在mmdetection当中,已经封装好了OHEM的代码,但是大家可能都不知道他在哪,这里我给大家找一下他的位置。

彩蛋:

如何在mmdetection查找自己想要的东西(类或者类的调用等)


损失函数当中加入OHEM思想——图像分割损失函数OhemCELoss

前言:

虽然他在目标检测当中被提出,但是不仅仅是目标检测问题,其他问题都会出现类别不平衡的问题,我们试图把他应用到其他方向当中(例如语义分割)

代码实现:

class OhemCELoss(nn.Module):"""Online hard example mining cross-entropy loss:在线难样本挖掘if loss[self.n_min] > self.thresh: 最少考虑 n_min 个损失最大的 pixel,如果前 n_min 个损失中最小的那个的损失仍然大于设定的阈值,那么取实际所有大于该阈值的元素计算损失:loss=loss[loss>thresh]。否则,计算前 n_min 个损失:loss = loss[:self.n_min]"""def __init__(self, thresh, n_min, ignore_lb=255, *args, **kwargs):super(OhemCELoss, self).__init__()self.thresh = -torch.log(torch.tensor(thresh, dtype=torch.float)).cuda()     # 将输入的概率 转换为loss值self.n_min = n_minself.ignore_lb = ignore_lbself.criteria = nn.CrossEntropyLoss(ignore_index=ignore_lb, reduction='none')   #交叉熵def forward(self, logits, labels):N, C, H, W = logits.size()loss = self.criteria(logits, labels).view(-1)loss, _ = torch.sort(loss, descending=True)     # 排序if loss[self.n_min] > self.thresh:       # 当loss大于阈值(由输入概率转换成loss阈值)的像素数量比n_min多时,取所以大于阈值的loss值loss = loss[loss>self.thresh]else:loss = loss[:self.n_min]return torch.mean(loss)

文献引用:

(32条消息) 【每日一网】Day18:OHEM简单理解_陈子文好帅的博客-CSDN博客_ohem

(32条消息) OHEM 详解_*青云*的博客-CSDN博客_ohem

(32条消息) 图像分割损失函数OhemCELoss_超级无敌陈大佬的跟班的博客-CSDN博客_分割损失函数

【目标检测——OHEM 解读】处理类别不平衡问题相关推荐

  1. CVPR2021 | 2D目标检测论文解读

    CVPR2021 | 2D目标检测论文解读 1. UP-DETR:--<UP-DETR: Unsupervised Pre-training for Object Detection with ...

  2. 目标检测论文解读复现之六:基于YOLOv5的遥感图像舰船的检测方法

    目标检测论文解读复现 文章目录 目标检测论文解读复现 前言 一.摘要 二.网络模型及核心创新点 三.应用数据集 四.实验效果 五.实验结论 六.投稿期刊介绍 前言 此前出了目标改进算法专栏,但是对于应 ...

  3. 目标检测论文解读复现之五:改进YOLOv5的SAR图像舰船目标检测

    目标检测论文解读复现 文章目录 目标检测论文解读复现 前言 一.摘要 二.网络模型及核心创新点 三.应用数据集 四.实验效果(部分展示) 五.实验结论 六.投稿期刊介绍 前言 此前出了目标改进算法专栏 ...

  4. 目标检测论文解读复现之一:基于改进YOLOv5的整车原木数量检测方法——TWD-YOLOv5(代码已复现)

    目标检测论文解读复现 文章目录 目标检测论文解读复现 前言 一.摘要 二.网络模型及核心创新点 三.应用数据集 四.实验效果 五.投稿期刊介绍 前言 此前出了目标改进算法专栏,但是对于应用于什么场景, ...

  5. python ssd目标检测_解读目标检测之SSD:Single Shot MultiBox Detector

    注:md文件,Typora书写,md兼容程度github=CSDN>知乎,若有不兼容处麻烦移步其他平台,github文档供下载. 发表在CSDN:https://blog.csdn.net/ha ...

  6. 目标检测论文解读复现之十五:基于YOLOv5的光学遥感图像舰船 目标检测算法

    前言 此前出了目标改进算法专栏,但是对于应用于什么场景,需要什么改进方法对应与自己的应用场景有效果,并且多少改进点能发什么水平的文章,为解决大家的困惑,此系列文章旨在给大家解读最新目标检测算法论文,帮 ...

  7. 目标检测论文解读复现【NO.21】基于改进YOLOv7的小目标检测

    前言 此前出了目标改进算法专栏,但是对于应用于什么场景,需要什么改进方法对应与自己的应用场景有效果,并且多少改进点能发什么水平的文章,为解决大家的困惑,此系列文章旨在给大家解读最新目标检测算法论文,帮 ...

  8. 目标检测论文解读1:(RCNN解读)Rich feature hierarchies for accurate object detection...

    一.番外说明 大家好,我是小P,今天和大家一起学习目标检测领域的经典文章-RCNN,希望大家支持和喜欢.此外,对"目标检测/模型压缩/语义分割"感兴趣的小伙伴,欢迎加入QQ群 81 ...

  9. CVPR 2020 | Open Images冠军方案:商汤TSD目标检测算法解读

    该论文名为 Revisiting the Sibling Head in Object Detector,其提出基于任务间空间自适应解耦(task-aware spatial disentanglem ...

最新文章

  1. Nodejs--url模块
  2. Windows 技巧篇-点开头的文件夹名创建方法。如何创建点开头的文件夹?
  3. petalinux zynq spi_ZYNQ 系列 01 | PL 实现按键控制 LED(1)
  4. 树形结构:二叉排列树,二叉搜索树
  5. Visual Studio 2010 将网站直接发布到远程站点
  6. 【08月14日】A股ROE最高排名
  7. python vscode_VScode || 为VScode配置python环境
  8. 711 发送请求失败_会不会存在不失败的代理IP?
  9. 区位码怎么知道点阵里的起始点_自身免疫疾病的GAPS起始饮食改良版
  10. 《jQuery基础》总结
  11. a.out.h 头文件分析 \linux-1.0\linux\include\linux\a.out.h
  12. Redis五大基本数据类型及其相关命令及常用用途
  13. NOI 2018 归程 (Kruskal重构树)
  14. HDU2203 亲和串【字符串】
  15. OkHttp使用及工具类封装
  16. 镜头的MTF曲线分析和原理
  17. html简单的任务管理系统实现,用Javascript实现Windows任务管理器的代码
  18. 机器学习 day15异常检测
  19. Android 监听wifi总结
  20. educoder太原理工web程序设计——移动端电商页面制作

热门文章

  1. Docker教程(二)docker原理
  2. 2021年机器学习与数据挖掘简答题复习整理
  3. MySql中的longtext字段的返回问题
  4. 动态规划(5)状态压缩dp
  5. uCOS-II系统中的任务就绪表
  6. 为什么阿里的程序员成长如此之快?最新BAT大厂面试者整理的Android面试题目模板,涨姿势了!
  7. 前端开发工具集(九):单元测试(jest)
  8. 深入剖析Android四大组件(九)——Activity之AppCompatActivity与toolbar的结合
  9. 送给小公主的一首诗——闪光屏幕书写(Python实现)
  10. java 邮件 定时_java实现邮件定时发送