SAPD:FSAF升级版,合理的损失值加权以及金字塔特征选择 | ECCV 2020

ByteRiftMaster
• 阅读 904
针对anchor-point检测算法的优化问题,论文提出了SAPD方法,对不同位置的anchor point使用不同的损失权重,并且对不同的特征金字塔层进行加权共同训练,去除了大部分人为制定的规则,更加遵循网络本身的权值进行训练

来源:晓飞的算法工程笔记 公众号

论文: Soft Anchor-Point Object Detection

SAPD:FSAF升级版,合理的损失值加权以及金字塔特征选择 | ECCV 2020

Introduction


  Anchor-free检测方法分为anchor-point类别和key-point类别两种,相对于key-point类别,anchor-point类别有以下有点:1) 更简单的网络结构 2) 更快的训练和推理速度 3) 更好地利用特征金字塔 4) 更灵活的特征金字塔选择,但anchor-point类别的准确率一般比key-point类别要低,所以论文着力于研究阻碍anchor-point类别准确率的因素,提出了SAPD(Soft Anchor-Point Detecto),主要有以下两个亮点:

  • Soft-weighted anchor points。anchor-point算法在训练时一般将满足几何关系的点设置为正样本点,其损失值权重均为1,这造成定位较不准确的点偶尔分类置信度更高。实际上,不同位置的点的回归难度是不一样的,越靠近目标边缘的点的损失值权重应该越低,让网络集中于优质anchor point的学习。
  • Soft-selectedpyramid levels。anchor-point算法每轮训练会选择特征金字塔的其中一层特征进行训练,其它层均忽略,这在一定程度上造成了浪费。因为其他层虽然响应不如被选择的层强,但其特征分布应该与被选择层是类似的,所以可以赋予多层不同权重同时训练。

Detection Formulation with Anchor Points


  论文首先介绍了大致的anchor point目标检测方法的网络结构以及训练方法。

Network architecture

SAPD:FSAF升级版,合理的损失值加权以及金字塔特征选择 | ECCV 2020

  网络包含主干网络以及特征金字塔,特征金字塔每层包含一个detection head,特征金字塔层标记为$P_l$,$l$为层数,层的特征图大小为输入$W\times H$的$1/s_l$倍,$s_l=2^l$为stride。一般,$l$的范围为3到7,detection head包含分类子网和回归子网,子网均以5个$3\times 3$卷积层开头,然后每个位置分别预测$K$个分类置信度以及4个偏移值,偏移值分别为当前位置到目标边界的距离。

Supervision targets

  对于目标$B=(c, x, y, w, h)$,中心区域为$B_v=(c, x, y, \epsilon w, \epsilon h)$,$\epsilon$为缩放因子。当目标$B$被赋予金字塔层$P_l$且anchor point $p_{lij}$位于$B_v$内时,则认为$p_{lij}$是正样本点,分类目标为$c$,回归目标为归一化的距离$d=(d^l, d^t, d^r, d^b)$,分别为当前位置到目标四个边界的距离:

SAPD:FSAF升级版,合理的损失值加权以及金字塔特征选择 | ECCV 2020

  $z$为归一化因子。对于负样本点,分类目标为背景($c=0$),定位目标为null,不需要学习。

Loss functions

  网络输出每个点$p_{lij}$的$K$维分类输出$\hat{c}_{lij}$以及4维位置回归输出$\hat{d}_{lij}$,分别使用focal loss和IoU loss进行学习:

SAPD:FSAF升级版,合理的损失值加权以及金字塔特征选择 | ECCV 2020

  网络整体损失为正负样本点之和除以正样本点数:

SAPD:FSAF升级版,合理的损失值加权以及金字塔特征选择 | ECCV 2020

Soft Anchor-Point Detector


SAPD:FSAF升级版,合理的损失值加权以及金字塔特征选择 | ECCV 2020

  SAPD的核心如图3所示,分别为Soft-Weighted Anchor Points以及Soft-Selected Pyramid Levels,用于调整anchor point权重以及使用特征金字塔的多层进行训练。

Soft-Weighted Anchor Points

  • False attention

SAPD:FSAF升级版,合理的损失值加权以及金字塔特征选择 | ECCV 2020

  基于传统的训练策略,论文观察到部分anchor point输出的定位准确率较差,但是其分类置信度很高,如图4a所示,这会造成NMS过后没有保留定位最准确的预测结果。可能的原因在于,训练策略平等地对待中心区域$B_v$内的anchor point。实际上,离目标边界越近的点,越难回归准确的目标位置,所以应该根据位置对不同的anchor point进行损失值的加权,让网络集中于优质的anchor point的学习,而不是勉强网络将那些较难回归的点也学习好。

  • Our solution

      为了解决上面提到的问题,论文提出soft-weighting的概念,为每个anchor point的损失值$L_{lij}$增加一个权重$w_{lij}$,权重由点位置和目标的边界决定,负样本点不参与位置回归的计算,所以直接设为1,完整的权值计算为:

SAPD:FSAF升级版,合理的损失值加权以及金字塔特征选择 | ECCV 2020

  $f$为反映点$p_{lij}$与目标$B$边界远近的函数,论文设置$f$为centerness函数$f(p_{lij}, B)=[\frac{min(d^l_{lij}, d^r_{lij})min(d^t_{lij}, d^b_{lij})}{max(d^l_{lij}, d^r_{lij})max(d^t_{lij}, d^b_{lij})}]^{\eta}$

  $\eta$为降低的幅度,具体的效果可以看图3,经过Soft-Weighted后,anchor point的权值变成了山峰状。

