首页 > 其他分享 >YOLOv11融合针对小目标FFCA-YOPLO中的FEM模块及相关改进思路

YOLOv11融合针对小目标FFCA-YOPLO中的FEM模块及相关改进思路

时间:2024-11-18 20:48:06浏览次数:3  
标签:YOPLO self FEM stride YOLOv11 planes FFCA inter out


YOLOv11v10v8使用教程:  YOLOv11入门到入土使用教程

YOLOv11改进汇总贴:YOLOv11及自研模型更新汇总 


《FFCA-YOLO for Small Object Detection in Remote Sensing Images》

一、 模块介绍

        论文链接:https://ieeexplore.ieee.org/document/10423050

        代码链接:yemu1138178251/FFCA-YOLO (github.com)

论文速览:

        特征表示不足、背景混淆等问题使得遥感中小目标的探测任务变得艰巨。特别是当算法将部署在机上进行实时处理时,这需要在有限的计算资源下对准确性和速度进行广泛的优化。为了解决这些问题,本文提出了一种称为特征增强、融合和上下文感知 YOLO (FFCA-YOLO) 的高效检测器。FFCA-YOLO 包括三个创新的轻量级和即插即用模块:功能增强模块 (FEM)、功能融合模块 (FFM) 和空间上下文感知模块 (SCAM)。这三个模块分别提高了局域网感知、多尺度特征融合和全局关联跨信道和空间的网络能力,同时尽可能避免增加复杂性。因此,小物体的弱特征表示得到了增强,并且抑制了可能混淆的背景。此外,为了在保证效率的同时进一步减少计算资源消耗,通过基于部分卷积 (PConv) 重建 FFCA-YOLO 的主干和颈部,优化了 FFCA-YOLO (L-FFCA-YOLO) 的精简版。

总结:文章提出几个针对小目标的特征提取模块,有一定效果。


二、 加入到YOLO中

2.1 创建脚本文件

        首先在ultralytics->nn路径下创建blocks.py脚本,用于存放模块代码。

2.2 复制代码        

        复制代码粘到刚刚创建的blocks.py脚本中,如下图所示:

import torch
import torch.nn as nn
from ultralytics.nn.modules.conv import Conv


class BasicConv_FFCA(nn.Module):
    def __init__(self, in_planes, out_planes, kernel_size, stride=1, padding=0, dilation=1, groups=1, relu=True,
                 bn=True, bias=False):
        super(BasicConv_FFCA, self).__init__()
        self.out_channels = out_planes
        self.conv = nn.Conv2d(in_planes, out_planes, kernel_size=kernel_size, stride=stride, padding=padding,
                              dilation=dilation, groups=groups, bias=bias)
        self.bn = nn.BatchNorm2d(out_planes, eps=1e-5, momentum=0.01, affine=True) if bn else None
        self.relu = nn.ReLU(inplace=True) if relu else None

    def forward(self, x):
        x = self.conv(x)
        if self.bn is not None:
            x = self.bn(x)
        if self.relu is not None:
            x = self.relu(x)
        return x


