当前深度学习发展趋势是构建更深更大的卷积神经网络来解决视觉任务,但这些网络计算量巨大。而在实际应用中,像无人机、机器人和智能手机等移动平台计算资源有限,许多现有工作聚焦于对 “基础” 网络架构进行修剪、压缩或低比特表示,ShuffleNet 则旨在探索一种针对特定计算范围(10 - 150 MFLOPs)的高效基础架构。此外,像 Xception 和 ResNeXt 等先进架构在极小网络中,由于 1×1 卷积成本高,效率会降低,这也促使了 ShuffleNet 的提出。
上面是原模型,下面是改进模型
1. ShuffleNet v1介绍
逐点分组卷积(Pointwise Group Convolution):为降低 1×1 卷积的计算复杂度,在 1×1 层应用分组卷积,使每个卷积仅在相应输入通道组上操作,减少计算量。
通道混洗(Channel Shuffle):分组卷积虽减少计算量,但会导致信息在通道组间流动受限。通道混洗操作通过重新排列通道,使后续卷积层能从不同组获取输入数据,增强信息交流。具体实现是将卷积层输出通道维度重塑、转置后再展平作为下一层输入,且该操作可微,能用于端到端训练。
从提供的图片来看,ShuffleNet v1模块主要包含以下几个部分:
ShuffleNet 单元:基于瓶颈单元设计,在其残差分支中,3×3 层采用深度可分离卷积降低计算量。将第一个 1×1 层替换为逐点分组卷积并添加通道混洗操作,第二个逐点分组卷积用于恢复通道维度以匹配捷径连接。当 ShuffleNet 应用步长时,在捷径路径添加 3×3 平均池化,用通道拼接代替元素相加以扩大通道维度。
整体网络架构:主要由堆叠的 ShuffleNet 单元组成,分为三个阶段。每个阶段的第一个构建块步长为 2,同一阶段内其他超参数保持不变,下一阶段输出通道数翻倍。瓶颈通道数设置为每个 ShuffleNet 单元输出通道数的 1/4。通过调整分组数和应用尺度因子可定制网络复杂度。
2. YOLOv11与ShuffleNet v1的结合
使用 ShuffleNet v1 替换 YOLO 结构,能显著降低计算量,提升模型在移动设备上的运行速度,使其更适配资源受限场景。它还能在保持一定精度的同时,利用独特的结构设计增强特征提取能力,进而提高目标检测效率
3. ShuffleNet v1代码部分
视频讲解:
YOLOv8_improve/YOLOv11.md at master · tgf123/YOLOv8_improve · GitHub
YOLOv11模型改进讲解,教您如何替换原有的YOLO11 backbone提升精度_哔哩哔哩_bilibili
YOLOv11全部代码,现有一百种作用的改进机制。
4. ShuffleNet v1引入到YOLOv11中
第一: 将下面的核心代码复制到D:\model\yolov11\ultralytics\change_models路径下,如下图所示。
第二:在task.py中导入包
第三:在YOLOv11\ultralytics\nn\tasks.py中的模型配置部分下面代码
第四:将模型配置文件复制到YOLOV11.YAMY文件中
第五:运行成功
from ultralytics.models import NAS, RTDETR, SAM, YOLO, FastSAM, YOLOWorld
if __name__=="__main__":
# 使用自己的YOLOv8.yamy文件搭建模型并加载预训练权重训练模型
model = YOLO(r"E:\bilibili\model\YOLOV8_new\ultralytics-main\ultralytics\cfg\models\11\yolo11_shufflenetv1_X1_0.yaml")\
# .load(r'E:\bilibili\model\YOLOV8_new\ultralytics-main\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=8,
# cache = False,
# single_cls = False, # 是否是单类别检测
# workers = 0,
# resume='',
amp = True
)