ASFF Learning Spatial Fusion for Single-Shot Object Detection 论文学习

1. 解决了什么问题?

目标检测取得了显著成绩,但是检测不同尺度的目标仍然是一个挑战。金字塔或多层级特征是解决目标检测中尺度变化的常用手段。但对于单阶段目标检测器而言,各特征尺度之间不一致性制约了算法的表现。与图像金字塔相比,特征金字塔在各尺度间是不一致的,要用到启发式的特征选取策略:大目标通常与高层级特征图有关,而小目标则和低层级特征图有关系。当某层级的特征图上的目标被分配为正样本,其它层级特征图的相应区域就会被看作为背景。这种不一致性会对梯度计算造成影响,使特征金字塔的效力降低。

2. 提出了什么方法?

ASFF 解决单阶段目标检测器中特征金字塔存在的不一致性。ASFF 使网络学习过滤掉其它层级有冲突的信息,只保留有用的信息。对于某层级特征,首先整合其它层级的特征,缩放到相同大小的分辨率,然后进行训练,找到最佳的融合方案。在每个空间位置上,自适应地融合不同层级的特征。一些特征因为它们携带了冲突信息,就会被滤掉;另一些特征因为信息更具判别度则发挥更加重要的作用。

2.1 Baseline

采用了 YOLOv3 框架,包含了 DarkNet-53 主干网络,以及三个层级的 FPN。采用了诸多 tricks 来提升性能,如 mixup 数据增强、余弦退火学习率机制,以及 Sync-BN。此外,使用了一个 anchor-free 分支,与 anchor-based 分支协同训练。在原来的 smooth L1 损失基础上,增加了 IOU 损失函数,更好地进行边框回归。

2.2 ASFF

之前的方法使用 element-wise 求和或 concat 操作来整合多层级特征,本方法则自适应地学习各尺度特征图在融合时的空间权重。包括了两个步骤:恒等缩放、自适应融合。
在这里插入图片描述

2.2.1 特征缩放

将第 l ∈ { 1 , 2 , 3 } l\in\lbrace1,2,3\rbrace l{1,2,3}层级的特征记做 x l \mathbf{x}^l xl。对于层级 l l l,将其它层级 n ( n ≠ l ) n(n\neq l) n(n=l)的特征 x n \mathbf{x}^n xn缩放至与 x l \mathbf{x}^l xl相同的大小。因为 YOLOv3 三个层级的分辨率和通道数都不相同,因此要修改每个尺度的上采样和下采样策略。对于上采样,首先用一个 1 × 1 1\times 1 1×1卷积来压缩特征通道数,与层级 l l l通道数相等,然后通过插值增大分辨率。对于 1 / 2 1/2 1/2比率的下采样,使用步长为 2 2 2 3 × 3 3\times 3 3×3卷积层,同时调整通道数和分辨率(对于尺度比率为 1 / 4 1/4 1/4的情况,在步长为 2 2 2的卷积层前增加一个步长为 2 2 2的最大池化层)。

2.2.2 自适应融合

在由层级 n n n缩放到 l l l的特征图上,位置 ( i , j ) (i,j) (i,j)的特征向量记做 x i j n → l \mathbf{x}_{ij}^{n\rightarrow l} xijnl。融合相应层级 l l l的特征:
y i j l = α i j l ⋅ x i j 1 → l + β i j l ⋅ x i j 2 → l + γ i j l ⋅ x i j 3 → l \mathbf{y}_{ij}^l = \alpha_{ij}^l \cdot \mathbf{x}_{ij}^{1\rightarrow l} + \beta_{ij}^l \cdot \mathbf{x}_{ij}^{2\rightarrow l} + \gamma_{ij}^l \cdot \mathbf{x}_{ij}^{3\rightarrow l} yijl=αijlxij1l+βijlxij2l+γijlxij3l
y i j l \mathbf{y}_{ij}^l yijl是输出特征图 y l \mathbf{y}^l yl上第 ( i , j ) (i,j) (i,j)个向量。 α i j l , β i j l , γ i j l \alpha_{ij}^l,\beta_{ij}^l,\gamma_{ij}^l αijl,βijl,γijl是特征图上三个层级相对于层级 l l l的空间权重,由网络自适应地学习得到。 α i j l , β i j l , γ i j l \alpha_{ij}^l,\beta_{ij}^l,\gamma_{ij}^l αijl,βijl,γijl可以是简单的标量变量,在所有通道之间共享。要求 α i j l + β i j l + γ i j l = 1 \alpha_{ij}^l+\beta_{ij}^l+\gamma_{ij}^l=1 αijl+βijl+γijl=1 α i j l , β i j l , γ i j l ∈ [ 0 , 1 ] \alpha_{ij}^l,\beta_{ij}^l,\gamma_{ij}^l\in \left[0,1\right] αijl,βijl,γijl[0,1]
α i j l = e λ α i j l e λ α i j l + e λ β i j l + e λ γ i j l \alpha_{ij}^l=\frac{e^{\lambda_{\alpha_{ij}}^l}}{e^{\lambda_{\alpha_{ij}}^l}+e^{\lambda_{\beta_{ij}}^l}+e^{\lambda_{\gamma_{ij}}^l}} αijl=eλαijl+eλβijl+eλγijleλαijl