class FEM(nn.Module):
    def __init__(self, in_planes, out_planes, stride=1, scale=0.1, map_reduce=8):
        super(FEM, self).__init__()
        self.scale = scale
        self.out_channels = out_planes
        inter_planes = in_planes // map_reduce
        self.branch0 = nn.Sequential(
            BasicConv_FFCA(in_planes, 2 * inter_planes, kernel_size=1, stride=stride),
            BasicConv_FFCA(2 * inter_planes, 2 * inter_planes, kernel_size=3, stride=1, padding=1, relu=False)
        )
        self.branch1 = nn.Sequential(
            BasicConv_FFCA(in_planes, inter_planes, kernel_size=1, stride=1),
            BasicConv_FFCA(inter_planes, (inter_planes // 2) * 3, kernel_size=(1, 3), stride=stride, padding=(0, 1)),
            BasicConv_FFCA((inter_planes // 2) * 3, 2 * inter_planes, kernel_size=(3, 1), stride=stride, padding=(1, 0)),
            BasicConv_FFCA(2 * inter_planes, 2 * inter_planes, kernel_size=3, stride=1, padding=5, dilation=5, relu=False)
        )
        self.branch2 = nn.Sequential(
            BasicConv_FFCA(in_planes, inter_planes, kernel_size=1, stride=1),
            BasicConv_FFCA(inter_planes, (inter_planes // 2) * 3, kernel_size=(3, 1), stride=stride, padding=(1, 0)),
            BasicConv_FFCA((inter_planes // 2) * 3, 2 * inter_planes, kernel_size=(1, 3), stride=stride, padding=(0, 1)),
            BasicConv_FFCA(2 * inter_planes, 2 * inter_planes, kernel_size=3, stride=1, padding=5, dilation=5, relu=False)
        )

        self.ConvLinear = BasicConv_FFCA(6 * inter_planes, out_planes, kernel_size=1, stride=1, relu=False)
        self.shortcut = BasicConv_FFCA(in_planes, out_planes, kernel_size=1, stride=stride, relu=False)
        self.relu = nn.ReLU(inplace=False)

    def forward(self, x):
        x0 = self.branch0(x)
        x1 = self.branch1(x)
        x2 = self.branch2(x)

        out = torch.cat((x0, x1, x2), 1)
        out = self.ConvLinear(out)
        short = self.shortcut(x)
        out = out * self.scale + short
        out = self.relu(out)

        return out

2.3 更改task.py文件 

       打开ultralytics->nn->modules->task.py,在脚本空白处导入函数。

from ultralytics.nn.blocks import *

        之后找到模型解析函数parse_model(约在tasks.py脚本中940行左右位置,可能因代码版本不同变动),在该函数的最后一个else分支上面增加相关解析代码。

        elif m is FEM:
            c2 = args[0]
            args = [ch[f], *args]

2.4 更改yaml文件 

yam文件解读:YOLO系列 “.yaml“文件解读_yolo yaml文件-CSDN博客

       打开更改ultralytics/cfg/models/11路径下的YOLOv11.yaml文件,替换原有模块。(放在该位置仅能插入该模块,具体效果未知。博主精力有限,仅完成与其他模块二次创新融合的测试,结构图见文末,代码见群文件更新。)

# Ultralytics YOLO 

标签:YOPLO,self,FEM,stride,YOLOv11,planes,FFCA,inter,out
From: https://blog.csdn.net/StopAndGoyyy/article/details/143866491

相关文章

  • yolov11|多尺度扩张注意力|MSDA
    论文:arxiv.org/pdf/2302.01791importtorchimporttorch.nnasnnfromfunctoolsimportpartialfromtimm.models.layersimportDropPath,to_2tuple,trunc_normal_fromtimm.models.registryimportregister_modelfromtimm.models.vision_transformerimport_cfg......
  • 【深度学习目标检测|YOLO算法5-2-3】YOLO家族进化史:从YOLOv1到YOLOv11的架构创新、性
    【深度学习目标检测|YOLO算法5-2-3】YOLO家族进化史:从YOLOv1到YOLOv11的架构创新、性能优化与行业应用全解析…【深度学习目标检测|YOLO算法5-2-3】YOLO家族进化史:从YOLOv1到YOLOv11的架构创新、性能优化与行业应用全解析…文章目录【深度学习目标检测|YOLO算法5-2-3......
  • YOLOv11改进,YOLOv11结合DynamicConv(动态卷积),CVPR2024,二次创新C3k2结构
    摘要大规模视觉预训练显著提高了大规模视觉模型的性能。现有的低FLOPs模型无法从大规模预训练中受益。在本文中,作者提出了一种新的设计原则,称为ParameterNet,旨在通过最小化FLOPs的增加来增加大规模视觉预训练模型中的参数数量。利用DynamicConv动态卷积将额外的参......
  • DL00337-基于yolov11的阿尔兹海默症检测诊断含数据集python
    阿尔兹海默症是一种渐进性的神经退行性疾病,通常通过认知障碍、记忆丧失、语言障碍等症状表现出来。早期诊断是控制疾病发展的关键,但现有的诊断方法如临床评估、神经影像检查(CT、MRI等)通常具有一定的局限性。YOLOv11能够帮助提取医学影像中的有价值特征,进而辅助阿尔兹海默症的诊......
  • 【YOLOv11[基础]】实例分割Seg | 导出ONNX模型 | ONN模型推理以及检测结果可视化 | py
    本文将导出YOLO-Seg.pt模型对应的ONNX模型,并且使用ONNX模型推理以及结果的可视化。话不多说,先看看效果图吧!!!目录一导出ONNX模型二推理及检测结果可视化1代码2效果图......
  • 【YOLOv11改进 - 注意力机制】EMA(Efficient Multi-Scale Attention):基于跨空间学习的高
    介绍摘要通道或空间注意力机制在许多计算机视觉任务中表现出显著的效果,可以生成更清晰的特征表示。然而,通过通道维度缩减来建模跨通道关系可能会对提取深度视觉表示带来副作用。本文提出了一种新颖高效的多尺度注意力(EMA)模块。该模块着重于保留每个通道的信息并减少计算开销,我......
  • YOLOv11 正式发布!你需要知道什么? 另附:YOLOv8 与YOLOv11 各模型性能比较
    YOLOv11目标检测创新改进与实战案例专栏点击查看文章目录:YOLOv11创新改进系列及项目实战目录包含卷积,主干注意力,检测头等创新机制以及各种目标检测分割项目实战案例点击查看专栏链接:YOLOv11目标检测创新改进与实战案例2024年9月30日,Ultralytics在他们的YOLOVision活动......
  • yolov11目标检测与跟踪+区域识别+车道线流量计数
    概述本项目旨在利用最新的YOLOV11模型实现一个实时车辆检测与计数系统。该系统能够准确地检测并计算多车道(车道A、车道B、车道C)上的车辆数量,并为交通监控和管理提供宝贵的数据洞察。通过结合先进的计算机视觉技术和高效的深度学习模型,该系统能够大幅提升交通管理的效率和......
  • 数据分析-38-时间序列分解之时变滤波器经验模态分解TVFEMD
    文章目录1时间序列模态分解1.1模态分解的概念1.2模态分解的作用1.3常用的模态分解方法1.4模态分解的常用库2时变滤波器经验模态分解TVFEMD2.1TVFEMD的流程2.2加载数据集2.2.1数据重采样2.2.2原始数据可视化2.3代码实现TVFEMD3参考附......
  • 【YOLOv11改进 - 注意力机制】LSKA(Large Separable Kernel Attention):大核分离卷积注
    YOLOv11目标检测创新改进与实战案例专栏点击查看文章目录:YOLOv11创新改进系列及项目实战目录包含卷积,主干注意力,检测头等创新机制以及各种目标检测分割项目实战案例点击查看专栏链接:YOLOv11目标检测创新改进与实战案例@目录YOLOv11目标检测创新改进与实战案例专栏介......