当前位置: 首页 > news >正文

论文阅读 The Power of Tiling for Small Object Detection

The Power of Tiling for Small Object Detection

Abstract

基于深度神经网络的技术在目标检测和分类方面表现出色。但这些网络在适应移动平台时可能会降低准确性,因为图像分辨率的增加使问题变得更加困难。在低功耗移动设备上实现实时小物体检测一直是监控应用的基本问题之一。在本研究中,我们解决了在高分辨率微型空中飞行器(MAV)图像中检测行人和车辆的问题。为此,我们利用PeleeNet,据我们所知,这是在移动GPU上效率最高的网络模型,以SSD网络的骨干和earlier layer中的38x38特征图。在展示了现有目标检测器在MAV场景下的低准确性后,我们引入了一种基于分块(tiling)的方法,该方法在训练和推断阶段均适用。所提出的技术在目标检测中限制了detail loss,同时以固定尺寸的输入送入网络。通过在Nvidia Jetson TX1和TX2上使用VisDrone2018数据集进行的深入实验,我们展示了所提出方法带来的改进。

1. Introduction

近年来,目标检测在不同应用领域得到了广泛研究,包括人脸检测、视频对象共分割、视频监控、自动驾驶汽车。卷积神经网络(CNNs)是目标检测技术背后的核心工具。在这个领域,深度学习架构的突破性和快速的应用产生了高度准确的目标检测方法,如R-CNN、Fast R-CNN 、Faster R-CNN 、RetinaNet ,这些方法后来被扩展成更快速且仍然准确的版本,如SSD 、YOLO 以及各种变体。这些方法通常在众所周知的数据集上进行训练和评估,如ImageNet 、Pascal VOC12 、COCO 。

需要注意的是,这些常见的数据集主要包括低分辨率图像(256x256),其中包含有大面积像素的大型物体。因此,这些训练好的模型对于这些类型的输入数据提供了非常成功的检测性能。然而,它们在高分辨率图像中的小物体检测任务上的准确性显著较低,这些图像是由高端摄像机生成的。摄像机和机器人技术在许多方面开创了监控应用,包括无人机、4K摄像机,并且实现了符合(D)etection、(O)bservation、(R)ecognition和(I)dentification(DORI)标准的long-range目标检测。DORI标准为不同任务的对象定义了最小像素高度。例如需要将图像高度10%的物体用于检测(在高清视频中为108像素),而在进行识别时,这个百分比增加到了20%。尽管在某些情况下符合DORI标准,相对较小的像素覆盖率和降采样影响了基于CNN的目标检测方法的能力。此外,由于内存需求和计算限制,这些技术无法处理高分辨率图像。

实时小物体检测问题主要应用于微型飞行器(MAV),其中大小、重量和功耗(SWaP)是使用高性能处理器的限制因素。MAV在一定高度观察地面,场景中的物体(行人、汽车、自行车等)的像素区域相对较小。此外,这些飞行器需要实时处理,以便在常见的监控应用中实现检测和跟踪的即时飞行控制。

在本研究中,我们提出了一种在高分辨率图像上进行小物体检测的高效解决方案,同时保持低复杂度和内存占用。为此,我们专注于微型飞行器上的行人和车辆检测,这涉及到前面讨论的问题。这些问题的解决方案依赖于三个阶段:第一步,训练数据集通过使用在原始高分辨率图像中裁剪的子集图块进行增强,同时将目标边界框相应地映射。这些 crops 将小物体映射到较大的相对区域,并在训练阶段的CNN结构的early layers中prevent misses。第二步关注CNN的部署,在这里,目标图像被分割为重叠的图块,并在每个图块上独立执行目标检测。每个图块中的object proposals被合并,以在输入图像的原始分辨率下进行最终检测。为了在满足实时要求的同时利用图块的优势,我们利用了一个高效的框架Pelee,该框架最初应用于大小为304x304的图像。第三步我们修改了Pelee中的特征分辨率,以解决小物体的问题。所有实验都在移动GPU NVIDIA Jetson TX1和TX2模块上进行。

2. Related Work

略过

3. Problem Description

