YOLO11改进-模块-引入星型运算Star Blocks
当前网络设计中,“星型运算”(逐元素乘法)的应用原理未被充分探究,潜力有待挖掘。为解决此问题,我们引入 Star Blocks,其内部由 DW - Conv、BN、ReLU 等模块经星型运算连接,各模块有特定参数。同时揭示星型运算可将输入映射到高维非线性特征空间且无需拓宽网络。最终 StarNet 在紧凑结构和高效预算下实现了高性能与低延迟,有效提升了网络性能。本文考虑到YOLO目标检测的C3k2模块在特征融合的时候,高维非线性特征缺失,本文将Star Blocks与C3K2相结合,提出C3k2_StarsBlock模块。
左边是原模型,右边是改进模型
1. 星型运算Star Blocks结构介绍
1. 卷积层(Conv):模块中包含卷积层,用于提取特征。不同阶段(stage)的卷积层有不同的参数。例如,图中提到卷积层(Conv)的核大小(ks)为 3,步长(stride)为 2。
2. 深度可分离卷积(DW - Conv):模块中还包含深度可分离卷积层,用于进一步处理特征。深度可分离卷积层的核大小(ks)为 7,步长(stride)为 1。
3. 批量归一化(BN)和激活函数(ReLU):在模块中,深度可分离卷积层前后可能会有批量归一化和激活函数操作,用于归一化数据和引入非线性。
4. 星型运算(element - wise mul.,即星型乘法):这是 Star Blocks 模块的关键操作。星型运算将不同层的特征进行逐元素乘法,从而在不增加网络宽度的情况下,将输入映射到高维非线性特征空间。
2. YOLOv11与星型运算Star Blocks的结合
1. YOLO目标检测的C3k2模块在特征融合的时候,存在高维非线性特征缺失,本文将Star Blocks与C3K2相结合,提出C3k2_StarsBlock模块。
3. 星型运算Star Blocks代码部分
YOLOv8_improve/YOLOv11.md at master · tgf123/YOLOv8_improve
4. 将星型运算Star Blocks引入到YOLOv11中
第一: 将下面的核心代码复制到D:\model\yolov11\ultralytics\change_model路径下,如下图所示。
第二:在task.py中导入C3k2_StarsBlock包
第三:在task.py中的模型配置部分下面代码
第四:将模型配置文件复制到YOLOV11.YAMY文件中
第五:运行成功
from ultralytics.models import NAS, RTDETR, SAM, YOLO, FastSAM, YOLOWorld
if __name__=="__main__":
# 使用自己的YOLOv8.yamy文件搭建模型并加载预训练权重训练模型
model = YOLO(r"D:\model\yolov11\ultralytics\cfg\models\11\yolo11_starnet.yaml")\
.load(r'D:\model\yolov11\yolo11n.pt') # build from YAML and transfer weights
results = model.train(data=r'D:\model\yolov11\ultralytics\cfg\datasets\VOC_my.yaml',
epochs=300,
imgsz=640,
batch=64,
# cache = False,
# single_cls = False, # 是否是单类别检测
# workers = 0,
# resume=r'D:/model/yolov8/runs/detect/train/weights/last.pt',
# amp = True
)