[论文笔记]AutoAssign 阅读笔记_吉他A梦的博客-程序员ITS301_autoassign

技术标签: 计算机视觉  深度学习  人工智能  论文笔记  

AutoAssign:Differentiable Label Assignment for Dense Object Detection

论文链接:论文链接
代码链接:暂无
作者自己对于这篇文章的解读https://zhuanlan.zhihu.com/p/158907507

摘要

  • 动机
    • 传统正负样本分配策略可以归纳为在gt框的中心点周围进行采样,但是gt框的中心点可能并不在物体上
    • 有很多超参数:例如,anchor 的 num,size,aspect ratios;或者 radius,top-k,IoU 阈值等等
    • 由于FPN的存在,某个bb的spatial和scale的确定非常重要
  • 解决方案:AutoAssign是一个one-stageanchor free的检测器,在FCOS的基础上,使用中心加权模块(center weighting module)和置信度加权模块(confidence weighting module)共同生成正\负权重图(positive and negative weight map)(正权重图和负权重图,有两个图),进而动态分配正负样本(因为有两个模块,所有作者将这个方法称之为differentiable(可分的))

1. 引言

  • 传统方法:常见正负样本分配基于某些prior,如下图:
    • anchor-based检测器例如RetinaNet在不同特征图的不同位置上放置不同形状的anchor,并通过与gt的IoU来确定正负样本;
    • anchor-free检测器例如FCOS在gt的中心部分进行正样本采样,并且将不同大小的物体由不同尺度的特征图来检测。
      在这里插入图片描述
  • 传统方法的不足之处:传统方法 将gt中心的点(或者生成的anchor)作为正样本,但gt中心点可能不落在物体上。这样会把背景点当做正样本来进行训练,影响训练效果
    在这里插入图片描述

2. 相关工作

固定标签分配(Fixed Label assignment)

  • anchor-based和anchor-free都遵循数据分布的中心先验,即靠近边界框中心的空间位置更可能包含对象

动态标签分配(Dynamic Label assignment)

  • prior-related方法:
    • GuidedAnchoring 利用语义特征来指导anchor的设置,并动态地改变anchor的形状,以适应各种物体的分布
    • MetaAnchor 在训练过程中随机抽取任何形状的anchor,以覆盖不同种类的物体
  • instance-related方法:
    • FSAF 用最小的训练损失动态地将每个实例分配给最合适的 FPN 特征级别
    • SAPD 重新加权正anchor并应用额外的meta-net来选择适当的 FPN 阶段
    • FreeAnchor 基于每个对象的 IoU 的 top-k 个anchor,使用 Mean-Max 函数在选定的anchor之间加权
    • ATSS 根据实例的统计特征,通过动态 IoU 阈值提出了一种自适应训练样本选择机制
  • 从图中可以看到:现有动态策略都只是让标签分配过程的一部分变成数据驱动(data-driven),其他部分仍然使用手工制作。而AutoAssign是完全数据驱动的,没有anchor、IoU、top-k 和 scale range
    在这里插入图片描述

3. AutoAssign

3.1 概述(Overview)

  • 整体流程:前面按FCOS的过程运行,得到许多的预测结果。对于每一个预测,把它对应的 所有尺度特征图 中的 边界框内 的 每一个位置都分别设置成正和负的,分别生成正权重图 w + w^+ w+和负权重图 w − w^- w,并用正负权重图来对预测结果进行精确调整
    在这里插入图片描述

3.2 中心加权(Center Weighting)

  • 中心加权(Center Weighting):不同类别的物体有不同的中心先验分布(比如长颈鹿的"中心"应该更靠近它的身子,而不是像人一样更靠近gt框的中心)。
    • 引入一个按类别划分的可以自学习参数的高斯型加权函数 G G G
      G ( d ⃗ ∣ μ ⃗ , σ ⃗ ) = e − ( d ⃗ − μ ⃗ ) 2 2 σ ⃗ 2 G(\vec d|\vec \mu,\vec \sigma)=e^{\frac{-(\vec d-\vec \mu)^2}{2\vec \sigma ^2}} G(d μ ,σ )=e2σ 2(d μ )2
      其中 d ⃗ \vec d d 表示object框内部某个位置相对于框中心的向量; μ ⃗ , σ ⃗ \vec \mu,\vec \sigma μ ,σ 是形状为 ( K , 2 ) (K,2) (K,2)的可学习参数( K K K是类别数目,这意味着每一个类别共享两个参数)
    • G G G应用在所有scale的FPN输出上,figure 3中所示的Center Prior就是先验 G G G。同时,用对应的下采样率(stride)对 d ⃗ \vec d d 进行归一化处理,最后得到center weighting