对于移动设备(尤其是MAV和搭载电池的车辆)上实时部署目标检测框架的约束限制了可用网络的数量。前面提到的基于区域的方法对于及时操作不方便,而基于回归的技术则是为了在设备上进行 onboard processing 而设计的。在表1中,展示了在COCO数据集上的准确性以及在Nvidia TX2上的计算时间(每秒帧数(FPS)),其中包括各种基于回归的技术及其适用于移动设备的版本。根据表格,最近推出的Pelee不仅比所有移动检测框架(SSD+MobileNet和YOLOv3-tiny )更快,而且在与尺寸大10倍且计算能力较慢4倍的模型(如YOLOv2)相比的情况下,也提供了可比较的准确性。据我们所知,Pelee不仅是各种最先进技术中目前最佳的替代方案,还为额外的计算提供了足够的空间。
在这里插入图片描述
尽管Pelee在移动GPU上实现了实时性能,但由于SSD的特性,它在高分辨率图像中仍然受到检测小目标的困扰,如图1所示。在图中,展示了VisDrone2018 Video数据集中一些图像的Pelee检测(304x304)的典型结果。特别是对于较小的目标,表现出的目标检测性能较差,尤其是在黄色A-B-C-D所示的区域。
在这里插入图片描述
VisDrone2018 VID数据集在训练集中有100多万个边界框注释,在验证集中有11个不同类别标签(行人、人、自行车、汽车、货车、卡车、三轮车、雨篷三轮车、公共汽车、摩托车、其他)的140k个注释,非常适合我们的场景。我们将VisDrone2018中的类别分为两大类,即行人和车辆,以便进行更清晰简化的任务。在训练集中,人类和车辆类别的像素高度和宽度直方图如图2所示(将图像缩放为1920x1080)。很明显,一半的注释对应于像素高度和宽度小于50像素的对象。这个值是根据标准中讨论的阈值的一半。在VisDrone2018数据集中,小目标占了大多数,只有一半的目标满足监控阈值,而只有20%的目标满足10%图像高度的检测阈值。这在基于MAV的监视中是一个常见情况。在这里插入图片描述

4. Proposed Approach

为了解决小目标检测问题,我们提出了一种tiling方法,该方法在训练和推断阶段都应用如图3所示。在图中,展示了一个典型的3x2 tiling,根据图像分辨率和目标物体纵横比,可以应用任意的tiling。将输入图像划分为重叠的tiling,使得相对于输入网络的图像,小目标的像素区域增大。这适用于任何类型的网络,另一方面,我们选择Pelee 来通过快速执行获得显著的准确率提高。
在这里插入图片描述

4.1. Pelee Architecture

整个PeleeNet网络由Stem Block、七个特征提取器阶段和ResBlock组成。首先,前四个特征提取器阶段由Dense Block组成,以前馈的方式将每一层连接到其他每一层。在训练过程中,输入帧被降采样到304x304分辨率。然后,降采样后的图像被送入Stem Block,以提高特征表达性能而不会增加太多的计算成本。在特征提取阶段,网络在5个尺度的特征图中(19x19、10x10、5x5、3x3和1x1)学习视觉特征示,具有不同的纵横比,然后在产生目标类别和边界框位置预测之前,将其传递到残差块(ResBlock)中。

我们的目标检测系统基于SSD 的源代码,使用Pytorch 进行训练。用于特征提取的VGG-16网络被Pelee替代。批大小设置为32。动量值为0.9,权重衰减为5e-4,γ值为0.5。初始学习率设置为0.001,然后在分别进行10K、20K、30K、40K和70K次迭代后降低10倍。训练在第120K次迭代时终止。

4.2. Tiles in network training

为了减轻小目标问题,我们降低了训练过程中因为采用图像降采样而产生的影响。通过重叠的tiles,将图像分割成较小的图像,其中tiles的大小根据训练框架中使用的图像大小进行选择。如图3所示,较低分辨率的图像(MxN)通过重叠的tiles从原始图像中裁剪出来。需要注意的是,在裁剪之前将输入图像分辨率设置为1920x1080,以固定tiles的大小。每个tiles对应于一个新的图像,其中ground truth物体的位置按照原样排列,而不改变物体的大小。通过这种方式,与完整画面相比,裁剪图像中的相对物体大小增加了。裁剪后的(MxN)图像和完整画面被用作网络训练的输入数据。需要注意的是,为了检测场景中的大物体,完整画面也被输入到网络训练中。

tiles之间的重叠区域用于保留沿tiles边界的物体,并防止由于图像分割而导致的任何遗漏。在本研究中,我们选择了连续tiles之间的25%交叠区域;子采样图像的分辨率N(宽度和高度)根据tiles数量(T)和图像大小(S)确定为:
在这里插入图片描述
在表2中给出了对VisDrone2018数据集的裁剪图像分辨率、边界框数量和图像数量的tiling效果。由于重叠比率将网格大小增加到5x3会导致注释边界框数量增加2.5倍。将Pelee的图像分辨率与tile分辨率进行比较(304x304),降采样率大大降低,以保持小目标在网络可检测范围内。随着tile的增加,较大的物体可能无法适应tile和交叉区域,失去较大目标注释的风险也会增加。因此,在某一点上,tile的增加开始减少注释数量。图2中给出了tile扩展对目标尺寸分布的影响,蓝色表示扩展后的直方图。在提取直方图时,tile内的对象注释相对于将裁剪图像映射到完整分辨率(1920x1080)的尺度进行了放大。因此,正如在图2中观察到的,tile方法将较小的对象视为较大的对象。
在这里插入图片描述

