[YOLO专题-27]:YOLO V5 小目标检测遇到的问题与常见解决办法

Posted 文火冰糖的硅基工坊

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了[YOLO专题-27]:YOLO V5 小目标检测遇到的问题与常见解决办法相关的知识,希望对你有一定的参考价值。

作者主页(文火冰糖的硅基工坊):文火冰糖(王文兵)的博客_文火冰糖的硅基工坊_CSDN博客

本文网址:https://blog.csdn.net/HiWangWenBing/article/details/122348281


目录

第1章 前言:

第2章 小目标检测常见问题

2.1 大小目标混合的场合

2.2 只有小目标的场合

第3章 小目标检测困难的原因

3.1 模型对小目标总数的支持不够

3.2 小目标漏检率太高

3.3 解决问题的基本思路

第4章 小目标检测可能的解决之道:输入图片

4.1 目标数量超标

4.2 目标像素太少

第5章 小目标检测可能的解决之道:预测模型

5.1 针对目标数量超标的问题

5.2 针对目标像素太少的问题:统一模型

5.3 针对目标像素太少的问题:分离模型


第1章 前言:

在实际应用中,有时候,在一张图片中有大目标,也有小目标,且小目标的数量可能远远大于大目标的数量,同一个模型要检测大目标和小目标时,对小目标的检测效果往往不尽如人意。

本文就是探讨小目标检测的问题以及可能的解决办法。

第2章 小目标检测常见问题

2.1 大小目标混合的场合

在这种场合中,一张图片上有少数的大目标,有小目标。

常见的问题有:

(1)能够准确地检测到大目标,但检测不到小目标

(2)小目标的recall 率很低,大量的小目标检测不到,被遗漏

(3)小目标的数量太多,模型对小目标总是的支持不够

2.2 只有小目标的场合

在这种场合中,一张图片上全是小目标。

(1)小目标的recall 率很低,大量的小目标检测不到,被遗漏

(2)小目标的数量太多,模型对小目标总数的支持不够

第3章 小目标检测困难的原因

在找到或提供解决办法之前,首先弄清楚不同问题原因。

3.1 模型对小目标总数的支持不够

这种情况来自两个主要方面的原因:

(1)图片本身:单张图片的目标太多

有时候,单张图片中小目标的数量太多,比如细胞的图片,一张图片中,包含了上百万个细胞,这就不是模型本身的问题了,而是图片的问题。

(2)模型本身:模型设计的限制

模型对单张图片支持的目标的数量受限于模型本身的设计,如果图片中目标的数量超出了模型支持的最大数量,自然会出现模型对小目标总数支持不够的问题。

3.2 小目标漏检率太高

这种情况,单张图片中小目标的数量完全满足模型设计的要求,这时候,依然会出现大量小目标检测不到的情况。这里也分为两种原因:

(1)图片本身

小目标包含的像素少,比如,一张尺寸为640 * 640的图片, 大目标的像素通常大于 100 * 100,这种情形下。而小目标的像素通常只有10*10个像素点,甚至更少。

从上图中可以看出,小目标与大目标在长度和宽度尺寸上相差超过10倍以上,像素点(面积)相差上百倍。

像素点越少,目标图片,经过卷积后的特征就更少了,那么用于目标检测和分类的特征就更少了。

能够提供的原始信息越少,则被漏检的可能性就越大。

(2)模型本身

通常情况下,模型是通过卷积来提取原始图片像素中包含的特征的,感受野就反应了单个高层特征的信息与原始像素之间的对应关系,在网络卷积核确定的情况下,随着网络层数的增加,单个高层特征反应原始图片像素的范围就越大,视野就越宽,高层信息越是能够反应原始图片中物体的宏观轮廓。如下图所示:

然后,随着网络层数的增加和感受野的变大,微观的信息就会丢失, 这样对于小目标的信息就会聚合到一个点,小目标原本包含的像素就少,随着感受野的增加,聚合后的特征就更少了,比如10*10像素的小目标,经过卷积后的特征可能就只有1*1,甚至出现多个10*10像素的小目标,经过多次卷积核,合并成了一个特征。这样,小目标就无法识别。

