知者何南 发表于 7 天前

小目标、狭长目标检测的一些优化方法

小目标检测(Small Object Detection)确实是计算机视觉中的一个难点和热门。主要挑衅在于小目标本身像素少、特征不明显,容易在网络下采样过程中丢失信息,并且容易受到配景干扰。
狭长目标(如输电线路、裂缝、道路边界),因为他们外形高宽比极大大概极小与大多预设验的先验框不匹配,导致模子在训练初期难以学习。
针对YOLOv5(以及其他目标检测模子)增强小目标、狭长检测能力,可以从以下几个方面入手:
1. 数据层面 (Data Level)


[*] 提高输入分辨率 (Increase Input Resolution):

[*] 方法: 训练和推理时使用更大的图像尺寸 (e.g., --img-size 1280 或更大,而不是默认的 640)。
[*] 原理: 更大的分辨率意味着小目标在输入图像中占据更多的像素,保留了更多细节信息。
[*] 缺点: 计算量和显存斲丧显著增加。

[*] 数据增强 (Data Augmentation):

[*] 方法:

[*] Mosaic/MixUp: YOLOv5 自带的 Mosaic 和 MixUp 对小目标有肯定资助,因为它们会将多张图片拼接,变相增加了小目标在单次训练迭代中出现的概率。
[*] Copy-Paste: 将数据会合抠出的小目标随机粘贴到其他训练图像的差异位置和配景上。这可以显著增加小目标的数量和场景多样性。需要自己实现或使用支持该功能的库。
[*] 标准抖动 (Scale Jittering): 在肯定范围内随机缩放图像,让模子学习对差异标准的目标(包罗小目标)的顺应性。YOLOv5自带的scale超参数可以控制。
[*] 过采样小目标图像 (Oversampling): 如果数据会合包含小目标的图像较少,可以对这些图像进行过采样,增加它们在训练中被选中的概率。
[*] 狭长目标大概以任意角度出现,大幅度的随机旋转比力重要


[*] 图像切片/瓦片化 (Image Tiling / Slicing):

[*] 方法: 将高分辨率的大图切成多个重叠(Overlapping)的小图块(Tiles),然后在每个小图块上独立进行检测,末了将效果合并回原图。
[*] 原理: 在小图块上,原来的小目标相对于图块尺寸就变大了,更容易被检测到。重叠区域可以确保切片边界上的目标不会被遗漏。
[*] 实现: 可以使用 SAHI (Slicing Aided Hyper Inference) 这类库,它能很好地集成YOLOv5等模子。大概自己实现切片和合并逻辑。这是非常有效的一种策略。

2. 模子架构层面 (Model Architecture Level)


[*] 增加/修改检测头 (Add/Modify Detection Heads):

[*] 方法: YOLOv5 (P5版本) 默认在 P3, P4, P5 三个特征层上进行检测 (下采样 8, 16, 32 倍)。可以增加一个更早、分辨率更高的特征层(如 P2,下采样 4 倍)用于检测非常小的目标。YOLOv5 P6 模子(如 yolov5l6)增加了 P6 层用于检测大目标,思路雷同,但方向相反。增加 P2 检测头需要修改模子设置文件 (.yaml) 和相关的网络结构代码。
[*] 原理: 增大感受野来补获目标的整体结构和依赖上下文,更高分辨率的特征图保留了更多小目标的细节和位置信息。
[*] 实现: 修改模子设置文件(.yaml),定义新的 P2 输出层,并调解 Neck(如 PANet)结构以融合 P2 特征。需要肯定的模子结构理解。

[*] 优化特征融合网络 (Optimize Feature Fusion Network):

[*] 方法: YOLOv5 使用 PANet 进行特征融合。可以研究更先进的特征融合结构,如 BiFPN (EfficientDet 使用) 或其他能更好保留和融合浅层(高分辨率)特征的结构。
[*] 原理: 更好的特征融合可以确保来自浅层的高分辨率信息有效地转达给检测头。
[*] 实现: 需要修改模子 Neck 部分的代码,复杂度较高。

[*] 使用更强的骨干网络 (Use Stronger Backbone):

[*] 方法: 实验使用对细节特征提取能力更强的骨干网络,比方 Swin Transformer 或其他能更好捕捉局部信息的网络。
[*] 原理: 强大的骨干网络能提取更具判别力的特征,即使对于小目标。
[*] 实现: 需要替换或修改 YOLOv5 的 Backbone 部分,工作量较大。