4.3. Tiles during inference

与图3中给出的相同结构在目标检测期间也得到了利用。首先,输入帧被调整为1920x1080的大小,并且通过根据计算能力确定的tiles数量来裁剪输入帧生成tiles图像。由于计算性能问题,推断期间的tiles网格可以与训练阶段中的网格不同。每个tiles都被独立处理,就像原始帧一样,结果的检测框和类别概率被收集为初始结果。在这一点上,由于tiles和全帧之间的重叠,初始结果中会有重复的对象检测。根据边界框和类别分数的交集合并初始结果。如果重复检测的交集超过25%,则分数较高的一个被接受为更好的选择,另一个从检测列表中删除。在合并步骤中,与整个帧相比,tiles内的小对象通常会获得更高的分数,而对于大小与tiles区域相当的较大对象来说,情况相反。因此,小型和大型对象都会得到谨慎处理。

tiles的数量线性增加了整体检测框架的复杂性。因此,这种方法适用于轻量级和高效的网络,以满足在不增加内存使用的情况下进行实时推断。另一方面,相对于原始高分辨率帧,实际上原始图像中的相对对象尺寸可能非常小,因此小对象检测的准确性显然可以提高。即使只有少量的tiles,也可以显著提高小对象检测的性能,这在实验部分中有所呈现。

4.4. Pelee Framework Modifications

tiling方法引入了与网格数成线性关系的附加计算。为了解决小目标问题,还可以增加特征提取层的数量,以在不过多增加计算时间的情况下检测小目标。在原始的SSD结构中,使用了38x38、19x19、10x10、5x5、3x3和1x1的特征向量。带有Mobilenet的SSD没有使用38x38的特征向量,以在速度和准确性之间取得平衡。他们在预测时使用另一个2x2的特征图。这样,他们使用了一个较小的网络,以在牺牲小目标检测准确性的同时获得速度优势。原始的Pelee架构也放弃了38特征图,以平衡速度和准确性的权衡,但不像MobileNet那样使用2个特征图。在我们的框架中,我们使用38特征图对Pelee网络进行训练,以提高小目标的检测准确性。

5. Experiments && 6. Conclusion

略过

相关文章:

论文阅读 The Power of Tiling for Small Object Detection

The Power of Tiling for Small Object Detection Abstract 基于深度神经网络的技术在目标检测和分类方面表现出色。但这些网络在适应移动平台时可能会降低准确性,因为图像分辨率的增加使问题变得更加困难。在低功耗移动设备上实现实时小物体检测一直是监控应用的…...

【FreeRTOS】【应用篇】消息队列【下篇】

前言 本篇文章主要对 FreeRTOS 中消息队列的概念和相关函数进行了详解消息队列【下篇】详细剖析了消息队列中发送、接收时队列消息控制块中各种指针的行为,以及几个发送消息和接收消息的函数的运作流程笔者有关于 【FreeRTOS】【应用篇】消息队列【上篇】——队列基…...

芯片技术的崭新时代:探索未来的可能性

引言 芯片作为现代科技领域的核心,扮演着无可替代的角色。从智能手机到数据中心,从医疗设备到智能家居,芯片技术已经深刻地改变了我们的生活。然而,随着技术的不断发展,芯片行业也在经历着一场前所未有的变革。本文将…...

博流RISC-V芯片Eclipse环境搭建

文章目录 1、下载 Eclipse2、导入 bouffalo_sdk3、编译4、烧录5、使用ninja编译 之前编译是通过 VSCode 编译,通过手工输入 make 命令编译,我们也可以通过 Eclipse 可视化 IDE 来编译、烧录。 1、下载 Eclipse 至 Eclipse 官网 https://www.eclipse.org…...

智慧水产养殖方案,守护养殖水产品安全!

水产品在人们的饮食文化中占据着举足轻重的地位,更是人们摄入蛋白质的重要来源。因此,保障食品安全,提升养殖水产品的品质至关重要然。而传统的人工观察水产养殖方式较为单一,难以及时发现水质问题和投喂情况,容易导致…...

前端vue引入高德地图入门教程