因此,深层的多次卷积,对于小目标的微观特征实际上是不利的。

3.3 解决问题的基本思路

综上所述,要解决小目标检测问题,需要从两个角度来解决

(1)输入图片

(2)预测模型

第4章 小目标检测可能的解决之道:输入图片

4.1 目标数量超标

(1)先把图片切分成多张图片,然后对每张图片单独进行检测,最后进行汇总

这种方法的难点是:需要处理好图片与图片之间的切割线上的目标,因此需要通过一定的重叠区来解决。

4.2 目标像素太少

(1)局部放大

通剪切的方式获取包含小目标的一片图片,然后对剪切后的图片进行像素增强,最后对增强后的图片进行目标检测。这种方法优点类似现实生活发现小目标的方法:先聚焦聚焦,然后放大,再进行鉴别。

这种方法的难点是:如何剪切包含小目标的图片,依据什么原则来截取大图片的区域。计算机如何知道那片区域包含小目标?区域的大小、边界如何确定?

(2)整体增强

  • 对整张图片进行数据增强,甚至增加图片的尺寸
  • 通过高倍的照相机获取高分辨率的图片

这种方法的问题是:连同大目标一并进行了增强,导致整张图片的像素变得非常大,而对于大目标而言,这种增强是没有意义的,导致预测的时间变长。

 在高分辨率的情况下,小目标也具备清晰的特征和较多的像素。

(3)增加没有目标的背景图片

通过明确的告诉网络,什么是没有目标的背景,什么是目标,这样通过背景与目标的反差,就能够区分出图片中微小的物体。

这种地面上没叶子的图片就可以作为背景,以区分地面与地面上小目标:叶子。

第5章 小目标检测可能的解决之道:预测模型

5.1 针对目标数量超标的问题

通过修改或选择支持更多目标的模型,支持的目标越多,模型所需要的内存越大。

5.2 针对目标像素太少的问题:统一模型

这种方式下,大目标和小目标处于相同的图片上,采用相同的图片训练同一个模型。

训练出来的模型,同时识别大目标与小目标。

为了能够更好的识别小目标,可以采用的方法有:

(1)降低网络的层数:避免多个小目标经过多层卷积核混合在一起,无法区分。

(2)减少卷积核的尺寸:编码小目标的所有像素卷积成一个特征。

(3)减小步长:避免跳过部分小目标的像素提取。

总之,为了迎合小目标的识别,需要牺牲对大目标的更高层次的抽象。

5.3 针对目标像素太少的问题:分离模型

针对大目标和小目标,采用不同的模型数据集进行训练和预测。

(1)识别大目标时:

  • 不识别小目标,小目标作为背景
  • 尽可能采用大型、深层次网络提取

(2)识别小目标时:

  • 不识别大目标、大目标作为背景
  • 尽可能采用小型、浅层次网络提取特征
  • 训练图片,可以是原始图片,也可以是从原始图片截取的包含小目标的图片。

作者主页(文火冰糖的硅基工坊):文火冰糖(王文兵)的博客_文火冰糖的硅基工坊_CSDN博客

本文网址:https://blog.csdn.net/HiWangWenBing/article/details/122348281

以上是关于[YOLO专题-27]:YOLO V5 小目标检测遇到的问题与常见解决办法的主要内容,如果未能解决你的问题,请参考以下文章

[YOLO专题-25]:YOLO V5 - ultralytics代码解析-detect.py检测代码的详细执行流程

使用 YOLO v5 进行目标检测

yolo v5 与 yolo v7 在一个项目中混合使用是否可行?

Python Apex YOLO V5 6.2 目标检测 全过程记录

[YOLO专题-2]:总体-YOLO目标检测的网络总体架构与核心概念

23年 车辆检测+车距检测+行人检测+车辆识别+车距预测(附yolo v5最新版源码)