【YOLOv8改进】MobileNetV3替换Backbone (论文笔记+引入代码)

简介: YOLO目标检测专栏探讨了MobileNetV3的创新改进,该模型通过硬件感知的NAS和NetAdapt算法优化,适用于手机CPU。引入的新架构包括反转残差结构和线性瓶颈层,提出高效分割解码器LR-ASPP,提升了移动设备上的分类、检测和分割任务性能。MobileNetV3-Large在ImageNet上准确率提升3.2%,延迟降低20%,COCO检测速度增快25%。MobileNetV3-Small则在保持相近延迟下,准确率提高6.6%。此外,还展示了MobileNetV3_InvertedResidual模块的代码实现。

YOLO目标检测创新改进与实战案例专栏

专栏目录: YOLO有效改进系列及项目实战目录 包含卷积,主干 注意力,检测头等创新机制 以及 各种目标检测分割项目实战案例

专栏链接: YOLO基础解析+创新改进+实战案例

摘要

文章介绍了基于互补搜索技术组合以及新颖架构设计的MobileNets下一代,MobileNetV3。通过结合硬件感知的网络架构搜索(NAS)和NetAdapt算法,MobileNetV3针对手机CPU进行了优化,随后通过新颖的架构进步得到了改进。本文开始探索自动化搜索算法和网络设计如何共同作用,以利用互补方法提升整体艺术状态。通过这一过程,我们创建了两个新的MobileNet模型以供发布:面向高资源和低资源使用案例的MobileNetV3-Large和MobileNetV3-Small。这些模型随后被适配并应用于对象检测和语义分割任务。对于语义分割(或任何密集像素预测)任务,我们提出了一种新的高效分割解码器Lite Reduced Atrous Spatial Pyramid Pooling(LR-ASPP)。我们为移动分类、检测和分割实现了新的艺术状态水平。MobileNetV3-Large在ImageNet分类上的准确率比MobileNetV2高3.2%,同时减少了20%的延迟。与具有可比延迟的MobileNetV2模型相比,MobileNetV3-Small的准确率提高了6.6%。在COCO检测上,MobileNetV3-Large检测的速度比MobileNetV2快25%左右,准确率大致相同。在Cityscapes分割上,MobileNetV3-Large LR-ASPP比MobileNetV2 R-ASPP快34%,准确率相似。

创新点

MobileNetV3的创新点包括:

  1. 结合互补搜索技术和新颖架构设计:通过结合硬件感知的网络架构搜索(NAS)和NetAdapt算法,以及新颖的架构设计,实现了MobileNetV3的优化。

  2. 高效的分割解码器:提出了新的高效分割解码器Lite Reduced Atrous Spatial Pyramid Pooling(LR-ASPP),用于对象检测和语义分割任务。

  3. 高性能的MobileNetV3-Large和MobileNetV3-Small模型:针对高和低资源使用情况进行优化,在移动分类、检测和分割任务中取得了最新的技术成果。

  4. 引入了新颖的架构设计,包括反转残差结构和线性瓶颈层。

  5. 提高了准确性和性能:MobileNetV3-Large在ImageNet分类任务中比MobileNetV2准确性提高了3.2%,同时降低了20%的延迟;MobileNetV3-Small比MobileNetV2模型准确性提高了6.6%,延迟相当;MobileNetV3-Large在COCO检测中比MobileNetV2快25%以上,准确性相当;MobileNetV3-Large LR-ASPP在Cityscapes分割中比MobileNetV2 R-ASPP快34%,准确性相当。

yolov8 引入