距离上一篇关于前端项目中使用高德地图的文章已经将近5年之久, 这是我的第一篇关于高德地图的文章 这期间前端技术日新月异,5年前JQuery还如日中天,如今已经销声匿迹,很少有公司招聘还在要求JQuery,更多的是Vue、React…...

【LeetCode题目详解】第八章 贪心算法 part05 435. 无重叠区间 763.划分字母区间 56. 合并区间 (day36补)

本文章代码以c为例! 一、力扣第435题:无重叠区间 题目: 给定一个区间的集合 intervals ,其中 intervals[i] [starti, endi] 。返回 需要移除区间的最小数量,使剩余区间互不重叠 。 示例 1: 输入: intervals [[1,…...

数据的语言:学习数据可视化的实际应用

数据可视化应该学什么?这是一个在信息时代越来越重要的问题。随着数据不断增长和积累,从社交媒体到企业业务,从科学研究到医疗健康,我们都面临着海量的数据。然而,数据本身往往是冰冷、抽象的数字,对于大多…...

【Flutter】Flutter简介

Flutter是Google开发的一款用于构建高性能、高保真移动应用程序的开源UI工具包。它允许开发人员使用Dart语言来构建跨平台的移动应用程序,并提供了丰富的UI组件、动画效果和手势识别等功能。 以下是Flutter入门的一些详细介绍: Flutter概述 Flutter是一…...

做区块链卡牌游戏有什么好处?

区块链卡牌游戏是一种基于区块链技术的创新性游戏形式,它将传统的卡牌游戏与区块链技术相结合,实现了去中心化、数字化资产的交易和收集。这种新型游戏形式正逐渐在游戏行业引起了广泛的关注和热潮。本文将深入探讨区块链卡牌游戏的定义、特点以及其在未…...

C语言每日一练------Day(5)

本专栏为c语言练习专栏,适合刚刚学完c语言的初学者。本专栏每天会不定时更新,通过每天练习,进一步对c语言的重难点知识进行更深入的学习。 今日练习题关键字:错误的集合 密码检查 💓博主csdn个人主页:小小u…...

(Windows )本地连接远程服务器(Linux),免密码登录设置

在使用VScode连接远程服务器时,每次打开都要输入密码,以及使用ssh登录或其它方法登录,都要本地输入密码,这大大降低了使用感受,下面总结了免密码登录的方法,用起来巴适得很,起飞。 目录 PowerSh…...

Python 面试:异常处理机制

格式: 继承Exception实现自定义异常。 注意:这里是继承Exception类,而不是BaseException类,因为继承BaseException可能会导致捕获不到自定义异常。 class MyException(Exception):passtry:raise MyException(my salary is too…...

Matlab图像处理-水平镜像

镜像变换 镜像变换又常称为对称变换,它可以分为水平对称、垂直对称等多种变换。对称变换后,图像的宽和高不变。 图像的镜像分为两种垂直镜像和水平镜像。 水平镜像即将图像左半部分和右半部分以图像竖直中轴线为中心轴进行对换; 竖直镜像…...

Ansys Zemax | 手机镜头设计 - 第 2 部分:使用 OpticsBuilder 实现光机械封装

本文是3篇系列文章的一部分,该系列文章将讨论智能手机镜头模块设计的挑战,从概念、设计到制造和结构变形的分析。本文是三部分系列的第二部分。概括介绍了如何在 CAD 中编辑光学系统的光学元件以及如何在添加机械元件后使用 Zemax OpticsBuilder 分析系统…...

【GPT,Flask】用Python Flask结合OpenAI的GPT API构建一个可自主搭建的内容生成应用网站

【背景】 自己构建模型并进行训练需要很高的知识,技能和资源门槛。如今,通过OpenAI提供的API,则可以快速通过GPT能力构建可以提供内容生成服务的在线网站。这套框架可以提供给用户,用户可以利用该框架在自己的环境(比如自己的公司内)构建内容生成服务。你也可以自己上线…...

vue + electron

node 版本 v14.19.3 npm 版本 6.14.17 要是node-sass报错执行命令: npm uninstall node-sass sass-loader npm i node-sass4.14.1 sass-loader7.3.1 --save -dev首先安装依赖 npm install electron npm install electron-packagerelectronRun.js放在根目录下 con…...

spring中LocalDateTime 转成字符串的时候注意事项

ApiOperation("查询课程发布信息") ResponseBody GetMapping("/r/coursepublish/{courseId}") public CoursePublish getCoursepublish(PathVariable("courseId") Long courseId) { CoursePublish coursePublish coursePublishService.getC…...

vue数组对象中按某一字段排序

给下列数组字段中的month排序 第一步&#xff1a;methods中写一个方法如下&#xff1a; sortBy(attr, rev) {//第二个参数没有传递 默认升序排列if(rev undefined) {rev 1;} else {rev (rev) ? 1 : -1;}return function(a, b) {a a[attr];b b[attr];if(a < b) {retu…...

yolov5和yolov7部署的研究

1.结论 onnx推理比torch快3倍, openvino比onnx快一丢丢。 | yolov7.pt 转 onnx python export.py --weights best_31.pt --grid --end2end --simplify --topk-all 10 --iou-thres 0.65 --conf-thres 0.65 --img-size 320 320 --max-wh 200可以看到yolov7的 onnx是包括nms…...

微信小程序之bind和catch

这两个呢&#xff0c;都是绑定事件用的&#xff0c;具体使用有些小区别。 官方文档&#xff1a; 事件冒泡处理不同 bind&#xff1a;绑定的事件会向上冒泡&#xff0c;即触发当前组件的事件后&#xff0c;还会继续触发父组件的相同事件。例如&#xff0c;有一个子视图绑定了b…...

vscode(仍待补充)

写于2025 6.9 主包将加入vscode这个更权威的圈子 vscode的基本使用 侧边栏 vscode还能连接ssh&#xff1f; debug时使用的launch文件 1.task.json {"tasks": [{"type": "cppbuild","label": "C/C: gcc.exe 生成活动文件"…...

【磁盘】每天掌握一个Linux命令 - iostat

目录 【磁盘】每天掌握一个Linux命令 - iostat工具概述安装方式核心功能基础用法进阶操作实战案例面试题场景生产场景 注意事项 【磁盘】每天掌握一个Linux命令 - iostat 工具概述 iostat&#xff08;I/O Statistics&#xff09;是Linux系统下用于监视系统输入输出设备和CPU使…...

ESP32 I2S音频总线学习笔记(四): INMP441采集音频并实时播放

简介 前面两期文章我们介绍了I2S的读取和写入&#xff0c;一个是通过INMP441麦克风模块采集音频&#xff0c;一个是通过PCM5102A模块播放音频&#xff0c;那如果我们将两者结合起来&#xff0c;将麦克风采集到的音频通过PCM5102A播放&#xff0c;是不是就可以做一个扩音器了呢…...

相机从app启动流程

一、流程框架图 二、具体流程分析 1、得到cameralist和对应的静态信息 目录如下: 重点代码分析: 启动相机前,先要通过getCameraIdList获取camera的个数以及id,然后可以通过getCameraCharacteristics获取对应id camera的capabilities(静态信息)进行一些openCamera前的…...

Module Federation 和 Native Federation 的比较

前言 Module Federation 是 Webpack 5 引入的微前端架构方案&#xff0c;允许不同独立构建的应用在运行时动态共享模块。 Native Federation 是 Angular 官方基于 Module Federation 理念实现的专为 Angular 优化的微前端方案。 概念解析 Module Federation (模块联邦) Modul…...

[Java恶补day16] 238.除自身以外数组的乘积

给你一个整数数组 nums&#xff0c;返回 数组 answer &#xff0c;其中 answer[i] 等于 nums 中除 nums[i] 之外其余各元素的乘积 。 题目数据 保证 数组 nums之中任意元素的全部前缀元素和后缀的乘积都在 32 位 整数范围内。 请 不要使用除法&#xff0c;且在 O(n) 时间复杂度…...

Java线上CPU飙高问题排查全指南

一、引言 在Java应用的线上运行环境中&#xff0c;CPU飙高是一个常见且棘手的性能问题。当系统出现CPU飙高时&#xff0c;通常会导致应用响应缓慢&#xff0c;甚至服务不可用&#xff0c;严重影响用户体验和业务运行。因此&#xff0c;掌握一套科学有效的CPU飙高问题排查方法&…...

Linux nano命令的基本使用

参考资料 GNU nanoを使いこなすnano基础 目录 一. 简介二. 文件打开2.1 普通方式打开文件2.2 只读方式打开文件 三. 文件查看3.1 打开文件时&#xff0c;显示行号3.2 翻页查看 四. 文件编辑4.1 Ctrl K 复制 和 Ctrl U 粘贴4.2 Alt/Esc U 撤回 五. 文件保存与退出5.1 Ctrl …...

三分算法与DeepSeek辅助证明是单峰函数

前置 单峰函数有唯一的最大值&#xff0c;最大值左侧的数值严格单调递增&#xff0c;最大值右侧的数值严格单调递减。 单谷函数有唯一的最小值&#xff0c;最小值左侧的数值严格单调递减&#xff0c;最小值右侧的数值严格单调递增。 三分的本质 三分和二分一样都是通过不断缩…...