multi-scale training多尺度训练

news2024/11/15 8:14:51

文章目录

  • 背景
  • 参考1:[输入不同长度的向量,输出相同长度](https://www.zhihu.com/question/569406523/answer/2780168200):
  • 参考2:[多种尺寸的图像数据训练没有全连接层的卷积神经网络模型](https://www.zhihu.com/question/533481647)
  • 参考3:[目标检测里的多尺度技术](https://zhuanlan.zhihu.com/p/266887169):
  • 参考4:[SPP-Net:精进特征提取 + 开拓多尺度训练](https://blog.csdn.net/Abandon_first/article/details/117021640)
  • 个人总结
  • 参考

背景

在阅读《Swin Transformer using shifted windows》 时,有一段话:we consider four typical object detection frameworks: Cascade Mask R-CNN [29, 6], ATSS [79], RepPoints v2 [12], and Sparse RCNN [56] in mmdetection [10]. For these four frameworks, we utilize the same settings: multi-scale training [8, 56] (resizing the input such that the shorter side is between 480 and 800 while the longer side is at most 1333),

 multi-scale training [8, 56]
end-to-end object detection with transformers
Sparse r-cnn: End-to-end object detection with learnable proposals

Swin 也采用了 multi-scale training [8, 56]。

参考1:输入不同长度的向量,输出相同长度:

之前的卷积目标检测,多尺度训练对全卷积网络有效,一般设置几种不同尺度的图片,训练时每隔一定iterations随机选取一种尺度训练。这样训练出来的模型鲁棒性强,其可以接受任意大小的图片作为输入,使用尺度小的图片测试速度会快些,但准确度低,用尺度大的图片测试速度慢,但是准确度高。

如果不是基于序列的场景,应该要求输入的信息的大小是约定好的,比如在图像分类中,一般的输入大小为 224(可以进行预处理,将不是该大小的图像进行scale,保证最长边为224后,对左右或上下进行padding保证到该大小), 在目标检测中,也约定好了训练或推理的大小,比如centernet支持大小为 512 的输入。当然,对于卷积神经网络,如果没有全连接层,训练时不同的iteration或推理时不同的输入是可以支持不同大小的。但是对于训练时的一次mini batch的输入或者多帧推理,输入大小要保持一致。

对于有全连接层的网络结构,一般是不支持输入动态变化的,除非中间有个将输入到全连接的张量约束到特定的大小的操作,比如Faster RCNN有个ROI Pooling,约束输入到全连接层的特征图大小为7 × 7 。

对于基于序列的结构,序列的长度一般变化的,如句子有长短,视频帧有多少,但好像和本题所描述的不是一个问题,本题主要说的是一个单元的输入向量。

参考2:多种尺寸的图像数据训练没有全连接层的卷积神经网络模型

可以的,目前的卷积神经网络除了最后的分类层是全连接层,而特征提取部分都是卷积或者池化操作,它们可以自适应各种尺寸的图像输入。特征提取之后一般是一个全局平均池化层,这个也自适应各种图像尺寸,得到相同大小的特征用于最后的分类层。所以,卷积神经网络完全可以采用多种尺寸的图像数据训练。

其实EfficientNetv2也采用了多尺度训练,逐步增加图像的大小。

参考3:目标检测里的多尺度技术:

  1. One Stage网络的Multi-scale Training。

这是今天讨论的所有情况中最简单的一个。即每sample一个batch的数据喂入网络中训练时,都会先对采样出的数据resize+padding到一个随机大小。而这个大小的波动范围是实现预设好的。我们来看一下yolov2是怎么描述多尺度训练的:

每10个batches,就随机从{320,352,…,608}这些尺度里随机采样一个,作为后10个batches的训练尺度。yolov2测试时用的尺度是固定的416x416。当然可以用更大或者更小尺度去测试完全ok,这里的416x416只是论文为了报点取的速度和精度的权衡位置。

我们再来看MMDetection里的FCOS是如何做多尺度训练的:
在这里插入图片描述

解释下这里的[(1333,640), (1333, 800)]的含义。1333表示做预处理的时候,长边不可以超过1333,那相对的,640和800就代表短边所不能超过的值。在训练阶段,长边定死不超过1333,短边会随机从[640,800]中取一个32的整数倍的数。同一张图在面对(1333,640)和(1333,800)这两种限制的时候,resize后满足条件的面积很大概率是不一样的,通过控制短边的上限,就可以达到动态控制图片大小的目的。另外MMDetection是每个batch都会去随机选取短边尺度的。

Yolo和FCOS这两种方式虽然细节上有略微区别(当然本质是yolo和retinanet默认配置的区别),但不影响对多尺度训练的理解。即训练的时候用不同的尺度去帮助模型适应各种大小的目标,获得对尺寸鲁棒性。

多尺度训练一个明显的好处是:不增加推理时间。所以不管是业务还是竞赛,大胆上多尺度训练就对了。还有一些值得一说的地方:

1). 最后输出是全连接的网络不能用多尺度。原因很简单,尺度变了,最后一层的权重数量就对不上输入数量了。比如yolov1和带有flatten接fc的分类网络(如VGG)。

2). 多尺度训练,在合理范围内扩大多尺度的范围,是能获得更高收益的。比如上文中FCOS的短边范围[640, 800]。这个域扩充到[480, 960],还可以获得非常可观的收益。当然什么是合理的范围,需要各位自己去把控品味了。
2. One Stage网络的Multi-scale Testing。

One Stage网络的测试也比较直观,见下图:
在这里插入图片描述

可以看到多尺度测试分为3步:
Step1. 各自尺度进行单尺度测试
Step2. 把所有尺度归一化到同一个尺度,如图,蓝色预测和绿色预测的框都是在不同大小的图片下出的,这样所有结果放到一起NMS是对不上的。所以,图里为了表示明白,把蓝色和绿色的预测框都按照图片相对橙色的大小比例进行缩放。Step3. 缩放对齐后的结果放到一起做NMS。

需要注意的是,先对每个单尺度做NMS可以大量减少后续操作的时间,所以先进行一次NMS是比较合理的。

多嘴一句 多尺度训练了一定记住开启多尺度测试 之前亲测一个比赛项目,启动了多尺度训 然后是否开启多尺度测 结果会相差10个点,…

参考4:SPP-Net:精进特征提取 + 开拓多尺度训练

现有的(传统的) CNNs 由于有全连接层所以必须需要固定输入图片的尺寸,比如 224 × 224 。本文为传统的网络结构增加了一个池化策略,即空间金字塔池化,spatial pyramid pooling,来突破全连接层对整个网络输入图像的约束。无论输入图像的尺寸是多少,SPP-Net 能够产生一个固定长度的特征向量,且能够适应形变,在分类和物体检测任务中都有很好的表现(妈妈再也不用担心我训练网络要被动地特意去 crop 或者 warp 啦~当然你还是可以主动选择用这个来做 data augmentation)。

传统 CNN 网络可以大致分为卷积和全连接两部分,其中卷积层是不挑输入图像尺寸的,完全是全连接的存在,才导致整个网络必须固定输入图像的大小。

空间金字塔池化原本就存在,是一种传统图像处理方法理论,算是一种词袋模型的拓展。它把图像的特征分成了不同的粒度有粗有细,组合在一起输出(相比单一尺度的特征要更能表达/代表原图)。

空间金字塔池化的加入,使得模型在预测/测试时可以不限定输入图像的大小,同时在训练阶段,也允许模型实现多尺度训练,这一点很有利于增强尺度不变性并降低过拟合的风险。

个人总结

1、从图像层次的多尺度。这个就是不同scale的图片输入网络,进行训练。这个对网络模型有设计要求,如果存在全连接这个硬性的尺寸约束,需要在全连接前做处理,例如采用SSP(池化策略),或全局平均池化层。如果采用yolo v2 这种全卷积的方式,没有全连接,可以支持图像的多尺度。

2、特征多尺度。这feature map上进行多尺度检测。有不同的操作方案:例如,FPN特征金字塔网络:将低层的特征和高层的特征融合起来,在不同的特征层都单独进行预测。或者SSD的从网络不同层抽取不同尺度的特征,然后在这不同尺度的特征上分别进行预测。低层的特征对于小物体检测比较有效。

参考

https://blog.csdn.net/qq_36758461/article/details/99984228
《目标检测 | 解决小目标检测!多尺度方法汇总 》

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

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

相关文章

展开说说:Adobe XD 哪个版本好用?

工具还是得顺着自己的习惯才是最好 即时设计 - 可实时协作的专业 UI 设计工具即时设计是一款支持在线协作的专业级 UI 设计工具,支持 Sketch、Figma、XD 格式导入,海量优质设计资源即拿即用。支持创建交互原型、获取设计标注,为产设研团队提…

如何快速将PDF文件转换为Word文档

PDF文件是一个广泛使用的电子文档格式,其被广泛应用于各种领域,包括教育、商业和政府。虽然PDF文件非常实用,但有时你需要将其转换为Word文档,以便更方便地编辑和处理。以下是几种快速将PDF文件转换为Word文档的方法。 1. 使用在…

Linux Shell 实现一键部署http+用户名密码登录

Apache 前言 Apache(音译为阿帕奇)是世界使用排名第一的Web服务器软件。它可以运行在几乎所有广泛使用的计算机平台上,由于其跨平台和安全性被广泛使用,是最流行的Web服务器端软件之一。它快速、可靠并且可通过简单的API扩充,将Perl/Python等…

【python】采集天气数据并作可视化,怀念一下之前得好天气

前言 这几天,长沙得天气突然爆冷,每天上班跟渡劫一样 生怕一不小心,风就把伞吹跑了,人湿点无所谓,但是我得伞不能有事 现在得我无比怀念之前得好天气,今天我就来采集一下天气数据并作个可视化怀念一下它…

C# 特性(Attribute)

一、特性(Attribute)定义 特性(Attribute)是用于在运行时传递程序中各种元素(比如类、方法、结构、枚举、组件等)的行为信息的声明性标签。您可以通过使用特性向程序添加声明性信息。 特性使用中括号…

ArduPilot之开源代码框架

ArduPilot之开源代码框架 1. 系统框架2. 工程框架2.1 工程目录2.2 代码组成2.3 运行流程 4. 硬件传感器总线4.1 I2C4.2 SPI4.3 UART4.4 CAN 5. 软件设计概念6. 总结7. 参考资料 在研读ArduPilot的过程,尝试用一些中文的词汇来描述,可能会造成某些理解上的…

sparksql select后插入自己 报错 Cannot overwrite a path that is also being read from

问题现象 spark.version < 3.0.1 执行下面语句报错: Cannot overwrite a path that is also being read from ... 哪些情况算同时读写自己? 如果读自己和写自己在一个spark stage中,就算同时读写自己. spark.table("tb1")// 其他stransform.write.mode("…

运维监控工具PIGOSS BSM扩展指标介绍

PIGOSS BSM运维监控工具&#xff0c;除系统自带指标外&#xff0c;还支持添加SNMP扩展指标、脚本扩展指标、JMX扩展指标、自定义JDBC指标等&#xff0c;今天本文将介绍如何添加SNMP扩展指标和脚本扩展指标。 添加SNMP扩展指标 前提&#xff1a;需要知道指标的oid 例子&#xff…

刚毕业在深圳做程序员,我来聊聊月薪1万在大城市生活能剩下多少

我今年刚毕业&#xff0c;然后在大城市做IT&#xff0c;可能工资大概1万左右。现在讨论一下&#xff0c;月薪1万在大城市最后能留下多少。以下是兴哥的一位刚毕业没多久的程序员朋友&#xff0c;给大家分享一下程序员的薪资水平&#xff0c;在大城市生活 &#xff0c;一个月会剩…

JDBC重点

JDBC初识 DriverManager 将第三方数据库厂商的实现驱动jar注册到程序中可以根据数据库连接信息获取connection Connection 和数据库建立的连接,在连接对象上,可以多次执行数据库curd动作 可以获取statement和 preparedstatement,callablestatement对象 Statement | Prepare…

网络基础,InetAddress,Socket,TCP,UDP

概念&#xff1a;两台设备之间通过网络实现数据运输网络通信&#xff1a;将数据通过网络从一台设备传输到另一台设备java.net包下提供了一系列的类或接口&#xff0c;供程序员使用&#xff0c;完成网络通信网络&#xff1a;两台或多台设备通过一定物理设备连接起来构成了网络根…

go1.20环境安装以及beego框架配置

打开网址下载安装包选择对应安装包来下载安装(个人是windows&#xff0c;下载的1.20.3版本) 默认情况下会安装在C盘&#xff0c;但是我安装在了D盘目录 根据安装提示一步步next&#xff0c;直至完成 go get 在1.18版本之后就弃掉了&#xff0c;换成了install 配置自己的work…

Spring Cloud Alibaba全家桶——微服务链路追踪SkyWalking

前言 本文小新为大家带来 微服务链路追踪SkyWalking 相关知识&#xff0c;具体内容包括SkyWalking简介&#xff0c;SkyWalking环境搭建部署&#xff0c;SkyWalking接入微服务&#xff0c;SkyWalking持久化跟踪数据&#xff0c;自定义SkyWalking链路追踪&#xff0c;SkyWalking集…

ARM相关重点

一、概念&#xff1a; 指令&#xff1a;就是一条汇编指令 指令集&#xff1a;很多条汇编指令的集合 架构&#xff1a;随着ARM产品的迭代升级&#xff0c;对ARM指令集的命名 armv1~armv6已经淘汰 armv7~armv8市面正在使用的 armv9:2021年刚上市 内核&#xff1a;根据不同的a…

SpringCloud分布式请求链路跟踪——Sleuth

Sleuth 本专栏学习内容来自尚硅谷周阳老师的视频 有兴趣的小伙伴可以点击视频地址观看 随着微服务越来越多&#xff0c;可能会出现A调B&#xff0c;B调C、D等多重调用的情况&#xff0c;出现问题不易排查。 Spring Cloud Sleuth提供了一套完整的服务跟踪的解决方案&#xff0c…

软件测试高频面试题【附答案解析】

面试指导 软件测试理论刷题篇mysql数据库刷题库linux操作系统刷题篇软件测试工程师面试篇 一. 软件测试理论刷题篇 1.软件测试的意义是什么&#xff1f; 思路&#xff1a;什么是软件测试→软件测试的含义 什么是软件测试&#xff1a;在规定的条件下对程序进行操作&#xf…

【错误:A component required a bean of type ‘xxx‘ that could not be found.解决办法】

在学谷粒商城项目的时候出现了以下问题&#xff1a; *************************** APPLICATION FAILED TO START *************************** Description: A component required a bean of type org.redisson.Redisson that could not be found. Action: Consider defining a…

优思学院|西门子精益六西格玛的历程

最新阅读了一份案例报告&#xff0c;报告中仔细研究了西门子公司实施精益六西格玛的历程&#xff0c;也谈到它们利用了线上课程后&#xff0c;取得了更大的成功。 2014年&#xff0c;西门子工业自动化部门&#xff08;IA&#xff09;的高管们认识到他们必须采取措施来加强内部效…

English Learning - L2 第 16 次小组纠音 弱读和语调 2023.4.22 周六

English Learning - L2 第 16 次小组纠音 弱读和语调 2023.4.22 周六 共性问题help /help/ 中的 e 和 lsorry /ˈsɒri/ 中的 ɒ 和 ilook out /lʊk aʊt/ 中的 ɒ 和 aʊdont /dəʊnt/ 中的 əʊemergency /ɪˈmɜːʤənsɪ/ 中的 ɜːname /neɪm/ 中的 eɪright /raɪt/…

甘肃vr全景数字化展厅提高企业品牌认知度和销售效果

相比传统式展厅给观众们呈现的是静态的视觉体会&#xff0c;缺乏实时交互水平。而720VR全景虚拟展厅能够提供高度真实的展览体验&#xff0c;融合视、听、触等各种感官享受&#xff0c;带来颠覆的沉浸式体验。 即便社恐的你也能在虚拟现实的世界游刃有余&#xff0c;想看哪里点…