YOLO-MS 论文解读

paper:YOLO-MS: Rethinking Multi-Scale Representation Learning for Real-time Object Detection

official implementation:https://github.com/fishandwasabi/yolo-ms

背景

尽管已经取得了很好的性能,但识别不同尺度的物体仍是实时目标检测模型面临的一个基本挑战。这促使我们设计一个鲁棒的编码器架构来学习更具表达能力的多尺度特征表示。

本文的创新点

本文没有引入新的训练或优化技术,而是通过学习更丰富的多尺度特征表示来改进实时目标检测模型。这使得我们的方法与之前的工作有很大的不同。具体来说,我们从两个新的角度来思考编码多尺度特征的实时目标检测

  • 从局部的角度来看,我们设计了一个具有简单而有效的层次特征融合策略的MS-Block。受Res2Net的启发,我们在MS-Block中引入了多个分支来进行特征提取,但不同的是,我们使用了一个带有深度卷积的inverted bottleneck block,从而可以有效地使用大卷积核。
  • 从全局的角度来看,我们提出随着网络的深入,逐渐增加卷积核大小。我们在浅层中使用小卷积核来更高效地处理高分辨率的特征。另一方面,我们在深层采用大卷积核来捕获更大范围的信息。

方法介绍

Multi-Scale Building Block Design

