目标检测难题 | 小目标检测策略汇总

大家好,在计算机视觉中,检测小目标是最有挑战的问题之一,本文给出了一些有效的策略。

从无人机上看到的小目标

为了提高模型在小目标上的性能,本文推荐以下技术:

  • 提高图像采集的分辨率

  • 增加模型的输入分辨率

  • tile你的图像

  • 通过增强生成更多数据

  • 自动学习模型anchors

  • 过滤掉无关的类别

小目标问题困扰着世界各地的目标检测模型。查一下最近的模型在COCO上的评估结果,YOLOv3,EfficientDet和YOLOv4:

查看AP_S、AP_M、AP_L以了解最新的模型

以Efficient为例,小目标的AP只有12%,大目标的AP为51%。这几乎是五倍的差异,检测小物体如此困难要归结于模型,目标检测模型通过在卷积层中对像素进行聚合来形成特征。

图片

物体检测中的特征聚合

在网络的末端,基于损失函数进行预测,损失函数根据预测值和ground truth之间的差异对所有像素进行加和。

图片

YOLO中的损失函数

如果ground truth框不大,则在进行训练时信号会很小。此外,小物体最有可能有数据标记错误,他们的识别可能被忽略,从经验和理论上讲小物体是很难的。

提升图像采集的分辨率

这其实都是分辨率的问题。

非常小的物体的边界框中可能只包含几个像素,这意味着增加图像的分辨率可以增加探测器可以从那个小盒子中形成的丰富特征,这是非常重要的。

因此,我们建议尽可能提高采集图像的分辨率。

提高模型的输入分辨率

一旦有了更高分辨率的图像,就可以放大模型的输入分辨率。警告:这将导致大型模型需要更长的时间来训练,并且开始部署时,也会更慢地进行推断,可能需要实验来找出速度与性能之间的正确权衡。

在训练YOLOv4中,可以通过改变配置文件中的图像大小来轻松缩放输入分辨率。

[net] 
batch=64 
subdivisions=36 
width={YOUR RESOLUTION WIDTH HERE} 
height={YOUR RESOLUTION HEIGHT HERE} 
channels=3 
momentum=0.949 
decay=0.0005 
angle=0 
saturation = 1.5 
exposure = 1.5 
hue = .1  
learning_rate=0.001 
burn_in=1000 
max_batches=6000 
policy=steps 
steps=4800.0,5400.0 
scales=.1,.1

同时也可以在训练YOLOv5中通过改变训练命令中的图像尺寸参数来轻松缩放输入分辨率:

!python train.py --img {YOUR RESOLUTON SIZE HERE} --batch 16 --epochs 10 --data '../data.yaml' --cfg ./models/custom_yolov5s.yaml --weights '' --name yolov5s_results  --cache

对图像进行Tiling

检测小物体的另一个重要策略是将图像切割后形成batch,这个操作叫做tile,作为预处理步骤。tile可以有效地将检测器聚焦在小物体上,但允许保持所需的小输入分辨率,以便能够运行快速推断。

tile图像作为预处理步骤

如果在训练中使用tile,重要的是要记住,也需要在推理时tile你的图像。

通过增强生成更多数据

数据增强从基本数据集生成新的图像,这对于防止模型过拟合训练集非常有用。

一些特别有用的小物体检测增强包括随机裁剪、随机旋转和马赛克增强。

自动学习模型Anchors

Anchors是模型学会预测的与之相关的原型边界框。也就是说,anchors可以预先设置,有时对你的训练数据不是最优的。最好根据手头的任务自定义调优它们,YOLOv5模型会根据自定义数据自动为你完成这项工作,所需要做的就是开始训练。

Analyzing anchors... anchors/target = 4.66, Best Possible Recall (BPR) = 0.9675. Attempting to generate improved anchors, please wait... WARNING: Extremely small objects found. 35 of 1664 labels are < 3 pixels in width or height. Running kmeans for 9 anchors on 1664 points... thr=0.25: 0.9477 best possible recall, 4.95 anchors past thr n=9, img_size=416, metric_all=0.317/0.665-mean/best, past_thr=0.465-mean: 18,24,  65,37,  35,68,  46,135,  152,54,  99,109,  66,218,  220,128,  169,228 Evolving anchors with Genetic Algorithm: fitness = 0.6825: 100%|██████████| 1000/1000 [00:00<00:00, 1081.71it/s] thr=0.25: 0.9627 best possible recall, 5.32 anchors past thr n=9, img_size=416, metric_all=0.338/0.688-mean/best, past_thr=0.476-mean: 13,20,  41,32,  26,55,  46,72,  122,57,  86,102,  58,152,  161,120,  165,204

过滤掉无关的类别

类别管理是提高数据集质量的一项重要技术。如果有一个类与另一个类明显重叠,应该从数据集中过滤掉这个类。也许在处理中,认为数据集中的小物体不值得检测,可能希望将其拿掉。

