【YOLOv10改进-特征融合】YOLO-MS MSBlock : 分层特征融合策略

简介: YOLOv10专栏介绍了YOLO-MS,一个优化多尺度目标检测的高效框架。YOLO-MS通过MS-Block和异构Kernel选择提升性能,平衡了计算复杂度与准确性。它在不依赖预训练的情况下,在COCO上超越同类模型,如YOLO-v7和RTMDet。MS-Block包含不同大小卷积的分支,用于增强特征表示。代码示例展示了MSBlock类的定义,用于处理不同尺度特征。该模块可应用于其他YOLO模型以提升性能。更多详情和配置参见相关链接。

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

专栏链接: YOLOv10 创新改进有效涨点

摘要

我们旨在为目标检测领域提供一种高效且性能卓越的目标检测器,称为YOLO-MS。其核心设计基于一系列调查研究,关于不同核心大小的卷积如何影响不同尺度物体的检测性能。研究结果是一种新策略,能够显著增强实时目标检测器的多尺度特征表示能力。为验证我们策略的有效性,我们构建了一个网络架构,命名为YOLO-MS。我们从零开始在MS COCO数据集上训练我们的YOLO-MS,不依赖于任何其他大规模数据集,如ImageNet,或预训练权重。无需任何附加装置,我们的YOLO-MS就超越了最新的实时目标检测器,包括YOLO-v7和RTMDet,当使用可比较的参数数量和FLOPs时。以YOLO-MS的XS版本为例,仅有4.5M的可学习参数和8.7G FLOPs,就能在MS COCO上达到43%+的AP得分,比相同模型大小的RTMDet高出约2%+。此外,我们的工作还可以作为一个即插即用的模块用于其他YOLO模型。通常,我们的方法显著提高了YOLOv8的AP,从37%+提高到了40%+,而且使用的参数和FLOPs还更少。

创新点

  1. 多尺度构建块(MS-Block)设计:YOLO-MS引入了MS-Block,一个具有分层特征融合策略的构建块,旨在增强实时目标检测器在提取多尺度特征时的能力。MS-Block通过将输入特征分割并传递到多个分支中,并在每个分支中应用具有不同Kernel大小的Inverted Bottleneck Block,来编码不同尺度的特征。

  2. 异构Kernel选择(HKS)协议:为了更有效地捕捉多尺度语义信息,YOLO-MS提出了一种在不同阶段中采用不同大小Kernel的策略。具体地,在编码器的浅层使用小Kernel卷积处理高分辨率特征,在深层使用大Kernel卷积捕捉更广泛的信息。这种设计使得YOLO-MS能够在保持高效推理的同时,提升对不同尺寸目标的检测性能。

  3. 高效性能与准确性的平衡:YOLO-MS在保持较低计算复杂度的条件下,实现了优于当时最先进实时目标检测器的性能。这得益于其精心设计的网络结构和创新的特征表示策略,如MS-Block和HKS协议,使得模型在不依赖任何大规模数据集预训练的情况下,也能在公开数据集上达到高精度。

  4. 即插即用的模块化设计:YOLO-MS不仅作为一个独立的目标检测模型存在,其核心组件如MS-Block也可以作为即插即用的模块,集成到其他YOLO系列模型中,以提升这些模型在多尺度目标检测任务上的性能。# MSBlock模块,包含多个MSBlockLayer,用于处理不同尺度的特征