3.3 置信度加权(Confidence Weighting)

3.3.1 分类置信度(Classification confidence)

  • ImpObj分支:bb中肯定会有背景点,用这些点来进行预测会很容易出现false positive的情况,因此提出Implicit-Objectness分支,这个分支仅仅用于对前景和背景进行二元分类。由于不能确定一个bb中哪些点是背景点(bb是有标签的,但是其中中的每一个点是不带标签的),所以将它和classification 分支一起训练。可以用如下公式表示:
    P i ( c l s ∣ θ ) = P i ( c l s ∣ o b j , θ ) P i ( o b j ∣ θ ) \mathcal P_i(cls|\theta)=\mathcal P_i(cls|obj,\theta)\mathcal P_i(obj|\theta) Pi(clsθ)=Pi(clsobj,θ)Pi(objθ)
    其中 θ \theta θ是可学习参数,ImgObj分支用于产生 P i ( o b j ∣ θ ) \mathcal P_i(obj|\theta) Pi(objθ),也就是 i i i 这个点上有物体的概率

3.3.2 联合置信度建模(Joint confidence modeling)

  • 联合置信度建模:通常回归分支输出的是box的offset,但是offset不便于衡量回归置信度。为了衡量回归置信度,将定位损失 L i l o c ( θ ) \mathcal L^{loc}_i(\theta) Liloc(θ)用概率 P i ( l o c ∣ θ ) \mathcal P_i(loc|\theta) Pi(locθ)替换,这样便可以衡量回归的置信度了。再将 p i ( c l s ∣ θ ) \mathcal p_i(cls|\theta) pi(clsθ) P i ( l o c ∣ θ ) \mathcal P_i(loc|\theta) Pi(locθ)进行结合获得联合置信度 P i ( θ ) \mathcal P_i(\theta) Pi(θ),这个置信度对应的图就是Confidence Map(在figure 3 中)
    在这里插入图片描述

3.3.3 加权公式(Weighting function)

  • 加权公式:置信度加权公式 C ( P i ) C(\mathcal P_i) C(Pi)以指数形式给出,使用指数形式可以增强高置信度的位置的权重:
    C ( P i ) = e P i ( θ ) τ C(\mathcal P_i)=e^{\frac{\mathcal P_i(\theta)}{τ}} C(Pi)=eτPi(θ)
    其中 τ τ τ是温度系数,它控制高置信度和低置信度位置对正损失的贡献。最终对Confidence Map进行此操作,可以得到Confidence Weighting

3.4 权重图(Weight Maps)

3.4.1 正权重(Positive weights)

  • 正权重图:对于一个对象 i i i ,应该关注confidence weighting中置信度较高的位置,但是训练开始的时候网络参数是随机初始化的,因此刚开始的confidence weighting的置信度是不合理的,而center weighting在训练中始终是稳定的,所以将center weighting和confidence weighting结合起来,用如下公式生成正权重图 w + w^+ w+
    w i + = C ( P i ) G ( d ⃗ i ) ∑ j ∈ S n C ( P i ) G ( d ⃗ i ) w^+_i=\frac{C(\mathcal P_i)G(\vec d_i)}{\sum _{j\in S_n}C(\mathcal P_i)G(\vec d_i)} wi+=jSnC(Pi)G(d i)C(Pi)G(d i)

3.4.2 负权重(Negative weights)

  • 负权重图:负权重图是用来抑制背景点的。在每个位置的proposal和所有gt之间使用 IoU 来生成我们的负权重 w i − w_i^- wi
    w i − = 1 − f ( 1 1 − i o u i ) w_i^-=1-f(\frac{1}{1-iou_i}) wi=1f(1ioui1)
    其中 i o u i iou_i ioui表示位置 i ∈ S n i \in S_n iSn 上的proposal与所有gt之间最大的IoU,使用这个函数将权重归一化为 [ 0 , 1 ] [0,1] [0,1],如 i o u i = 0 iou_i=0 ioui=0,则 w i − = 1 w_i^-=1 wi=1,表示这个点是背景的权重为1