综上所述,正确地检测小物体确实是一项挑战。本文讨论了一些策略来改善小物体探测器,即:

  • 提高图像采集的分辨率

  • 增加模型的输入分辨率

  • tile你的图像

  • 通过增强生成更多数据

  • 自动学习模型anchors

  • 过滤掉无关的类别

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

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

相关文章

【C语言】ipoib模块 - ipoib_send_rss函数

一、ipoib_send_rss函数定义 int ipoib_send_rss(struct net_device *dev, struct sk_buff *skb,struct ib_ah *address, u32 dqpn) {struct ipoib_dev_priv *priv ipoib_priv(dev);struct ipoib_tx_buf *tx_req;struct ipoib_send_ring *send_ring;u16 queue_index;int hlen…

使用chromium代码函数入参和出参传入同一个变量踩到的坑

背景&#xff1a; 开发一个需求的时候需要用到chromium中的加解密功能&#xff0c;但是发现加密之后解密失败了。 伪代码&#xff1a; std::string text "encryped-text"; bool b Encryptor::Crypt(false, text, &text); 发现b的值为false。 备注&#x…

[ELK] ELK企业级日志分析系统

一、ELK 概述 1.1 ELK 简介与组件 ELK平台是一套完整的日志集中处理解决方案&#xff0c;将 ElasticSearch、Logstash 和 Kiabana 三个开源工具配合使用&#xff0c; 完成更强大的用户对日志的查询、排序、统计需求。 ●ElasticSearch&#xff1a;是基于Lucene&#xff08;一个…

Sentinel 轨道数据及下载

Sentinel卫星轨道文件在处理Sentinel卫星数据时发挥着关键作用。这些轨道文件包含了有关卫星在轨道上的运动、位置、姿态等信息&#xff0c;对于地理校正、成像几何校正以及多时相分析等方面具有重要作用。以下是Sentinel卫星轨道文件的主要作用&#xff1a; 地理校正&#xff…

File 类的用法和 InputStream, OutputStream 的用法

1.File类的用法 下面就用几个简单的代码案例来熟悉File类里面函数的用法&#xff1a; public class IODemo1 {public static void main(String[] args) throws IOException {File f new File("./test2.txt");//File f new File("C:/User/1/test.txt");S…

1月下半笔记(个人向)

最近才开始看d2l&#xff08;这种东西早该在两年前看的&#xff0c;拖到现在了&#xff09; 为了做项目还得学一手OpenGL&#xff08;被windows安装GLFW逼疯了&#xff09; 1.15 打完ICPC EC final回来&#xff0c;也许可以出一篇博客写下简单的题解。 对蛋白质相似空间子结…

23款奔驰C260L升级香氛负离子 车载香薰

奔驰原厂香氛系统激活原车自带系统&#xff0c;将香气加藏储物盒中&#xff0c;通过系统调节与出风口相结合&#xff0c;再将香味传达至整个车厢&#xff0c;达到净化车厢空气的效果&#xff0c;让整个车厢更加绿色健康&#xff0c;清新淡雅。 星骏汇小许Xjh15863 产品功能&a…

爱普生L3150新更换废墨垫还是不能使用,如何对它进行废墨清零操作

环境&#xff1a; 爱普生L3150 Win10 专业版 废墨清零软件Resetter 问题描述&#xff1a; 爱普生L3150新更换废墨垫还是不能使用&#xff0c;如何对它进行废墨清零操作 打印机右后方更换了全新的废墨垫&#xff0c;还是告警闪灯用不了&#xff0c;需要进行废墨清零操作 解…

【数据结构二】链表和LinkedList详解

目录 链表和LinkedList 1.链表的实现 2.LinkedList的使用 3.ArrayList和LinkedList的区别 4.链表OJ题训练 链表和LinkedList 当 在 ArrayList 任意位置插入或者删除元素时&#xff0c;就需要将后序元素整体往前或者往后 搬移&#xff0c;时间复杂度为 O(n) &#xff0c;效率…

软件测试|sqlalchemy一对一关系详解

简介 SQLAlchemy 是一个强大的 Python ORM&#xff08;对象关系映射&#xff09;库&#xff0c;它允许我们将数据库表映射到 Python 对象&#xff0c;并提供了丰富的关系模型来处理不同类型的关系&#xff0c;包括一对一关系。在本文中&#xff0c;我们将深入探讨 SQLAlchemy …

【Linux 命令】tree 对目录进行树形展示

目录 1、tree 命令功能展示 2、tree 命令安装 3、tree 命令语法及其参数功能 4、终止 tree 展开树命令 1、tree 命令功能展示 在 Linux 中&#xff0c;我们使用 ll 命令对目录的展示并不太方便我们查看&#xff0c;不太清晰明了&#xff0c;所以我们可以使用 tree 命令以…

JavaScript的代码执行顺序

&#xff08;1&#xff09;. js的执行顺序&#xff0c;先同步后异步 &#xff08;2&#xff09;. 异步中任务队列的执行顺序&#xff1a; 先微任务microtask队列&#xff0c;再宏任务macrotask队列 注意&#xff0c;按顺序从上到下时&#xff0c;没有轮到执行的任务会进入相应…