Soft-Selected Pyramid Levels

  • Feature selection

    SAPD:FSAF升级版,合理的损失值加权以及金字塔特征选择 | ECCV 2020

  anchor-free方法在每轮一般都会选择特征金字塔的其中一层进行训练,选择不同的层的效果完全不同。而论文通过可视化发现,不同层的激活区域实际上是类似的,如图5所示,这意味着不同层的特征可以协作预测。基于上面的发现,论文认为选择合适的金字塔层有两条准则:

  • 选择需基于特征值,而非人工制定的规则。
  • 允许使用多层特征对每个目标进行训练,每层需对预测结果有显著的贡献。
  • Our solution

SAPD:FSAF升级版,合理的损失值加权以及金字塔特征选择 | ECCV 2020

  为了满足上面两条准则,论文提出使用特征选择网络来预测每层对于目标的权重,整体流程如图6所示,使用RoIAlign提取每层对应区域的特征,合并后输入到特征选择网络,然后输出权重向量。效果可看图3,金字塔每层的权值的山峰形状相似,但高度不同。需要注意,特征选择网络仅在训练阶段使用。

SAPD:FSAF升级版,合理的损失值加权以及金字塔特征选择 | ECCV 2020

  特征选择网络的结构十分简单,如表1,与检测器一起训练,GT为one-hot向量,数值根据FSAF的最小损失值方法指定,具体可以看看之前发的关于FSAF文章。至此,目标$B$通过权重$w^B_l$与金字塔的每层进行了关联,结合前面的soft-weighting,anchor point的权值为:

SAPD:FSAF升级版,合理的损失值加权以及金字塔特征选择 | ECCV 2020

  完整的模型的损失为加权的anchor point损失加上特征选择网络的损失:

SAPD:FSAF升级版,合理的损失值加权以及金字塔特征选择 | ECCV 2020

Experiment


SAPD:FSAF升级版,合理的损失值加权以及金字塔特征选择 | ECCV 2020

  各模块的对比实验。

SAPD:FSAF升级版,合理的损失值加权以及金字塔特征选择 | ECCV 2020

  与SOTA算法进行对比。

Conclusion


  针对anchor-point检测算法的优化问题,论文提出了SAPD方法,对不同位置的anchor point使用不同的损失权重,并且对不同的特征金字塔层进行加权共同训练,去除了大部分人为制定的规则,更加遵循网络本身的权值进行训练。



如果本文对你有帮助,麻烦点个赞或在看呗~
更多内容请关注 微信公众号【晓飞的算法工程笔记】

SAPD:FSAF升级版,合理的损失值加权以及金字塔特征选择 | ECCV 2020

点赞
收藏
评论区
推荐文章
blmius blmius
3年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
皕杰报表之UUID
​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为
Easter79 Easter79
3年前
swap空间的增减方法
(1)增大swap空间去激活swap交换区:swapoff v /dev/vg00/lvswap扩展交换lv:lvextend L 10G /dev/vg00/lvswap重新生成swap交换区:mkswap /dev/vg00/lvswap激活新生成的交换区:swapon v /dev/vg00/lvswap
Jacquelyn38 Jacquelyn38
4年前
2020年前端实用代码段,为你的工作保驾护航
有空的时候,自己总结了几个代码段,在开发中也经常使用,谢谢。1、使用解构获取json数据let jsonData  id: 1,status: "OK",data: 'a', 'b';let  id, status, data: number   jsonData;console.log(id, status, number )
Wesley13 Wesley13
3年前
mysql设置时区
mysql设置时区mysql\_query("SETtime\_zone'8:00'")ordie('时区设置失败,请联系管理员!');中国在东8区所以加8方法二:selectcount(user\_id)asdevice,CONVERT\_TZ(FROM\_UNIXTIME(reg\_time),'08:00','0
Wesley13 Wesley13
3年前
00:Java简单了解
浅谈Java之概述Java是SUN(StanfordUniversityNetwork),斯坦福大学网络公司)1995年推出的一门高级编程语言。Java是一种面向Internet的编程语言。随着Java技术在web方面的不断成熟,已经成为Web应用程序的首选开发语言。Java是简单易学,完全面向对象,安全可靠,与平台无关的编程语言。
Stella981 Stella981
3年前
Django中Admin中的一些参数配置
设置在列表中显示的字段,id为django模型默认的主键list_display('id','name','sex','profession','email','qq','phone','status','create_time')设置在列表可编辑字段list_editable
Wesley13 Wesley13
3年前
MySQL部分从库上面因为大量的临时表tmp_table造成慢查询
背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_
为什么mysql不推荐使用雪花ID作为主键
作者:毛辰飞背景在mysql中设计表的时候,mysql官方推荐不要使用uuid或者不连续不重复的雪花id(long形且唯一),而是推荐连续自增的主键id,官方的推荐是auto_increment,那么为什么不建议采用uuid,使用uuid究
Python进阶者 Python进阶者
1年前
Excel中这日期老是出来00:00:00,怎么用Pandas把这个去除
大家好,我是皮皮。一、前言前几天在Python白银交流群【上海新年人】问了一个Pandas数据筛选的问题。问题如下:这日期老是出来00:00:00,怎么把这个去除。二、实现过程后来【论草莓如何成为冻干莓】给了一个思路和代码如下:pd.toexcel之前把这
美凌格栋栋酱 美凌格栋栋酱
4个月前
Oracle 分组与拼接字符串同时使用
SELECTT.,ROWNUMIDFROM(SELECTT.EMPLID,T.NAME,T.BU,T.REALDEPART,T.FORMATDATE,SUM(T.S0)S0,MAX(UPDATETIME)CREATETIME,LISTAGG(TOCHAR(