3. 训练策略层面 (Training Strategy Level)


[*] 调解Anchor Boxes:

[*] 方法: YOLOv5 会根据数据集自动学习 Anchor Boxes。但如果你的数据会合小目标特别多或尺寸分布特别,可以手动运行 k-means 算法(YOLOv5 代码库中有此功能)在你的特定数据集上重新天生 Anchor Boxes,确保有足够小且合适的 Anchor 覆盖小目标。大概在设置文件中手动调解 Anchor 的尺寸。
[*] 原理: 合适的 Anchor 尺寸能提高模子预测边界框的初始正确性,低落回归难度。

[*] 损失函数优化 (Loss Function Optimization):

[*] 方法:

[*] 可以实验差异的 IoU Loss 变种 (如 SIoU, EIoU, WIoU) 看是否对小目标回归有改善
[*] CIoU/DIoU/GIoU: 思量了中心点距离、重叠面积、长宽比等因素,比原始 IoU 更稳定。
[*] SIoU (SCYLLA-IoU): 特别值得实验,因为它明白思量了 GT 和预测框之间的角度/方向差异,这对于有方向性的狭长目标(如线路)大概非常有效。
[*] WIoU (Wise-IoU): 提出了一种动态非单调聚焦机制,关注质量普通的样本,大概有助于处理外形奇特的困难样本。
[*] EIoU (Efficient IoU): 同时思量了重叠面积、中心点距离和宽高边

[*] 原理: 差异的损失函数对边界框回归或分类大概有差异的偏重,某些大概更适合小目标。

[*] 使用预训练模子和微调 (Pre-training and Fine-tuning):

[*] 方法: 使用在大型数据集(如 COCO)上预训练的权重作为起点,然后在你自己的包含大量小目标的数据集上进行长时间、充实的微调。
[*] 原理: 预训练模子学习了通用的特征提取能力,微调使其顺应特定任务的小目标。

[*] 超参数调优 (Hyperparameter Tuning):

[*] 方法: 仔细调解学习率、优化器、权重衰减、数据增强相关的超参数(如 scale, translate, degrees 等)。
[*] 原理: 合适的超参数对模子收敛和最终性能至关重要。

4. 后处理层面 (Post-processing Level)


[*] 调解置信度阈值和NMS阈值 (Adjust Confidence and NMS Thresholds):

[*] 方法: 在推理时,适当低落置信度阈值 (--conf-thres) 大概能召回更多的小目标,但这也会增加假阳性。调解非极大值抑制 (NMS) 的 IoU 阈值 (--iou-thres),如果小目标密集,大概需要更小的 IoU 阈值来区分它们。
[*] 原理: 阈值直接影响最终输出哪些检测框。

总结与建议:

[*] 最常用且有效的方法:

[*] 图像切片 (Tiling / SAHI): 对于高分辨率图像中的小目标检测,效果非常显著。
[*] 提高输入分辨率: 简朴直接,但受限于计算资源。
[*] 针对性数据增强 (Copy-Paste): 能有效增加小目标样本。
[*] 重新天生Anchor Boxes: 确保 Anchor 匹配你的数据。

[*] 需要修改模子结构的方法 (复杂度较高):

[*] 增加 P2 检测头: 潜力较大,但需要改代码。
[*] 引入留意力机制/优化 Neck/更换 Backbone: 更复杂,需要深入理解模子结构。

[*] 组合策略: 通常需要联合多种方法才能到达最佳效果。比方,可以同时使用图像切片、Copy-Paste 增强和调解 Anchor Boxes。
[*] 数据集是关键: 确保你的训练会合有足够数量、标注正确的小目标样本。再好的方法,没有好的数据也难以成功。
[*] 实验和评估: 没有一种方法是万能的。需要根据你的具体应用场景、数据特点和计算资源限制,进行实验和评估,找到最适合的策略组合。
开始时,建议先从数据层面(提高分辨率、切片、数据增强)和训练策略层面(调 Anchor、微调)入手,这些方法相对容易实现且往往能带来不错的提升。如果效果仍不满意,再思量修改模子结构,修改模子的一条核心准则就是从增大感受野入手

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
页: [1]
查看完整版本: 小目标、狭长目标检测的一些优化方法