【目标检测】34、FSAF: Feature Selective Anchor-Free Module for Single-Shot Object Detection

2023-11-19

在这里插入图片描述

论文:Feature Selective Anchor-Free Module for Single-Shot Object Detection

代码:https://github.com/open-mmlab/mmdetection/tree/master/configs/fsaf

出处:CVPR2019

贡献:

  • 提出了一种根据 instance content 来自动选择最优尺度的模块 FSAF
  • FSAF 能够和单阶段 anchor-based 方法联合使用,两者的 loss 加权求和,共同指导模型训练

一、背景

在这里插入图片描述
目标检测方法面临的两个主要问题是:

  • 使用手工选择的超参数如尺寸、anchor、IoU 阈值等
  • 基于 overlap 来确定预定义 anchor 的去留和正负,这肯定不是最优的方式(如图 2)

FSAF 的 motivation:

  • 让每个实例都能落入最适合它的尺度的特征图上(这也表明了前提:该模块不能有 anchor)

在这里插入图片描述

二、方法

FSAF 总体概括:

  • 在每个尺度的特征图后面都接一个 anchor-free branch,每个实例会被分配到对应的最优层上去
  • 训练时,能够动态的给每个实例选择其最合适的尺度,然后该尺度的特征负责检测该实例
  • 推理时,FSAF 模型能够独立或和 anchor-based branch 联合使用

在这里插入图片描述

如图 4 展示了 RetinaNet+FSAF 的结构,RetinaNet 的 backbone 和其他尺度的层被折叠了,只展示了使用的三层,每层后面都分别使用了 cls 和 reg 子网络。

FSAF 如何在其中使用:

  • 如图 4 所示,有两个 anchor-free branch,分别实现分类和回归的预测
  • cls branch:1 个 3x3xK 的卷积,后面跟 sigmoid
  • reg branch:1个 3x3x4 的卷积,后面跟 ReLU

在这里插入图片描述

2.1 Ground-truth and loss

类似 GARPN

既然 FSAF 有两个分支,分类和回归,则需要给这两个分支构建对应的真值,来指导训练。

1、分类分支:

分类分支的 loss:Focal loss, α = 0.25 \alpha=0.25 α=0.25, γ = 2.0 \gamma=2.0 γ=2.0

分类分支构造的真值:K 个 map,每个 map 表示该类别的 mask 特征

分类分支的真值如何构造:真值是一个 mask 特征图,每个位置的像素值表示该位置为 positive、ignore、negative

将一个 instance 在某个层的真值 map 从 3 个方面来处理成最终的 gt mask:

  • effective box region:是 positive region,真值label 框的 0.2 倍 box 内为 positive,图 5 中白色区域,该区域的值为 1,只对effective region 进行训练,且如果两个目标的 effective 区域重合了,小的实例有更高的置信度。
  • Ignoring box region:是忽略的区域,图 5 中灰色区域,真值label 框的 0.2 倍 box 内为 ignore,此处梯度不回传
  • Negative box region:其他都为 negative box region,图 5 中黑色区域

2、回归分支

回归分支的 loss:IoU loss

回归分支的真值:4 个 offsets maps

回归分支只会影响 offset maps 上的 effective box region,对于每个位置 ( i , j ) (i, j) (i,j),对应的真值为该位置到该层对应的框的上、下、左、右的距离。

在这里插入图片描述

2.2 Online Feature Selection

FSAF 的设计是能够自己选择最优的层级,那么如何寻找最优的层级 P l P_l Pl 呢?

答案是:使用 instance content(而非 anchor-based 方法中使用的 box 大小)

给定一个 instance I I I,其在 P l P_l Pl 层上的分类和回归 loss 分别为 L F L L_{FL} LFL L I o U L_{IoU} LIoU,这两者是对所有 effective box region 求和后得到的:

在这里插入图片描述

如何选择呢?如图 6 所示

