首页 > 其他分享 >[重读经典论文] RetinaNet——Focal Loss for Dense Object Detection

[重读经典论文] RetinaNet——Focal Loss for Dense Object Detection

时间:2023-06-05 18:37:14浏览次数:47  
标签:Loss 样本 Dense IoU Object 正负 所示 Focal

1. 前言

这篇论文也是何凯明的团队在2017年的论文《Focal Loss for Dense Object Detection》中提出的,网络架构魔改了FPN,因此这篇论文的重点是提出了新的分类Loss——Focal Loss,用一个合适的函数,去度量难分类和易分类样本对总的损失函数的贡献。解决了传统交叉熵损失函数因为类别不平衡导致性能下降的问题。RetinaNet是历史上one stage网络性能第一次超过two stage网络。

但是它也存在一些缺点,首先Focal Loss引入了另外两个超参数,针对这两个参数需要谨慎调整,不然反而导致最后的训练结果更不好;然后是容易受噪音影响,由于模型会更偏向于学习难分样本,一旦这些样本标错,将会成指数倍放大误差,导致模型难以拟合。

2. 网络架构

2.1. 主体结构

下载

如上图所示,跟FPN区别的点主要是没有用到C2进行特征融合,然后P6、7是在P5的基础上进行卷积操作得到的。Anchor方面,每个特征层选了3个Scale和3个Ratios,也就是9个Anchor,如图右下所示。

2.2. 预测头

下载 (1)

跟Faster-Rcnn有点类似,不同的是每个最后的特征层的预测头的权值是共享的,如图右上所示,上面的分支预测分类,输出W*H*KA的结果,K代表检测目标类别个数(不包括背景),下面的分支预测坐标,输出W*H*4A,4代表预测的(xywh),A表示Anchor个数。

2.3. Loss

正负样本匹配:

  • IoU >=0.5,正样本。
  • IoU < 0.4,负样本。
  • IoU ∈[0.4,0.5),舍弃。

其中IOU指ground truth与anchor box之间的IoU。

总体Loss:

下载 (2)

分类误差采用Focal Loss,算正负样本的损失,回归损失只计算所有正样本的损失。

3. Focal Loss

3.1. one stage检测算法中的样本不平衡问题

下载 (3)

如上图所示,是在图片上画完anchor后,通过正负样本匹配得到的结果,其中黄色的是正样本,红色的是负样本,可以看到负样本远比正样本要多。实际上,在现实中比例更夸张,一般一张图的正样本个数只有十几到几十个,但是负样本则大概在10^4到10^5,这些负样本基本都是简单易分的,对训练网络起不到什么作用,但是会淹没少量但是有助于训练的样本。

3.2. 普通CE损失

对于二分类的交叉熵损失公式为:

微信截图_20230605173513

其中y是标签{-1,+1},p是预测为正样本的概率。

统一一下p:

微信截图_20230605173520

则CE可以重写为下式:

image

 

3.3. Balanced BE

为了平衡样本不均衡,一个做法是引入权重因子α∈ [0, 1] ,当样本为f正的时候是α,样本为负的时候是1 − α,如下面的式子所示:

微信截图_20230605174410

这里的α并不是正负样本的比例,而仅仅是一个超参数。作者用这个Loss进行了消融实验,结果如下图:

α42

3.4. Focal Loss 定义

上面提到加权重后的CE Loss,但是α仅仅只能平衡正负样本,并不能够区分容易和难分的样本。论文的目标是降低易分样本的重要性,集中训练难分样本。因此,作者引入了另外一个调节因子,即image。得到Focal Loss的公式如下:

fc8

如下图所示,通过调节γ,可以得到不同的曲线,γ越大,pt ∈ [0.6,1]这个区间的loss越小,让好分类的样本得到的loss更小。当然γ并不是越大越好,如γ=5,可以看到pt=0.4之后的loss都已经接近0了,因此需要实验选取合适的参数,文中选的是γ=2。

 

损失图

最终版Focal Loss,作者又把平衡因子α加了进去:

调节5180559

最后,作者通过消融实验确定α,γ最好的组合,入如下表所示:

消融3

可以看到这两个超参也是需要谨慎调节的,不然可能不会得到期望的提升,而当时Focal Loss也存在争议,如在YOLOv3 SPP 中,使用了Focal Loss之后,性能反而下降了。

 

4. 参考

[1] 2.1.2 RetinaNet网络结构详解

[2] 3.1 YOLO系列理论合集(YOLOv1~v3)

(完)

标签:Loss,样本,Dense,IoU,Object,正负,所示,Focal
From: https://www.cnblogs.com/harrymore/p/17458661.html

相关文章

  • TypeError: 'dict_keys' object is not subscriptable
     001、python报错>>>dict1={"aa":300,"bb":500,"cc":400,"dd":700}>>>dict1{'aa':300,'bb':500,'cc':400,'dd':700}>>>dict1.keys()dict_ke......
  • AttributeError: 'dict_values' object has no attribute 'index'
     001、python报错如下:>>>dict1={"aa":700,"bb":400,"cc":300,"dd":600}>>>dict1.values().index(300)Traceback(mostrecentcalllast):File"<stdin>",line1,in<module>......
  • uobject只有可以声明无参构造函数和不写构造函数
    (一)结论:(二)测试过程:第一种:不声明任何构造函数:第二种:声明默认构造函数:第三种:声明其他构造函数:(直接报错,需要声明默认构造)(三)ue实现原理:UHT里可以解析出你是否定义了构造函数,是哪种构造函数:参数是否匹配“FObjectInitializer”:不同构造函数,对应使用不同的宏定义: 链接:ht......
  • UE4 Standalone Object继承树
    objclassesObject(48)GCObjectReferencer(120)TextBuffer(88)Field(56)Struct(192)ScriptStruct(208)MovieSceneKeyStructType(400)UserDefinedStruct(312)AISenseBlueprintListener(312)Class(632)......
  • 【二十二】object()函数(1)
    【二十二】object()函数(1)【1】作用Object类是Python中所有类的基类如果定义一个类时没有指定继承哪个类,则默认继承object类。object没有定义__dict__所以不能对object类实例对象尝试设置属性。【2】语法object()返回值:返回一个新的无特征对象【3】示......
  • Pandas中将字符串(object)格式的列,强制转换为浮点型的列
    importpandasaspddf=pd.DataFrame([['11.0',1,2,3],['22.0',4,5,6],['33.0',7,8,9]],columns=['a','b','c','d'])df['a']=pd.......
  • 一个有趣的问题调查,网页上的代码块全部变成 [object Object]
    问题如图,网页上的代码全部显示成了[objectObject],而且与特定网站无关,大部分网站都会有问题。调查无痕模式打开,换个浏览器打开,没有问题,看来是有插件或者油猴脚本捣乱了。调试跟踪HTML元素变更,前几次都是网站自己的js变更,后面出现了一个可疑的插件拿到插件ID之后,看......
  • MyBatis+Sharding-JDBC实体类LocalDateTime类型字段查询报SQLFeatureNotSupportedExce
    问题最近协助渠道组开发新需求,封装实现了一个公共模块供不同渠道项目使用。以前各个渠道项目有很多相似的菜单和功能,各自项目里自己的代码实现,本公共模块对新需求的功能点进行抽象,减少重复代码,提高模块复用性和可维护性。目前有2个渠道项目接入了该公共模块,自测时发现其中1个运......
  • QA|selenium在send_keys时报错dict object has no attribute ''|UI自动化测试
    Q:selenium在send_keys时报错dictobjecthasnoattribute'send_keys',如下图 增加了print(type(e1))发现确实是字典类型,怪了,按道理e1的type应该是selenium.webdriver.remote.webelement.WebElement才对,怎么会变成dict字典呢?我网上查了,按照(115条消息)Python运行selenium时......
  • densenet tensorflow 中文汉字手写识别
    densenet中文汉字手写识别,代码如下: importtensorflowastfimportosimportrandomimportmathimporttensorflow.contrib.slimasslimimporttimeimportloggingimportnumpyasnpimportpicklefromPILimportImageimporttensorflowastf#fromtflearn.lay......