Focal Loss 函数用于密集对象检测
2018-02-22 00:22
344 查看
为了达到这个目的,我们把训练阶段的类别不平衡性视为一阶目标检测系统精度的瓶颈,并提出了了解决这个瓶颈的全新的损失函数。在此基础上,我们设计了一个名为RetinaNet的一阶目标检测模型。Focal Loss
2.1 Cross entropy
二分类问题中loss的定义如下:
上式中
代表样本属于1的概率。y代表标签。为了表示方便,我们定义
如下:
CE loss 如下图中的蓝色曲线所示,这个loss的一个显著特征是,即使是很容易的分类情况下,也会产生较大的loss。当把这些大量的loss加起来的时候,将会产生较大的影响。
。
用来设置为相反类别的概率或者作为交叉验证的一个超参数。为了表示方便,我们重写了带
参数的CE loss:
平衡了正负样本的重要性,但是无法对 容易分类的样本和难以分类的样本产生影响。因此我们提出了一种全新的loss function(focal loss),以此来降低 容易分类样本的重要性,从而把训练集中在难以分类的负样本上。 Focal loss 的形式如下:
Focal loss 在 cross entropy 的基础上增加了一个调节因子,
。Focal loss 如下图所示,
的取值在[0, 5] 之间。从图中我们可以看出两点:当一个样本被错分类,
值很小的时候,调节因子,
的值很小,因此不会对loss产生影响。当
值很大,趋近于1的时候,调节因子的值趋近于0,因此对于正确分类的样本的loss值被缩小了。
的时候,FL 等于 CE。当
增加时候,调节因子的影响相应的增加,实验中
取得了最好的实验效果。
在实验中,我们使用了
变种的focal loss ,形式如下:
RetinaNet Detector
为了验证使用的Focal Loss function,作者设计了一种RetinaNet,如下图所示:
RetinaNet 网络架构包含一个backbone 网络和两个subnetwork。Backbone网络在底层使用了ResNet,用来生成卷机特征,在此之上有一个Feature Pyramid Network(FPN)。Backbone外接两个subnetwork,一个用来分类,一个用来生成目标位置信息。实验验证 我们在COCO数据集上进行了目标检测的实验,并将测试结果与近期最先进的方法进行比较。其中包括一阶模型和二阶模型。下表列出了测试结果:
这是Retina-101-800模型的测试结果,训练过程中采用scale filter , 训练时间是之前模型的1.5倍,但是AP值提升了1.3。对比当前最先进的一阶模型,我们的模型AP值提升了5.9%(39.1 vs 33.2)。对比当前最先进的二阶模型,Faster R-CNN w TDM,我们的模型也取得了2.3%的优势(39.1 vs 36.8)。
2.1 Cross entropy
二分类问题中loss的定义如下:
上式中
代表样本属于1的概率。y代表标签。为了表示方便,我们定义
如下:
CE loss 如下图中的蓝色曲线所示,这个loss的一个显著特征是,即使是很容易的分类情况下,也会产生较大的loss。当把这些大量的loss加起来的时候,将会产生较大的影响。
2.2 Balanced Cross Entropy
常用的解决类别不平衡的方法是引入一个额外的参数。
用来设置为相反类别的概率或者作为交叉验证的一个超参数。为了表示方便,我们重写了带
参数的CE loss:
2.3 Focal Loss Definition
正如实验所示,在密集目标检测系统中,训练过程中,遇到的类别失衡将会对交叉熵损失函数产生较大影响。容易分类的负样本将会占据主要的损失以及梯度。尽管平衡了正负样本的重要性,但是无法对 容易分类的样本和难以分类的样本产生影响。因此我们提出了一种全新的loss function(focal loss),以此来降低 容易分类样本的重要性,从而把训练集中在难以分类的负样本上。 Focal loss 的形式如下:
Focal loss 在 cross entropy 的基础上增加了一个调节因子,
。Focal loss 如下图所示,
的取值在[0, 5] 之间。从图中我们可以看出两点:当一个样本被错分类,
值很小的时候,调节因子,
的值很小,因此不会对loss产生影响。当
值很大,趋近于1的时候,调节因子的值趋近于0,因此对于正确分类的样本的loss值被缩小了。
的时候,FL 等于 CE。当
增加时候,调节因子的影响相应的增加,实验中
取得了最好的实验效果。
在实验中,我们使用了
变种的focal loss ,形式如下:
RetinaNet Detector
为了验证使用的Focal Loss function,作者设计了一种RetinaNet,如下图所示:
RetinaNet 网络架构包含一个backbone 网络和两个subnetwork。Backbone网络在底层使用了ResNet,用来生成卷机特征,在此之上有一个Feature Pyramid Network(FPN)。Backbone外接两个subnetwork,一个用来分类,一个用来生成目标位置信息。实验验证 我们在COCO数据集上进行了目标检测的实验,并将测试结果与近期最先进的方法进行比较。其中包括一阶模型和二阶模型。下表列出了测试结果:
这是Retina-101-800模型的测试结果,训练过程中采用scale filter , 训练时间是之前模型的1.5倍,但是AP值提升了1.3。对比当前最先进的一阶模型,我们的模型AP值提升了5.9%(39.1 vs 33.2)。对比当前最先进的二阶模型,Faster R-CNN w TDM,我们的模型也取得了2.3%的优势(39.1 vs 36.8)。
相关文章推荐
- 论文 | 用于密集对象检测的 Focal Loss 函数
- js 用于检测类数组对象的函数方法
- js-用于检测类数组对象的函数
- 8.9 编写函数打开文件用于输入,将文件内容读入 string 类型的 vector 容器,每一行存储为该容器对象 的一个元素。8.10 重写上面的程序,把文件中的每个单词存储为 容器的一个元素
- 绕过oc编译器检测,直接取函数,对象
- 用于组织,测试和操作对象及类的工具和技术-2 查找类/检测对象类型
- Java 中的 int 与 Integer 用于 List<Integer> 时,以及通过打印变量检测程序运行和函数调用次数计数
- 用于string对象中字符截取的几种函数总结——语法、参数意义及用途举例
- php中检测变量是否是一个对象的is_object函数介绍及用法举例
- c++中函数中将引用用于类对象
- 写得用于比较的函数对象模板
- 标准库定义的函数对象--接“将函数对象用于标准库算法”
- nonlocal - 用于操作外层函数作用域中的对象(变量)
- JavaScript 函数 eval() 可用于将 JSON 文本转换为 JavaScript 对象
- 将函数对象用于标准库算法
- Python帮助函数调试函数 用于获取对象的属性及属性值
- jQuery.isEmptyObject()函数用于判断指定参数是否是一个空对象。
- 用于多种结构体的函数对象
- 函数对象用于标准库
- $.parseJSON() 函数用于将符合标准格式的的JSON字符串转为与之对应的JavaScript对象。