计算了上述公式并得到 loss 之后,选择 loss 最小的层 P l ∗ P_{l*} Pl 来作为最优层,对该 instance 进行预测。

online feature selection:

在这里插入图片描述

其他手动选择的方法( l 0 = 5 l_0=5 l0=5):

在这里插入图片描述

在这里插入图片描述

2.3 将 RetinaNet 和 FSAF 联合后如何训练和测试

训练阶段:完整的 loss 是由 anchor-based 和 anchor-free 部分共同组成的, L = L a b + λ ( L c l s a f + L r e g a f ) L = L^{ab}+\lambda(L_{cls}^{af}+L_{reg}^{af}) L=Lab+λ(Lclsaf+Lregaf),且设置 λ = 0.5 \lambda=0.5 λ=0.5

推理阶段:在每个 level 中选择前 1k 个框,保留大于 0.05 的框,和 anchor-based 得到的结果混合起来,使用阈值为 0.5 的 NMS 过滤,即为最终结果

三、效果

1、Anchor-free branches 的效果

表 1 的最后一行比第一行提高了约 1.5%AP

如图 7 所示,说明了 FSAF 模块能够更好的处理有挑战的实力,比如很细或者不能被很好的包裹的目标。

在这里插入图片描述

在这里插入图片描述

2、Online feature selection 的效果

下表也对比了使用手动选择特征图和自动选择特征层的效果,从最后两行来看,提升了约 1.1%AP。

在这里插入图片描述

3、最优层是如何选择的
在这里插入图片描述

4、FSAF 模块的鲁棒性

在这里插入图片描述

5、和 SOTA 的对比

Ours:RetinaNet + FSAF
在这里插入图片描述

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

【目标检测】34、FSAF: Feature Selective Anchor-Free Module for Single-Shot Object Detection 的相关文章

