热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

目标检测之focalloss

 FocalLossforDenseObjectDetectionTsung-YiLinPriyaGoyalRossGirshickKaimingHePiotrDollar´Fac

  Focal Loss for Dense Object DetectionTsung-Yi Lin Priya Goyal Ross Girshick Kaiming He Piotr Dollar´Facebook AI Research (FAIR),最近出的一篇做目标检测的工作,本质上是个利用loss function解决样本imbalance问题的工作。

Motivation

      作者说是为了探究为什么ssd、yolo之类的one-stage目标检测网络不如rcnn系列的two-stage检测网络框架效果好,提出了原因在于one-stage训练的过程中没有two-stage的RPN过程来做cascade,所以会有大量的简单负样本在分类器的训练过程中导致训练模型结果不好。采用online hard sample mining(OHEM)的方式是比较通用的方法来解决imbalance的问题,作者设计了一个叫做focal loss的loss function来解决同样的问题,可以认为是OHEM的一个替代方案。

基本原理

       先上个网络结构图,目前主要的one-stage检测框架如下,一个FPN网络带不同scale和shape的anchor,然后不同scale的feature map的组合接出两个子网络,一个用来回归bbox的位置,一个用来回归这个位置所对应的物体分类结果用于判定是否是一个误检。上面提到的样本不均衡的问题就是在这个class subnet上出现的,这会导致这个子网络的预测结果不够好,使得整体检测结果下降。目标检测之focal loss
        所以focal loss就是用来代替这个class subnet的损失函数的,focal loss是交叉熵损失函数(cross entropy,公式2)的变种,
        目标检测之focal loss
        传统的应对样本不均衡的办法就是在这个loss上面加个参数a,通常是样本比例取反,这样来保证数量少的样本获得较大的weight来抵消数量少的影响。focal loss的定义是:
目标检测之focal loss
         可以看到在原有的基础上增加了一个预测概率p和超参数r,其中p的存在就是如果这个样本预测的已经很好了(也就是p->1)那么这个样本产生的loss就接近于0,r的作用是对这个接近的速度做控制,把loss画出来如下图:
          目标检测之focal loss
            可以看出r越大,预测越正确的样本loss下降的越快,也就是这部分样本对于loss的贡献就越小。其实这个工作原理到此就差不多了,作者起了个挺好听的名字叫RetinaNet,下面是一些实现细节:
           1. class subnet和regression subnet用了更深的3*3 conv层
           2. focal loss初始化的时候加了bias:b = log((1 π)),其中π = 0.01,用来防止最开始的几轮迭代时梯度不稳定
   3.8块GPU minibatch=16(但是对比实验的OHEM的batch size最小也是128,不知道这个会不会有什么影响)

实验结果

  对不同的超参数做了对比,也跟OHEM以及state-of-art在COCO上做了对比,结果如下:

    

目标检测之focal loss

     Table1对比了不同的超参数a和r对结果的影响,选了个最好的组合,并且在这个组合下对比了和OHEM的效果,从结果看提升还是很明显的。

目标检测之focal loss

     table2对比了和目前主流方法的对比,值得注意的是table2的结果比table1还要高一些,作者解释说是多训了50%的轮数。。。

整体总结

  工作的idea是比较简单的,paper发的看上去也比较着急,实验不太solid,里面文字错误也有一些,应该是个发出来占坑的paper,一些比较本质的问题其实没有回答的很好。focal loss的本质还是对不同的样本做不同的weight,与OHEM是不同的weight分配方式。作者论文里解释说OHEM单纯的去掉大部分的简单负样本,不如focal loss把所有样本都考虑进来要好,这个逻辑不太成立,focal loss其实也是希望把简单负样本的weight降低,为什么降成0就不够好,这个事情没能通过实验加以证明(比如在focal loss的基础上把排名靠后的样本weight置成0)。和OHEM相比其合理性可能在于一个soft的方式来分配weight通常是要更合理更可tuning的方式,同样的思想应该也可以用到metric-learning之类的需要hard negtive sampling的方法中。