这里 α i j l , β i j l , γ i j l \alpha_{ij}^l,\beta_{ij}^l,\gamma_{ij}^l αijl,βijl,γijl用 softmax 函数计算, λ α i j l , λ β i j l , λ γ i j l \lambda_{\alpha_{ij}}^l,\lambda_{\beta_{ij}}^l,\lambda_{\gamma_{ij}}^l λαijl,λβijl,λγijl是控制参数。使用 1 × 1 1\times 1 1×1卷积层分别从 x 1 → l , x 2 → l , x 3 → l \mathbf{x}^{1\rightarrow l},\mathbf{x}^{2\rightarrow l},\mathbf{x}^{3\rightarrow l} x1l,x2l,x3l计算权重标量图 λ α i j l , λ β i j l , λ γ i j l \lambda_{\alpha_{ij}}^l,\lambda_{\beta_{ij}}^l,\lambda_{\gamma_{ij}}^l λαijl,λβijl,λγijl。因而可用反向传播学习。于是,各尺度层级的特征都可自适应地融合起来。然后用 { y 1 , y 2 , y 3 } \lbrace\mathbf{y}^1,\mathbf{y}^2,\mathbf{y}^3\rbrace {y1,y2,y3}用于 YOLOv3 后续的检测。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/6387.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

VMware Workstation 18 Tech Preview - 增强的 Windows 11 虚拟机安全性

VMware Workstation 18 Tech Preview - 增强的 Windows 11 虚拟机安全性 VMware Workstation Tech Preview 2023 请访问原文链接:https://sysin.org/blog/vmware-workstation-18/,查看最新版。原创作品,转载请保留出处。 作者主页&#xf…

Pytorch个人学习记录总结 07

目录 神经网络-非线性激活 神经网络-线形层及其他层介绍 神经网络-非线性激活 官方文档地址:torch.nn — PyTorch 2.0 documentation 常用的:Sigmoid、ReLU、LeakyReLU等。 作用:为模型引入非线性特征,这样才能在训练过程中…

[k8s] command和args

k8s中的command和args可以覆盖docker镜像中的entrypoint和cmd。其中,k8s-command可以覆盖docker-entrypoint,k8s-args可以覆盖docker-cmd。参考Difference between Docker ENTRYPOINT and Kubernetes container spec COMMAND? 了解一下entrypoint的意义…

Spring 更简单的读取和存储对象

目录 1.存储 Bean 对象 1.1 前置⼯作:配置扫描路径 1.2 添加注解存储 Bean 对象 1.2.1 Controller(控制器存储) 1.2.2 Service(服务存储) 1.2.3 Repository(仓库存储) 1.2.4 Component&a…

C++---string

String C语言中的字符串和C中的string类标准库中的string类string类的常用接口string类对象的常见构造string类对象的容量操作string类对象的访问及遍历操作 C语言中的字符串和C中的string类 在C语言中,字符串是一个字符数组,它以空字符\0结尾&#xff…

【数据结构】朴素模式匹配 KMP算法

🎇【数据结构】朴素模式匹配 & KMP 算法🎇 🌈 自在飞花轻似梦,无边丝雨细如愁 🌈 🌟 正式开始学习数据结构啦~此专栏作为学习过程中的记录🌟 文章目录 🎇【数据结构】朴素模式匹配 & K…

【数据架构】Data Fabric 架构是实现数据管理和集成现代化的关键

D&A 领导者应该了解数据编织架构的关键支柱,以实现机器支持的数据集成。 在日益多样化、分布式和复杂的环境中,数据管理敏捷性已成为组织的任务关键优先事项。为了减少人为错误和总体成本,数据和分析 (D&A) 领导者需要超越传统的数据…

MyBatis操作数据库

1.MyBatis是什么? MyBatis 是⼀款优秀的持久层框架,它⽀持⾃定义 SQL、存储过程以及⾼级映射。MyBatis 去除了⼏乎所有的 JDBC 代码以及设置参数和获取结果集的⼯作。MyBatis 可以通过简单的 XML 或注解来配置和映射原始类型、接⼝和 Java POJO&#xf…

【机器学习】吃瓜教程 | 西瓜书 + 南瓜书 (1)