3.5 损失函数(Loss function)

  • 损失函数 L ( θ ) = − ∑ n − 1 N l o g ( ∑ i ∈ S n w i + P i + ) − ∑ j ∈ S l o g ( w j − P j − ) \mathcal L(\theta)=-\sum_{n-1}^Nlog(\sum_{i\in S_n}w^+_i\mathcal P_i^+)-\sum _{j\in S} log(w_j^-\mathcal P_j^-) L(θ)=n1Nlog(iSnwi+Pi+)jSlog(wjPj)
    其中, P − = 1 − P ( c l s ∣ θ ) \mathcal P^-=1-\mathcal P(cls|θ) P=1P(clsθ) n n n表示第 n n n个gt。为了确保至少有一个位置与物体 n n n相匹配,我们使用所有正权重的加权和来得到最终的正置信度。 S S S表示所有尺度上的所有位置。因此,对于边界框内的每一个位置,正负损失都将以不同的权重来计算。这与其他所有的标签分配策略有很大区别。为了处理负样本之间的不平衡问题,采用Focal Loss

4. 实验

  • center weighting 和 confidence weighting的有效性:
    在这里插入图片描述

  • center weighting方法比较:
    在这里插入图片描述
    在这里插入图片描述

  • confidence weighting方法比较:
    在这里插入图片描述

  • ImpObj分支的有效性:
    在这里插入图片描述
    在这里插入图片描述

  • 几个权重图的可视化:
    在这里插入图片描述
    在这里插入图片描述

  • Sota性能对比
    在这里插入图片描述
    在这里插入图片描述

问题

  1. 为什么把背景点采样为正样本会影响准确率?

    原文中这样说的,但是我不是很理解:“直观地说,物体上的采样点优于背景,因为这些位置容易产生更高的分类置信度(classification confidence)。另一方面,虽然 CNN 可以学习偏移量(offset),但是当背景被采样为正时,由于特征偏移造成的影响可能会降低性能

  2. 如何理解正负样本分配中的prior?

    prior指的 是 anchor的形状吗?或者是anchor在gt中的采样位置吗?

  3. 文章说为了抑制一些导致false positive的不良点,引入了ImpObj,但是感觉好像没啥用啊,它和普通图像分类结构没什么区别啊,而且它和classification branch一起进行训练(可能我需要看一下Implicit Objectness的论文,以前好像也碰到过),那就更没有必要引入这个分支了啊

    如果不使用这个分支,那么默认 P i ( o b j ∣ θ ) = 1 \mathcal P_i(obj|\theta)=1 Pi(objθ)=1,也就是假设位置 i i i 是有物体的,但是实际上有些位置上是没有物体的

  4. 只使用Confidence Weighting不行吗,看图好像可以啊
    在这里插入图片描述

  5. Figure 3里面的网络结构好奇怪啊,它基于FCOS,前面先输出定位和分类结果,后面才引入两个weighting模块,好奇怪

  6. 在联合置信度建模那里,用概率来代替回归损失是什么意思,这么做的依据是什么

  7. 负权重图生成那里,这句不是很明白

    由于bb内的位置总是倾向于预测高置信度的阳性,我们更喜欢用定位置信度来产生无偏的假阳性指标。矛盾的是,对于回归任务来说,阴性分类没有梯度,这意味着定位置信度不应该被进一步优化

  8. 作者如何处理scale和spatial的啊?

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/qq_44690067/article/details/125785247

智能推荐

mtk协议与qc协议_通用充电器快充协议QC2.0,QC3.0,MTKPE,PE+,充电识别_weixin_39826809的博客-程序员ITS301

通用USB充电器(快充)说明、快充的意义:USB得到广泛普及是因为其能够为外围设备供电。USB孕育于上世纪90年代中期,最初的目的是将外部设备(例如键盘、鼠标、打印机、外置驱动器等)连接至计算机。随着越来越多的各种便携式设备受到青睐,也同样需要为其供电。利用数据传输连接器供电的能力使得USE在便携式市场具有直接而显著的优势。在2007年第一个电池充电规范颁布之前,尝试为电池充电本质上是一种冒险一—...

Linux和Windows共享文件夹:/mnt目录下没有/hgfs的解决办法_树下等苹果的博客-程序员ITS301_linux共享文件夹hgfs没东西

一、问题linux与windows之间设立共享文件夹,但在/mnt文件夹下没有hgfs文件夹。