受Res2Net(具体介绍见https://blog.csdn.net/ooooocj/article/details/122430069)的启发,本文提出了一种新的具有层次特征融合策略的block,称为MS-Block,以提高实时目标检测模型在保持推理速度的同时提取多尺度特征的能力。

具体结构如图2(c)所示。假设 \(X\in R^{H\times W\times C}\) 为输入特征,经过1x1卷积后 \(X\) 的通道数增加到了 \(n\times C\)。然后我们将 \(X\) 沿通道分成 \(n\) 组,记为 \(\{X_{i}\},i\in 1,2,3...,n\)。为了降低计算成本 \(n\) 取3。除了 \(X_{1}\) 外,其它每组都经过一个inverted bottleneck layer,表示为 \(IB_{k\times k}(\cdot)\),其中 \(k\) 是kernel size,最终得到 \(Y_{i}\)。数学表示如下

根据这个公式,我们不将反向瓶颈层连接到 \(X_{1}\),而是让它作为一个cross-stage connection,并保留来自前一层的信息。最后,我们将所有的输出拼接起来,并用一个1×1卷积来进行所有splits之间的交互,其中每个都编码了不同尺度的特征。这个1x1卷积也在网络更深时用来调整通道数。

Heterogeneous Kernel Selection Protocol

除了building block的设计之外,作者还从宏观的角度深入研究了卷积的使用。以往的实时目标检测模型在不同的stage采用kernel大小相同的卷积,但作者认为这不是提取多尺度语义信息的最佳选择。 

在金字塔结构中,从浅层阶段中提取的高分辨率特征通常用于捕获细粒度的语义,并用于检测小目标。相反,来自网络较深阶段的低分辨率特征被用来捕获高级语义,并用于检测大目标。如果我们在所有的stage统一都采用小核卷积,深层的有效感受野(Effective Receptive Field, ERF)是有限的,影响了大目标的检测性能。在每个stage加入大核卷积可以解决这个问题。但是,具有大ERF的大核可以编码更广泛的区域,这增加了在小目标区域之外包含污染信息的概率,并降低了推理速度。

因此,本文提出在不同的阶段利用不同大小的卷积来帮助捕获更丰富的多尺度特征。具体来说,我们在第一个stage采用最小的卷积核,在最后一个stage采用最大的卷积核,在中间的stage中逐步增加卷积核的大小。这个策略可以同时提取fine-grained和coarse-grained语义信息,增强了编码器的多尺度特征表示能力。

如图3所示,encoder中从浅层到深层的 \(k\) 值分别为3、5、7、9。作者称之为Heterogeneous Kernel Selection(HKS)Protocal。HKS方案能够增加深层的感受野,而不会对浅层有任何影响。此外,HKS不仅有助于编码更丰富的多尺度特征,还保证了高效的推理。

如表1所示,将大核卷积应用于高分辨率特征的计算成本很高。但HKS方案在低分辨率特征上采用了大核卷积,因此与在所有阶段使用大核卷积相比,大大降低了计算成本。实践中我们发现,使用HKS方案的YOLO-MS实现了与仅使用3×3深度卷积的网络几乎相同的推理速度。

 

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

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

相关文章

并发容器之CopyOnWrite

CopyOnWrite容器 什么是CopyOnWrite容器呢?CopyOnWrite容器是一个写时复制的容器。在向容器中添加元素时,不会直接向当前容器中添加,而是将当前容器进行copy,复制出一个新的容器,然后往新的容器中添加元素,…

3.24总结

P - 节拍 Zty是一个总是充满热情的人。他想解决世界上各种困难的ACM问题。而且他有一个习惯,他不喜欢解决 一个比他已经解决的问题容易的问题。现在一芬飞给他n个难度问题,在解决另一个问题后告诉他解决的相对时间。 你应该帮助zty找到一个解决问题的顺序…

thymeleaf模板公共块导入不报错,能显示文字但无法显示div的问题解决办法!

本篇文章主要讲解thymeleaf模板公共块导入时,没有任何报错信息,但是进行排查后发现能够显示文字,改成html标签后就无法显示div的问题解决办法! 日期:2024年3月24日 作者:任聪聪 问题现象: 说明:代码好好的,引入的路径也是对的,可以显示文字,但不可以div,自定义公共…

2023年12月青少年软件编程C语言二级真题答案——持续更新.....

一、统计指定范围里的数 给定一个数的序列S,以及一个区间[L, R], 求序列中介于该区间的数的个数,即序列中大于等于L且小于等于R的数的个数。 时间限制:1000 内存限制:65536 输入 第一行1个整数n、,分别表示序列的长度。(0 < n ≤ 10000) 第二行n个正整数,表示序列里…

【Mysql】硬盘性能压测(Sysbench工具)

1、IOPS和吞吐量介绍 IOPS&#xff08;每秒输入/输出操作数&#xff09;&#xff1a;是衡量存储设备每秒能够执行的输入/输出操作的数量。对于数据库等需要频繁读写的应用程序而言&#xff0c;IOPS 是一个关键的性能指标。更高的 IOPS 意味着存储设备能够处理更多的读写请求&am…

检索增强生成(RAG)技术:实现流程、作用及应用案例

一. RAG简介 在自然语言处理&#xff08;NLP&#xff09;领域中&#xff0c;检索增强生成&#xff08;Retrieval-Augmented Generation, RAG&#xff09;技术巧妙地结合了信息检索与神经网络生成模型的力量&#xff0c;通过在生成过程中引入相关的外部信息&#xff0c;实现了在…

工作思考|研发环境好好的,怎么上线就出问题了?

场景再现 那是一个夜黑风高的晚上&#xff0c;某个版本迭代经过了完备的测试&#xff0c;正准备上线。研发同事A开完了上线评审后&#xff0c;信心满满地对运维同事B说&#xff1a;“开冲&#xff01;” 几分钟后&#xff0c;同事B发了条消息过来&#xff0c;看着抖动的头像&…

实验报告。。。。。

机动车 public class User {public static void main(String[] args) {Vehicle v new Vehicle();System.out.println("设置功率大小&#xff1a;");v.setPower(36);System.out.println("功率大小为&#xff1a;" v.getPower() "kw");v.speed…

【WEEK4】 【DAY5】AJAX - Part Two【English Version】

2024.3.22 Friday Following the previous article 【WEEK4】 【DAY4】AJAX - Part One【English Version】 Contents 8.4. Ajax Asynchronous Data Loading8.4.1. Create User.java8.4.2. Add lombok and jackson support in pom.xml8.4.3. Change Tomcat Settings8.4.4. Mo…

谷粒商城 - 前端基础

1.前端技术栈 2.ES6 2.1简介 2.2 let 与 const <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>Doc…

自动驾驶感知新范式——BEV感知经典论文总结和对比(一)

自动驾驶感知新范式——BEV感知经典论文总结和对比&#xff08;一&#xff09; 博主之前的博客大多围绕自动驾驶视觉感知中的视觉深度估计&#xff08;depth estimation&#xff09;展开&#xff0c;包括单目针孔、单目鱼眼、环视针孔、环视鱼眼等&#xff0c;目标是只依赖于视…

Python爬虫之requests库

1、准备工作 pip install requests 2、实例 urllib库中的urlopen方法实际上就是以GET方式请求网页&#xff0c;requests库中相应的方法就是get方法。 import requestsr requests.get(https://www.baidu.com/) print(type(r)) # <class requests.models.Response> 响…

YOLOv8的FPS计算代码

YOLOv8的FPS计算代码 目前是默认加载到0号GPU中&#xff0c;如果你想加载到指定GPU中&#xff0c;请手动在加载模型的时候设置 device编号 代码 import osfrom ultralytics import YOLOdef load_model(model_path):model YOLO(model_path)print(查看当前模型&#xff1a;, …

Java直接内存

直接内存如何使用 直接上代码&#xff0c;代码中有注释【对直接内存的分配以及释放】进行说明。 package cn.ordinary.util.io.file;import java.io.*; import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; import java.nio.*; import ja…

js一些底层

简介: JavaScript 是一种高级编程语言&#xff0c;通常在网页开发中用于前端和后端开发。JavaScript 的底层实现是浏览器或服务器上的 JavaScript 引擎。不同的引擎可能有不同的底层实现&#xff0c;但它们都有一个共同的目标&#xff0c;即执行 JavaScript 代码。 JavaScript …

MySQL中什么是分区表?列举几个适合使用分区表的场景。

MySQL中的分区表是一种数据库设计技术&#xff0c;它将一个大表物理地分割成多个较小的部分&#xff0c;这些部分被称为分区。虽然从逻辑上看&#xff0c;分区表仍然像一个单独的表&#xff0c;但在物理层面&#xff0c;每个分区都是存储在一个独立的文件上&#xff0c;可以位于…

ARM的三个按键实验

main.c #include "key_inc.h"//封装延时函数void delay(int ms){int i,j;for(i0;i<ms;i){for(j0;j<2000;j){}}}int main(){//按键中断初始化key1_it_config();key2_it_config();key3_it_config();while(1){printf("in main pro\n");delay(1000);}re…

Android中的onConfigurationChanged的使用

一.什么时候调用&#xff1a; 设备配置发生变化的时候调用&#xff0c;比如&#xff1a;内外屏切换、屏幕方向&#xff08;orientation&#xff09;、键盘状态&#xff08;keyboard&#xff09;、语言环境&#xff08;locale&#xff09;、屏幕布局&#xff08;screenlayout&a…

[金三银四] 操作系统上下文切换系列

图源&#xff1a; https://zhuanlan.zhihu.com/p/540717796 文章目录 2.11 cpu 的上下文切换2.12 协程的上下文切换2.13 线程的上下文切换2.14 进程的上下文切换2.15 中断上下文切换2.16 什么时候会发生进程的上下文切换2.17 什么时候会发生线程的上下文切换2.18 什么时候会发生…

Spring AOP失效的场景

Spring AOP其实是通过动态代理实现的,那么今天要聊的这个问题就是设想什么情况不能使用动态代理,这个问题其实跟Spring事务失效的场景差不多 内部类调用 首先就是类内部的调用&#xff0c;比如一些私有方法调用&#xff0c;内部类调用&#xff0c;以及同一个类中方法的自调用…