[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 大小目标混合的场合
在这种场合中,一张图片上有少数的大目标,有小目标。
常见的问题有:
(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 v7 在一个项目中混合使用是否可行?
Python Apex YOLO V5 6.2 目标检测 全过程记录