YOLO11改进--增强对小目标的检测能力
在目标检测领域,YOLO系列算法以其高效性和准确性备受关注。然而,对于小目标检测,YOLO算法仍存在一定的局限性。小目标在图像中占比小、特征不明显,容易被忽略或误判。本文将介绍如何通过增加小目标检测头和添加CBAM注意力机制来改进YOLOv11,提升其对小目标的检测能力。
添加小目标检测头
原始的YOLO11输出层只有P5、P4、P3三层。对输入的 640 × 640 的图像进行了三次下采样,最终输出的三个特征图的大小依次为 80 × 80(P3)、40 × 40(P4) 和 20 × 20(P5)。特征图的大小与输入图像各网格单元对应区域大小成反比关系,所以从 P3 到 P5,对小目标的检测能力依次下降。为了解决由于多层卷积导致的特征信息淹没问题,可以在原有网络的基础上增加新的检测头P2。
首先找到ultralytics-main/ultralytics/cfg/models/11目录下的yolo11.yaml文件,复制一份并改个名字,例如yolo11-improved.yaml。在该yaml文件文件中,删除原有内容,并复制以下代码:
1 | # Ultralytics YOLO 🚀, AGPL-3.0 license |
添加CBAM模块
添加CBAM代码
在ultralytics/nn/modules目录下新建文件CBAM.py,复制粘贴以下代码:
1 | import torch |
修改task.py文件
在/ultralytics/nn目录下找到task.py文件。先导入刚刚创建的CBAM.py
1 | from ultralytics.nn.modules.CBAM import myCBAM #导入CBAM模块 |
然后找到parse_model模块在该模块中添加:
1 | elif m in {myCBAM}: |
修改yaml文件
回到刚刚创建的yolo11-improved.yaml文件,在head模块中,只需在想使用CBAM的位置添加即可,例如:
1 | # YOLO11-P2 head |
这里,我在特征融合部分共插入了5个 CBAM 模块,分别位于每
一个 C3k2 模块之后。
改进结果
原始YOLO11检测结果
改进后的YOLO11检测结果
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 cantutas!