推荐阅读
  • Python正则表达式学习记录及常用方法
    本文记录了学习Python正则表达式的过程,介绍了re模块的常用方法re.search,并解释了rawstring的作用。正则表达式是一种方便检查字符串匹配模式的工具,通过本文的学习可以掌握Python中使用正则表达式的基本方法。 ... [详细]
  • 阿里Treebased Deep Match(TDM) 学习笔记及技术发展回顾
    本文介绍了阿里Treebased Deep Match(TDM)的学习笔记,同时回顾了工业界技术发展的几代演进。从基于统计的启发式规则方法到基于内积模型的向量检索方法,再到引入复杂深度学习模型的下一代匹配技术。文章详细解释了基于统计的启发式规则方法和基于内积模型的向量检索方法的原理和应用,并介绍了TDM的背景和优势。最后,文章提到了向量距离和基于向量聚类的索引结构对于加速匹配效率的作用。本文对于理解TDM的学习过程和了解匹配技术的发展具有重要意义。 ... [详细]
  • vue使用
    关键词: ... [详细]
  • Iamtryingtomakeaclassthatwillreadatextfileofnamesintoanarray,thenreturnthatarra ... [详细]
  • 本文介绍了brain的意思、读音、翻译、用法、发音、词组、同反义词等内容,以及脑新东方在线英语词典的相关信息。还包括了brain的词汇搭配、形容词和名词的用法,以及与brain相关的短语和词组。此外,还介绍了与brain相关的医学术语和智囊团等相关内容。 ... [详细]
  • 如何使用Java获取服务器硬件信息和磁盘负载率
    本文介绍了使用Java编程语言获取服务器硬件信息和磁盘负载率的方法。首先在远程服务器上搭建一个支持服务端语言的HTTP服务,并获取服务器的磁盘信息,并将结果输出。然后在本地使用JS编写一个AJAX脚本,远程请求服务端的程序,得到结果并展示给用户。其中还介绍了如何提取硬盘序列号的方法。 ... [详细]
  • 本文讨论了一个关于cuowu类的问题,作者在使用cuowu类时遇到了错误提示和使用AdjustmentListener的问题。文章提供了16个解决方案,并给出了两个可能导致错误的原因。 ... [详细]
  • ZSI.generate.Wsdl2PythonError: unsupported local simpleType restriction ... [详细]
  • 利用Visual Basic开发SAP接口程序初探的方法与原理
    本文介绍了利用Visual Basic开发SAP接口程序的方法与原理,以及SAP R/3系统的特点和二次开发平台ABAP的使用。通过程序接口自动读取SAP R/3的数据表或视图,在外部进行处理和利用水晶报表等工具生成符合中国人习惯的报表样式。具体介绍了RFC调用的原理和模型,并强调本文主要不讨论SAP R/3函数的开发,而是针对使用SAP的公司的非ABAP开发人员提供了初步的接口程序开发指导。 ... [详细]
  • Ihavethefollowingonhtml我在html上有以下内容<html><head><scriptsrc..3003_Tes ... [详细]
  • 本文介绍了闭包的定义和运转机制,重点解释了闭包如何能够接触外部函数的作用域中的变量。通过词法作用域的查找规则,闭包可以访问外部函数的作用域。同时还提到了闭包的作用和影响。 ... [详细]
  • IhaveconfiguredanactionforaremotenotificationwhenitarrivestomyiOsapp.Iwanttwodiff ... [详细]
  • 目录实现效果:实现环境实现方法一:基本思路主要代码JavaScript代码总结方法二主要代码总结方法三基本思路主要代码JavaScriptHTML总结实 ... [详细]
  • ALTERTABLE通过更改、添加、除去列和约束,或者通过启用或禁用约束和触发器来更改表的定义。语法ALTERTABLEtable{[ALTERCOLUMNcolu ... [详细]
  • 深度学习中的Vision Transformer (ViT)详解
    本文详细介绍了深度学习中的Vision Transformer (ViT)方法。首先介绍了相关工作和ViT的基本原理,包括图像块嵌入、可学习的嵌入、位置嵌入和Transformer编码器等。接着讨论了ViT的张量维度变化、归纳偏置与混合架构、微调及更高分辨率等方面。最后给出了实验结果和相关代码的链接。本文的研究表明,对于CV任务,直接应用纯Transformer架构于图像块序列是可行的,无需依赖于卷积网络。 ... [详细]
author-avatar
所谓一叶随缘_212
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有