随机推荐

  • OpenCL2.0特性之SVM

    在OpenCL2 0中 增加了SVM shared virtual memory 的特性 在开始讲解SVM之前 我们先用图片来看下OpenCL1 2中主机与设备端的地址空间 图1 OpenCL1 2中主机与设备端地址空间 从图1可以看到 主
  • 01 C++Primer-基本内置类型

    01 C Primer 基本内置类型 从这篇博客开始 作者开始总结C Primer的知识点以及疑难点 希望能加深自己的印象 也能够给大家带来一定的帮助 mermaid svg YHaqJho6PUshJ8nL label font fami
  • 【FPGA】Xilinx vivado IP核许可申请——以MIPI CSI-2为例

    1 先进入xilinx官网 复制这个链接直接进入ip申请的地址 http www xilinx com getlicense 打开链接后需要登录 没账户的那就需要注册 点击红色方框内的蓝色字体即可注册 2 注册完成后 可以选择相应的IP核进
  • 重学前端——npm yarn pnpm

    npm yarn pnpm npm NPM 是最初由 Node js 项目开发的 JavaScript 包管理器 它使开发人员能够更轻松地在不同项目之间共享代码 并在自己的项目中使用其他人的代码 安装node js会带npm npm get
  • 产品经理 五 --实战需求分析

    每几天一篇 业界学习知识分享 请关注 如有同感请加vip阅读 很多时候 懂得东西都会觉得很普通 但是努力去挤出成果时候 面对无休止的压力 我们能做的就是每天都把自己当成一个创业者去做 有压力 才有成长 这个是所有在职人的必经之路 产品经理需
  • 实现正在生成中的案例,并带有点点点动态效果

    生成中后边带点点点动态效果 如图 html
  • impdp导入数据 ORA-31684错误

    在使用expdp导出数据时没有任何报错 但在使用impdp导入时报ORA 31684错误 导入语法 impdp slwebtest slwebtest directory slwebtest dumpfile slwebtest1010 d
  • 【Webpack-2】loader 和 plugin 的区别是什么?

    不同的作用 Loader直译为 加载器 Webpack将一切文件视为模块 但是webpack原生是只能解析js文件 如果想将其他文件也打包的话 就会用到loader 所以Loader的作用是让webpack拥有了加载和解析非JavaScri
  • Mysql多表联查,查询结果出现重复的原因和解决方法

    1 背景 根据业务需要 需要使用如下的命令进行多表联查 select a id as a id b id as b id b protocol as protocol b priority as priority from a b left
  • Ubuntu提示Temporary failure in name resolution

    解决方法1 重启网络服务 service network manager restart 解决方法2 定义域名解析服务器ip sudo vi etc resolv conf 在里面添加下面两行 nameserver 1 1 1 1 name
  • ubuntu禁止自动更新内核

    总结了三处需要改的地方 1 查看自己电脑的内核 dpkg get selections grep linux 得到如下信息 查看正在使用的内核 uname a 得到如下信息 禁止更新内核 sudo apt mark hold linux i
  • 【深度学习】模型评价指标

    一 分类任务 分类任务一般有二分类 多分类和多标签分类 多分类 表示分类任务中有多个类别 但是对于每个样本有且仅有一个标签 例如一张动物图片 它只可能是猫 狗 虎等中的一种标签 二分类特指分类任务中只有两个类别 多标签 一个样本可以有多个标
  • [思考进阶]02 如何进行认知升级?

    除了要提升自己的技术能力 思维的学习和成长也非常非常重要 特推出此 思考进阶 系列 进行刻意练习 从而提升自己的认知 最近在看东野的 无名之町 这本书写于2021年 日本正值疫情 书中也有大幅疫情相关的文字描述 疫情正影响着一切 后悔的一件
  • Spring ioc容器创建过程(1)BeanFactory初始化

    文章目录 一 ApplicationContext 二 常见的ApplicationContext 三 ioc容器的初始化 1 AbstractApplicationContext prepareRefresh 2 AbstractAppl
  • C# GC原理

    在 NET框架包含一个托管堆 所有的 NET语言在分配引用类型对象都要使用它 像值类型这样的轻量级别对象始终分配在栈中 但是所有的类实例和数组都被生成在一个内存池中 这个内存池就是托管堆 垃圾收集器的托管的基本算法很简单 1 将所有的托管内
  • 老毛桃 安装linux双系统,安装CentOS 7双系统(二)——安装过程step by step

    上一篇中我们确定了分区方案之后 就可以开始安装双系统啦 前期准备 重点 装系统之前一定要准备一个U盘启动盘 出问题时候可以马上进PE恢复 血的教训 我建议对磁盘进行分区 重建MBR等操作都在PE里面完成 制作U盘启动工具可以使用大白菜 大白
  • 【DBeaver】介绍DBeaver这一款强大的数据库连接工具

    近期在工作中需要使用到国产的达梦数据库 我们使用DBeaver作为数据库连接工具 DBeaver是一款很强大的数据库连接工具 其适用于所有的数据库 支持所有流行的关系数据库 MySQL PostgreSQL SQLite Oracle DB
  • UI设计师有钱途还是平面设计师或者是网页设计师呢?

    UI设计 平面设计和网页设计 哪个前景更好呢 其实ui和网页设计都属于平面设计里的一个分支 举个例子 设计一份饭店的点菜单 一样的图案 印刷出来是传统平面设计 放网站上是网页设计 放手机上显示是UI 其实都是一样的平面美术设计 那么有人要问
  • Vscode

    文章目录 点击左下角的用户或者设置的 Sign in to Sync Setting 使用GitHub或者Microsoft账户登录 就能开启同步功能
  • 【目标检测】34、FSAF: Feature Selective Anchor-Free Module for Single-Shot Object Detection

    文章目录 一 背景 二 方法 2 1 Ground truth and loss 2 2 Online Feature Selection 2 3 将 RetinaNet 和 FSAF 联合后如何训练和测试 三 效果 论文 Feature