yolov10 引入


 class MSBlock(nn.Module):
    def __init__(self, inc, ouc, kernel_sizes, in_expand_ratio=3., mid_expand_ratio=2., layers_num=3,
                 in_down_ratio=2.)-> None:
        super().__init__()
        # 根据扩展比例计算中间通道数
        in_channel = int(inc * in_expand_ratio // in_down_ratio)
        self.mid_channel = in_channel // len(kernel_sizes)
        groups = int(self.mid_channel * mid_expand_ratio)
        # 输入卷积层
        self.in_conv = Conv(inc, in_channel)

        self.mid_convs = []
        # 根据给定的核大小创建多个MSBlockLayer
        for kernel_size in kernel_sizes:
            if kernel_size == 1:
                self.mid_convs.append(nn.Identity())
                continue
            mid_convs = [MSBlockLayer(self.mid_channel, groups, k=kernel_size) for _ in range(int(layers_num))]
            self.mid_convs.append(nn.Sequential(*mid_convs))
        self.mid_convs = nn.ModuleList(self.mid_convs)
        # 输出卷积层
        self.out_conv = Conv(in_channel, ouc, 1)

        self.attention = None

    def forward(self, x):
        out = self.in_conv(x)
        channels = []
        # 分别处理每个通道范围内的特征,并合并
        for i, mid_conv in enumerate(self.mid_convs):
            channel = out[:, i * self.mid_channel:(i + 1) * self.mid_channel, ...]
            if i >= 1:
                channel = channel + channels[i - 1]
            channel = mid_conv(channel)
            channels.append(channel)
        out = torch.cat(channels, dim=1)
        out = self.out_conv(out)
        if self.attention is not None:
            out = self.attention(out)
        return out# MSBlock模块,包含多个MSBlockLayer,用于处理不同尺度的特征
class MSBlock(nn.Module):
    def __init__(self, inc, ouc, kernel_sizes, in_expand_ratio=3., mid_expand_ratio=2., layers_num=3,
                 in_down_ratio=2.)-> None:
        super().__init__()
        # 根据扩展比例计算中间通道数
        in_channel = int(inc * in_expand_ratio // in_down_ratio)
        self.mid_channel = in_channel // len(kernel_sizes)
        groups = int(self.mid_channel * mid_expand_ratio)
        # 输入卷积层
        self.in_conv = Conv(inc, in_channel)

        self.mid_convs = []
        # 根据给定的核大小创建多个MSBlockLayer
        for kernel_size in kernel_sizes:
            if kernel_size == 1:
                self.mid_convs.append(nn.Identity())
                continue
            mid_convs = [MSBlockLayer(self.mid_channel, groups, k=kernel_size) for _ in range(int(layers_num))]
            self.mid_convs.append(nn.Sequential(*mid_convs))
        self.mid_convs = nn.ModuleList(self.mid_convs)
        # 输出卷积层
        self.out_conv = Conv(in_channel, ouc, 1)

        self.attention = None

    def forward(self, x):
        out = self.in_conv(x)
        channels = []
        # 分别处理每个通道范围内的特征,并合并
        for i, mid_conv in enumerate(self.mid_convs):
            channel = out[:, i * self.mid_channel:(i + 1) * self.mid_channel, ...]
            if i >= 1:
                channel = channel + channels[i - 1]
            channel = mid_conv(channel)
            channels.append(channel)
        out = torch.cat(channels, dim=1)
        out = self.out_conv(out)
        if self.attention is not None:
            out = self.attention(out)
        return out

task与yaml配置

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

相关文章
|
3月前
|
机器学习/深度学习 编解码 文件存储
YOLOv8改进 | 融合改进篇 | BiFPN+ RepViT(教你如何融合改进机制)
YOLOv8改进 | 融合改进篇 | BiFPN+ RepViT(教你如何融合改进机制)
659 1
|
3月前
|
机器学习/深度学习 编解码 文件存储
YOLOv5改进 | 融合改进篇 | BiFPN+ RepViT(教你如何融合改进机制)
YOLOv5改进 | 融合改进篇 | BiFPN+ RepViT(教你如何融合改进机制)
989 1
|
3月前
|
机器学习/深度学习 编解码 自然语言处理
YOLOv8改进 | 主干篇 | RevColV1可逆列网络(特征解耦助力小目标检测)
YOLOv8改进 | 主干篇 | RevColV1可逆列网络(特征解耦助力小目标检测)
247 0
YOLOv8改进 | 主干篇 | RevColV1可逆列网络(特征解耦助力小目标检测)
|
24天前
|
机器学习/深度学习 计算机视觉
【YOLOv8改进 - 特征融合】 YOGA iAFF :注意力机制在颈部的多尺度特征融合
【YOLOv8改进 - 特征融合】 YOGA iAFF :注意力机制在颈部的多尺度特征融合
|
23天前
|
编解码 Go 文件存储
【YOLOv8改进 - 特征融合NECK】 DAMO-YOLO之RepGFPN :实时目标检测的创新型特征金字塔网络
【YOLOv8改进 - 特征融合NECK】 DAMO-YOLO之RepGFPN :实时目标检测的创新型特征金字塔网络
|
3月前
|
编解码 算法 计算机视觉
YOLO特征融合的原理是怎样的?
YOLO特征融合的原理是怎样的?
|
1月前
|
机器学习/深度学习 编解码 计算机视觉
【YOLOv8改进 - 特征融合NECK】 GIRAFFEDET之GFPN :广义特征金字塔网络,高效地融合多尺度特征
YOLOv8专栏探讨了目标检测的创新改进,提出了GiraffeDet,一种轻量级主干和深度颈部模块结合的高效检测网络。GiraffeDet使用S2D-chain和GFPN,优化多尺度信息交换,提升检测性能。代码和论文可在相关链接找到。GFPN通过跳跃和跨尺度连接增强信息融合。文章还展示了核心组件如SPPV4、Focus和CSPStage的代码实现。
|
1月前
|
机器学习/深度学习 大数据 计算机视觉
【YOLOv8改进 - 特征融合】 GELAN:YOLOV9 通用高效层聚合网络,高效且涨点
YOLOv8专栏探讨了深度学习中信息瓶颈问题,提出可编程梯度信息(PGI)和广义高效层聚合网络(GELAN),改善轻量级模型的信息利用率。GELAN在MS COCO数据集上表现优越,且PGI适用于不同规模的模型,甚至能超越预训练SOTA。[论文](https://arxiv.org/pdf/2402.13616)和[代码](https://github.com/WongKinYiu/yolov9)已开源。核心组件RepNCSPELAN4整合了RepNCSP块和卷积。更多详情及配置参见相关链接。
|
1月前
|
计算机视觉 网络架构
【YOLOv8改进 - 卷积Conv】DWRSeg:扩张式残差分割网络,提高特征提取效率和多尺度信息获取能力,助力小目标检测
YOLO目标检测专栏探讨了YOLO的创新改进,如多尺度特征提取的DWRSeg网络。该网络通过区域残差化和语义残差化提升效率,使用DWR和SIR模块优化高层和低层特征。DWRSeg在Cityscapes和CamVid数据集上表现优秀,速度与准确性兼备。论文和代码已公开。核心代码展示了一个包含DWR模块的卷积层。更多配置详情见相关链接。
|
1月前
|
机器学习/深度学习 安全 固态存储
【YOLOv8改进 - 注意力机制】LS-YOLO MSFE:新颖的多尺度特征提取模块 | 小目标/遥感
YOLO系列目标检测模型的新发展,LS-YOLO专为滑坡检测设计。它使用多尺度滑坡数据集(MSLD)和多尺度特征提取(MSFE)模块,结合ECA注意力,提升定位精度。通过改进的解耦头,利用膨胀卷积增强上下文信息。在滑坡检测任务中,LS-YOLO相对于YOLOv5s的AP提高了2.18%,达到97.06%。论文和代码已开源。