文章目录 一、绪论1、什么是机器学习?2、基本术语3、假设空间4、归纳偏好5、发展历程 二、模型评估与选择A、一种训练集一种算法2.1 经验误差 与 过拟合2.2 评估方法a) 留出法b) 交叉验证法c) 自助法d) 调参与最终模型 2.3 性能度量a) 错误率与精度b) 查准率、查全率…

matlab dot()函数求矩阵内积,三维 ,多维 详解

matlab dot()函数求矩阵内积,三维 ,多维 详解 Cdot(A,b,X),这个参数X 只能取1,或者2。1 表示按列,2表示按行,如果没有参数。默认按列。 1)按列优先计算 Cdot(A,B)dot(A,B,1)[a1*b1a4*b4 ,a2*b2a5*b5 ,a…

视频拼接得AI三维生成方案-开端(一)

想使用二维得图像生成三维得空间图像,英伟达有完整得方案,开源,但是三维拼接不一样,只需要二维,并且要实时,如何生成是我每天都在思考得东西。 cnn 提取特征器和自编码 在训练细胞神经网络时,问…

大数据分析案例-基于LightGBM算法构建乳腺癌分类预测模型

🤵‍♂️ 个人主页:艾派森的个人主页 ✍🏻作者简介:Python学习者 🐋 希望大家多多支持,我们一起进步!😄 如果文章对你有帮助的话, 欢迎评论 💬点赞&#x1f4…

jmeter软件测试实验(附源码以及配置)

jmeter介绍 JMeter是一个开源的性能测试工具,由Apache软件基金会开发和维护。它主要用于对Web应用程序、Web服务、数据库和其他类型的服务进行性能测试。JMeter最初是为测试Web应用程序而设计的,但现在已经扩展到支持更广泛的应用场景。 JMeter 可对服务…

AcWing 244. 谜一样的牛—树状数组、二分

题目链接 AcWing 244. 谜一样的牛 题目描述 分析 这道题挺巧妙的,感觉树状数组方面的题就是比较难想,先分析一下样例,样例中每头牛前面比自己低的牛的数量分别为 0 1 2 1 0牛的高度是1~n的排列,如何分析出每头牛的高度呢&…

API Testing 一个基于 YAML 文件的开源接口测试工具

目录 前言: 如何使用? 本地模式 服务端模式 文件格式 后续计划 前言: API Testing 是一个基于 YAML 文件的开源接口测试工具,它可以帮助开发者快速地进行接口测试。 在选择工具时,可以从很多方面进行考量、对比…

【历史上的今天】7 月 20 日:人类登上月球;数据仓库之父诞生;Mac OS X Lion 发布

整理 | 王启隆 透过「历史上的今天」,从过去看未来,从现在亦可以改变未来。 今天是 2023 年 7 月 20 日,在 2005 年的今天,时任微软全球副总裁的李开复加盟谷歌担任谷歌全球副总裁及中国区总裁。谷歌公司在发布聘请李开复消息的同…

LiveNVR监控流媒体Onvif/RTSP功能-拉转Onvif/RTSP/RTMP/FLV/HLS直播流流媒体服务视频广场页面集成视频播放集成说明

LiveNVR拉转Onvif/RTSP/RTMP/FLV/HLS直播流流媒体服务视频广场页面集成视频播放集成说明 1、视频页面集成1.1、关闭接口鉴权1.2、视频广场页面集成1.2.1、隐藏菜单栏1.2.2、隐藏播放页面分享连接 1.3、其它页面集成 2、播放分享页面集成2.1、获取 iframe 代码2.2、html 集成ifr…

ThreadPoolExecutor自定义线程池|拒绝策略|线程工厂|统一捕获异常

线程池的7大参数含义介绍 corePoolSize:池中一直保持的线程的数量。 maximumPoolSize:池中允许的最大的线程数。 keepAliveTime:当线程数大于核心线程数的时候,线程在最大多长时间没有接到新任务就会终止释放, 最终…

Python 集合 union()函数使用详解,Python合并集合

「作者主页」:士别三日wyx 「作者简介」:CSDN top100、阿里云博客专家、华为云享专家、网络安全领域优质创作者 「推荐专栏」:小白零基础《Python入门到精通》 union函数使用详解 1、合并多个集合2、合并其他类型2.1、合并字符串2.2、合并列表…

Linux超详细的了解

文章目录 前言Linux的简介不同应用领域的主流操作系统Linux系统历史Linux系统各版本 Linux的安装安装方式介绍安装Linux网卡设置安装SSH连接工具finalShell连接虚拟机Linux和Windows目录结构对比Linux目录介绍 Linux常用命令Linux命令初体验文件目录命令ls命令cd命令cat命令mor…