class MobileNetV3_InvertedResidual(nn.Module):
    # MobileNetV3的倒置残差模块初始化
    def __init__(self, inp, oup, hidden_dim, kernel_size, stride, use_se, use_hs):
        super(MobileNetV3_InvertedResidual, self).__init__()
        # 断言stride值有效,确保步长为1或2
        assert stride in [1, 2]

        # 判断是否使用恒等映射,条件是步长为1且输入输出通道数相等
        self.identity = stride == 1 and inp == oup

        if inp == hidden_dim:
            # 如果输入通道数等于隐藏层通道数,直接在隐藏层上操作
            self.conv = nn.Sequential(
                # 深度可分离卷积
                nn.Conv2d(hidden_dim, hidden_dim, kernel_size, stride, (kernel_size - 1) // 2, groups=hidden_dim, bias=False),
                nn.BatchNorm2d(hidden_dim),
                # 根据use_hs选择Hardswish或ReLU激活函数
                nn.Hardswish() if use_hs else nn.ReLU(),
                # 根据use_se决定是否使用SEBlock
                SeBlock(hidden_dim) if use_se else nn.Sequential(),
                # 1x1卷积用于改变通道数
                nn.Conv2d(hidden_dim, oup, 1, 1, 0, bias=False),
                nn.BatchNorm2d(oup),
            )
        else:
            # 如果输入通道数不等于隐藏层通道数,使用1x1卷积改变通道数
            self.conv = nn.Sequential(
                # 使用1x1卷积层改变输入通道数至隐藏层通道数
                nn.Conv2d(inp, hidden_dim, 1, 1, 0, bias=False),
                nn.BatchNorm2d(hidden_dim),
                # 根据是否使用Hardswish激活函数选择相应激活函数
                nn.Hardswish() if use_hs else nn.ReLU(),
                # 深度可分离卷积,使用指定的核大小和步长,以及分组卷积来减少参数量和计算复杂度
                nn.Conv2d(hidden_dim, hidden_dim, kernel_size, stride, (kernel_size - 1) // 2, groups=hidden_dim, bias=False),
                nn.BatchNorm2d(hidden_dim),
                # 根据use_se标志决定是否在模块中加入SE块
                SeBlock(hidden_dim) if use_se else nn.Sequential(),
                # 再次根据是否使用Hardswish激活函数选择相应激活函数
                nn.Hardswish() if use_hs else nn.ReLU(),
                # 使用1x1卷积层改变通道数至输出通道数
                nn.Conv2d(hidden_dim, oup, 1, 1, 0, bias=False),
                nn.BatchNorm2d(oup),
            )

    def forward(self, x):
        # 前向传播函数
        y = self.conv(x)  # 通过定义的卷积结构处理输入
        if self.identity:
            # 如果identity为True,则表示使用恒等映射,直接将输入和输出相加
            return x + y
        else:
            # 如果不使用恒等映射,则直接返回卷积后的结果
            return y

task与yaml配置

详见:https://blog.csdn.net/shangyanaf/article/details/136891204

相关文章
|
2月前
|
机器学习/深度学习 编解码 计算机视觉
YOLOv8改进 | 主干篇 | SwinTransformer替换Backbone(附代码 + 详细修改步骤 +原理介绍)
YOLOv8改进 | 主干篇 | SwinTransformer替换Backbone(附代码 + 详细修改步骤 +原理介绍)
520 0
|
机器学习/深度学习 编解码 算法
yolo原理系列——yolov1--yolov5详细解释
yolo原理系列——yolov1--yolov5详细解释
1029 0
yolo原理系列——yolov1--yolov5详细解释
|
2月前
|
机器学习/深度学习 编解码 算法
YOLOv5改进 | 主干网络 | 用EfficientNet卷积替换backbone【教程+代码 】
在YOLOv5的GFLOPs计算量中,卷积占了其中大多数的比列,为了减少计算量,研究人员提出了用EfficientNet代替backbone。本文给大家带来的教程是**将原来的主干网络替换为EfficientNet。文章在介绍主要的原理后,将手把手教学如何进行模块的代码添加和修改,并将修改后的完整代码放在文章的最后,方便大家一键运行,小白也可轻松上手实践。以帮助您更好地学习深度学习目标检测YOLO系列的挑战。
|
1月前
|
机器学习/深度学习 编解码 算法
【YOLOv8改进】Polarized Self-Attention: 极化自注意力 (论文笔记+引入代码)
该专栏专注于YOLO目标检测算法的创新改进和实战应用,包括卷积、主干网络、注意力机制和检测头的改进。作者提出了一种名为极化自注意(PSA)块,结合极化过滤和增强功能,提高像素级回归任务的性能,如关键点估计和分割。PSA通过保持高分辨率和利用通道及空间注意力,减少了信息损失并适应非线性输出分布。实验证明,PSA能提升标准基线和最新技术1-4个百分点。代码示例展示了如何在YOLOv8中实现PSA模块。更多详细信息和配置可在提供的链接中找到。
|
1月前
|
机器学习/深度学习 计算机视觉 知识图谱
【YOLOv8改进】ACmix(Mixed Self-Attention and Convolution) (论文笔记+引入代码)
YOLO目标检测专栏探讨了YOLO的改进,包括卷积和自注意力机制的创新结合。研究发现两者在计算上存在关联,卷积可分解为1×1卷积,自注意力也可视为1×1卷积的变形。由此提出ACmix模型,它整合两种范式,降低计算开销,同时提升图像识别和下游任务的性能。ACmix优化了移位操作,采用模块化设计,实现两种技术优势的高效融合。代码和预训练模型可在相关GitHub和MindSpore模型库找到。 yolov8中引入了ACmix模块,详细配置参见指定链接。
|
1月前
|
机器学习/深度学习 测试技术 计算机视觉
【YOLOv8改进】DAT(Deformable Attention):可变性注意力 (论文笔记+引入代码)
YOLO目标检测创新改进与实战案例专栏探讨了YOLO的有效改进,包括卷积、主干、注意力和检测头等机制的创新,以及目标检测分割项目的实践。专栏介绍了Deformable Attention Transformer,它解决了Transformer全局感受野带来的问题,通过数据依赖的位置选择、灵活的偏移学习和全局键共享,聚焦相关区域并捕获更多特征。模型在多个基准测试中表现优秀,代码可在GitHub获取。此外,文章还展示了如何在YOLOv8中应用Deformable Attention。
|
1月前
|
机器学习/深度学习 编解码 计算机视觉
【YOLOv8改进】D-LKA Attention:可变形大核注意力 (论文笔记+引入代码)
YOLO目标检测专栏探讨了Transformer在医学图像分割的进展,但计算需求限制了模型的深度和分辨率。为此,提出了可变形大核注意力(D-LKA Attention),它使用大卷积核捕捉上下文信息,通过可变形卷积适应数据模式变化。D-LKA Net结合2D和3D版本的D-LKA Attention,提升了医学分割性能。YOLOv8引入了可变形卷积层以增强目标检测的准确性。相关代码和任务配置可在作者博客找到。
|
1月前
|
机器学习/深度学习 编解码 PyTorch
【YOLOv8改进】HAT(Hybrid Attention Transformer,)混合注意力机制 (论文笔记+引入代码)
YOLO目标检测专栏介绍了YOLO系列的改进方法和实战应用,包括卷积、主干网络、注意力机制和检测头的创新。提出的Hybrid Attention Transformer (HAT)结合通道注意力和窗口自注意力,激活更多像素以提升图像超分辨率效果。通过交叉窗口信息聚合和同任务预训练策略,HAT优化了Transformer在低级视觉任务中的性能。实验显示,HAT在图像超分辨率任务上显著优于现有方法。模型结构包含浅层和深层特征提取以及图像重建阶段。此外,提供了HAT模型的PyTorch实现代码。更多详细配置和任务说明可参考相关链接。
|
2月前
|
机器学习/深度学习 编解码 算法
YOLOv5改进 | 主干网络 | 将backbone替换为MobileNetV3【小白必备教程+附完整代码】
本文介绍了将YOLOv5的backbone替换为MobileNetV3以提升目标检测性能的教程。MobileNetV3采用倒残差结构、Squeeze-and-Excitation模块和Hard-Swish激活函数,实现更高性能和更低计算成本。文中提供了详细的代码实现,包括MobileNetV3的关键组件和YOLOv5的配置修改,便于读者实践。此外,还分享了完整代码链接和进一步的进阶策略,适合深度学习初学者和进阶者学习YOLO系列。
|
1月前
|
计算机视觉 机器学习/深度学习 自然语言处理
【YOLOv8改进】CoTAttention:上下文转换器注意力(论文笔记+引入代码)
本文介绍了YOLO目标检测的创新改进,提出了一种名为Contextual Transformer (CoT)块的新型Transformer模块,用于增强视觉识别能力。CoT块通过3×3卷积编码上下文信息,并结合动态多头注意力矩阵,提高了视觉表示。此外,还提到了Large Separable Kernel Attention (LSKA)模块,它解决了大内核卷积的计算效率问题。CoTNet是基于CoT模块的Transformer风格骨干网络,可替代ResNet中的3×3卷积。CoTAttention类展示了如何在YOLOv8中集成此模块。文章还提供了源码链接和更多实战案例详情。