在二进制模型中,二进制操作虽然能降低计算复杂度,但会导致信息损失和梯度错误,影响模型性能。为解决这些问题,在二进制 MLP 模块中引入 Shift module。
上面是原模型,下面是改进模型

1. Shift module介绍
通过水平、垂直和混合移位操作,对输入特征进行变换。水平移位将输入特征图向右移动一个像素,垂直移位与之类似,混合移位则从相邻四个令牌中提取特征并替换当前令牌特征。这些操作在通道维度上进行,重复操作和池化操作进一步增强特征融合,最终将移位操作结果与 MLP 层输出相加,缓解信息损失和梯度错误,提升模型性能。
2. YOLOv11与Shift module的结合
在 YOLOv11的C3K2模块中添加 Shift module ,增强特征的局部信息交互,通过移位操作融合不同位置特征,提升模型对目标特征的捕捉能力。还能降低计算量,在不显著增加参数量的情况下优化特征表达,进而提高模型检测精度和效率。
3. Shift module代码部分
视频讲解:
YOLOv8_improve/YOLOv11.md at master · tgf123/YOLOv8_improve · GitHub
用一篇论文教您如何使用YOLOv11改进模块写一篇1、2区论文_哔哩哔哩_bilibili
YOLOv11模型改进讲解,教您如何修改YOLOv11_哔哩哔哩_bilibili
YOLOv11全部代码,现有几十种改进机制。
4. Shift module引入到YOLOv11中
第一: 将下面的核心代码复制到D:\model\yolov11\ultralytics\change_model路径下,如下图所示。
第二:在task.py中导入包
第三:在YOLOv11\ultralytics\nn\tasks.py中的模型配置部分下面代码
第四:将模型配置文件复制到YOLOV11.YAMY文件中
第五:运行成功
from sympy import false
from ultralytics.models import NAS, RTDETR, SAM, YOLO, FastSAM, YOLOWorld
if __name__=="__main__":
# 使用自己的YOLOv8.yamy文件搭建模型并加载预训练权重训练模型
model = YOLO(r"E:\Part_time_job_orders\YOLO\YOLOv11\ultralytics\cfg\models\11\yolo11_Shift_channel_mix.yamy")\
.load(r'E:\Part_time_job_orders\YOLO\YOLOv11\yolo11n.pt') # build from YAML and transfer weights
results = model.train(data=r'E:\Part_time_job_orders\YOLO\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
)