OHEM(Online Hard Example Mining)在线难例挖掘(在线困难样例挖掘) & HNM

OHEM(Online Hard Example Mining)在线难例挖掘(在线困难样例挖掘) & HNMHardNegatieMining与OnlineHardExampleMining(OHEM)都属于难例挖掘,它是解决目标检测老大难问题的常用办法,运用于R-CNN,fastR-CNN,fasterrcnn等two-stage模型与SSD等(有anchor的)one-stage模型训练时的训练方法。OHEM和难负例挖掘名字上的不同。HardNegativeMining只注意难负例 OHEM则注意所有难例,不论正负(Loss大的例子)难例挖掘的思想…

大家好,又见面了,我是你们的朋友全栈君。

      Hard Negatie Mining与Online Hard Example Mining(OHEM)都属于难例挖掘,它是解决目标检测老大难问题的常用办法,运用于R-CNN,fast R-CNN,faster rcnn等two-stage模型与SSD等(有anchor的)one-stage模型训练时的训练方法。

OHEM和难负例挖掘名字上的不同。

  • Hard Negative Mining只注意难负例
  • OHEM 则注意所有难例,不论正负(Loss大的例子)

      难例挖掘的思想可以解决很多样本不平衡/简单样本过多的问题,比如说分类网络,将hard sample 补充到数据集里,重新丢进网络当中,就好像给网络准备一个错题集,哪里不会点哪里。

      难例挖掘与非极大值抑制 NMS 一样,都是为了解决目标检测老大难问题(样本不平衡+低召回率)及其带来的副作用。

      根据每个RoIs的loss的大小来决定哪些是难样例, 哪些是简单样例, 通过这种方法, 可以更高效的训练网络, 并且可以使得网络获得更小的训练loss

Pytorch实现

def ohem_loss(
    batch_size, cls_pred, cls_target, loc_pred, loc_target, smooth_l1_sigma=1.0
):
    """
    Arguments:
        batch_size (int): number of sampled rois for bbox head training
        loc_pred (FloatTensor): [R, 4], location of positive rois
        loc_target (FloatTensor): [R, 4], location of positive rois
        pos_mask (FloatTensor): [R], binary mask for sampled positive rois
        cls_pred (FloatTensor): [R, C]
        cls_target (LongTensor): [R]
    Returns:
        cls_loss, loc_loss (FloatTensor)
    """
    ohem_cls_loss = F.cross_entropy(cls_pred, cls_target, reduction='none', ignore_index=-1)
    ohem_loc_loss = smooth_l1_loss(loc_pred, loc_target, sigma=smooth_l1_sigma, reduce=False)
    #这里先暂存下正常的分类loss和回归loss
    loss = ohem_cls_loss + ohem_loc_loss
    #然后对分类和回归loss求和
 
  
    sorted_ohem_loss, idx = torch.sort(loss, descending=True)
    #再对loss进行降序排列
    keep_num = min(sorted_ohem_loss.size()[0], batch_size)
    #得到需要保留的loss数量
    if keep_num < sorted_ohem_loss.size()[0]:
    #这句的作用是如果保留数目小于现有loss总数,则进行筛选保留,否则全部保留
        keep_idx_cuda = idx[:keep_num]
        #保留到需要keep的数目
        ohem_cls_loss = ohem_cls_loss[keep_idx_cuda]
        ohem_loc_loss = ohem_loc_loss[keep_idx_cuda]
        #分类和回归保留相同的数目
    cls_loss = ohem_cls_loss.sum() / keep_num
    loc_loss = ohem_loc_loss.sum() / keep_num
    #然后分别对分类和回归loss求均值
    return cls_loss, loc_loss

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/139390.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • JavaScript与Java的关系(联系与区别)

    JavaScript与Java的关系(联系与区别)JavaScript和Java是两种不一样的语言,但是它们之间存在联系。背景方面Javascript(1995年,Netscape公司雇佣了程序员BrendanEich开发这种网页脚本语言)最初名字叫做Mocha,1995年9月改为LiveScript。12月,Netscape公司与Sun公司(Java语言的发明者和所有者)达成协议,后者允许将这种语言叫做JavaScript。这样一来,Netsc

  • 新手上路:ADAMS 基础知识讲解(图文并茂)【转载仿真论坛】(三)

    新手上路:ADAMS 基础知识讲解(图文并茂)【转载仿真论坛】(三)引用Baker的新手上路:ADAMS基础知识讲解(图文并茂)【转载仿真论坛】(三)四、常见问题篇1、ADAMS中的单位的问题开始的时候需要为模型设置单位。在所有的预置单位系统中,时间单位是秒,角度是度。可设置:MMKS–设置长度为千米,质量为千克,力为牛顿。MKS—设置长度为米,质量为千克,力为牛顿。CGS—设置长度为厘米,质量为克,力为达因。IPS—设置长度为英寸,质量为斯勒格(

  • php 邮箱正则_正则表达式判断邮箱格式

    php 邮箱正则_正则表达式判断邮箱格式PHP邮箱验证正则表达式:preg_match(“/^[0-9a-zA-Z]+@(([0-9a-zA-Z]+)[.])+[a-z]{2,4}$/i”,$email);如果需要更加完善、严格的验证,修改这个正则表达式即可。PHP邮箱验证正则表达式新手实例:functionisEmail($email){if(preg_match(“/^[0-9a-zA-Z]+@(([0-9a-zA-Z]+)…

  • ods数据如何导入dw层_OD数据聚类

    ods数据如何导入dw层_OD数据聚类ODS层数据导入脚本

  • WDA问题混总

    WDA问题混总文章目录unabletoaccessDB:WebDriverAgentLibcodesign失败WebDriverAgentLibcodesignfailure.unabletoaccessDB:多个xcode线程在跑,杀掉xcode,杀掉xcodebuild进程,cleanWebDriverAgentLibcodesign失败环境:mac10.14.5xcode10.3报错:CommandCodesignfailedwithano

  • java程序编译命令_使用 java 命令编译运行 java 程序

    java程序编译命令_使用 java 命令编译运行 java 程序java编译的过程,就是将java项目从源文件变成.class文件的过程,而.class文件,最后会被加载到JVM中运行。在JDKbin/目录下,提供了javac命令,用于将.java源文件编译成.class字节码文件,提供了java命令,以Main_Class为入口,根据运行需要,加载相应的class文件到JVM中执行。关于环境变量如果在没有引用…

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号