Android的Gradle技巧 2.4升级到较新版本的Gradle_曹纪乾的博客-程序员ITS301_将gradte包装器升级到4.8版本并重新导入ne

2.4升级到较新版本的Gradle问题您需要更改应用程序使用的Gradle版本。解生成新的包装器,或直接修改属性文件。讨论Android Studio包括Gradle发行版。当您创建新的Android应用程序时,IDE会自动为Unix生成gradlew脚本,并为Windows生成gradlew.bat文件。这些是“包装器”脚本,允许您使用Gradle,而无需手动安装它。相反

【youcans 的 OpenCV 例程200篇】133. 形态学重建之边界清除_YouCans的博客-程序员ITS301

本例是基于形态学重建的边界清除。(1)构造标记图像 F 作为膨胀重建的标记,标记图像的边框位置为 $I$,其它位置均为 1;(2)使用十字形结构元(MORPH_CROSS),对标记图像 F 进行膨胀恢复;(3)用原图像作为模板来约束重建,与膨胀恢复图像进行逻辑与;(4)重复图像 F 的重构运算,直到达到稳定收敛状态;(5)对收敛的标记图像 F 求补,得到边界清除的重建结果。

lwip协议的配置与裁剪_fhqlongteng的博客-程序员ITS301_tcp_snd_buf

1、前言 最近项目的上使用有线以太网功能,软件协议使用LWIP协议,操作系统使用Rt thread 3.1.3版本,硬件使用STM32F429+PHY LAN8720方式。这篇记录总结lwip的详细配置。2、配置文件种类 lwip的配置文件有lwipopts.h和opt.h两个头文件,其他中opt.h文件是lwip的默认配置文件,不需要修改此文件,lwipopts.h是用于配置lwip的文件,用户的对协议的配置请在这个文件中增加与修改,lwipopts.h文件中定义宏会覆...

HbuilderX打包--沉浸式全屏设置_百谷城南的博客-程序员ITS301_hbuilder 全屏

步骤:点击创建的5+APP项目点击 manifest.json文件选择源代码视图找到plus属性增加以下代码"statusbar" : { "immersed" : true }图例:

随便推点

抖音接口安全参数X-Ladon、X-Argus计算过程分析_hamy169的博客-程序员ITS301

抖音APP在每个请求的header中都加入了X-Ladon、X-Khronos、X-Gorgon、X-Argus四个安全参数,当url变动的时候,这几个参数也会跟着变化,下面是一个完整的请求报文::method: GET:path: /aweme/v1/user/profile/other/?sec_user_id=MS4wLjABAAAAQBGJwjwLS2x7fKNOIk0ikEcrmrSu1MfuXdNRm7JoSAryDsM_fiikEAs4o8ctzxBK&address_book_a

树莓派c语言modbus,树莓派串口利用modbus通信_Mr pretty的博客-程序员ITS301

1、安装sudo apt-get install libmodbus-dev2、搭建modbus环境https://blog.csdn.net/starelegant/article/details/727829463、编写测试程序https://blog.csdn.net/qq_23670601/article/details/82155378#%E5%88%9D%E8%AF%95%E5%8C%...

CSS高级技巧篇_何北木的博客-程序员ITS301_css高级

1. 鼠标样式cursor设置或检索在对象上移动的鼠标指针采用何种系统预定义的光标形状。 属性 属性值 作用 cursor: default 白箭头

利用Python爬取京东网商品信息, 实现可见即可爬_99Kies的博客-程序员ITS301

爬取京东商品信息 以爬取Macbook商品信息为例,通过Selenium实现可见即可爬的功能 关于Selenium的driver配置问题https://blog.csdn.net/qq_19381989/article/details/95893317一,分析页面1. 分析搜索方式 https://search.jd.com/Search?keyword...

判断两个字符串中出现的字符是否完全一样(顺序可以不同)_晚而未晚的博客-程序员ITS301

假设两个字符串中所含有的字符和个数都相同我们就叫这两个字符串匹配, 比如:abcda和adabc,由于出现的字符个数都是相同,只是顺序不同, 所以这两个字符串是匹配的。要求高效!

js 制作分页_weixin_30608503的博客-程序员ITS301

如图所示在html中调用方法getpage(7,1,1,'URL')1.page.js文件代码function getpage(count, countPage, pageIndex,url) { // count总条数,countPage分页数,pageIndex当前页码,url 拼接...

推荐文章

热门文章

相关标签