Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >YOLOv8改进:渐近特征金字塔网络(AFPN)| 助力小目标检测

YOLOv8改进:渐近特征金字塔网络(AFPN)| 助力小目标检测

原创
作者头像
AI小怪兽
发布于 2023-10-25 02:41:05
发布于 2023-10-25 02:41:05
3.4K00
代码可运行
举报
文章被收录于专栏:YOLO大作战YOLO大作战
运行总次数:0
代码可运行

💡💡💡本文改进:渐近特征金字塔网络(AFPN),解决多尺度削弱了非相邻 Level 的融合效果。

AFPN | 亲测在多个数据集能够实现涨点,尤其在小目标数据集。

1.AFPN介绍

论文: 2306.15988.pdf (arxiv.org)

摘要:多尺度特征在目标检测任务中对具有尺度方差的目标进行编码时具有重要意义。多尺度特征提取的一种常见策略是采用经典的自上而下和自下而上的特征金字塔网络。然而,这些方法遭受特征信息的丢失或退化,削弱了非相邻 Level 的融合效果。本文提出了一种渐近特征金字塔网络(AFPN)来支持非相邻层的直接交互。AFPN是通过融合两个相邻的Low-Level特征来启动的,并渐进地将High-Level特征纳入融合过程。通过这种方式,可以避免非相邻 Level 之间的较大语义差距。考虑到在每个空间位置的特征融合过程中可能出现多目标信息冲突,进一步利用自适应空间融合操作来缓解这些不一致。本文将所提出的AFPN纳入两阶段和一阶段目标检测框架,并使用MS-COCO 2017验证和测试数据集进行评估。实验评估表明,与其他最先进的特征金字塔网络相比,作者的方法获得了更具竞争力的结果。

在Backbone网络自下而上的特征提取过程中,AFPN渐进地集成了Low-Level、High-Level和顶级特征。具体来说,AFPN最初融合了Low-Level特征,然后融合了深层特征,最后融合了最High-Level的特征,即最抽象的特征。非相邻层次特征之间的语义差距大于相邻层次特征间的语义差距,尤其是底部和顶部特征。这直接导致了非相邻层次特征的融合效果较差。因此,直接使用C2、C3、C4和C5进行特征融合是不合理的。由于AFPN的架构是渐进的,这将使不同 Level 特征的语义信息在渐进融合过程中更加接近,从而缓解上述问题。例如,C2和C3之间的特征融合减少了它们的语义差距。由于C3和C4是相邻的层次特征,因此减少了C2和C4之间的语义差距。

在多级特征融合过程中,作者利用ASFF为不同 Level 的特征分配不同的空间权重,增强了关键 Level 的重要性,并减轻了来自不同目标的矛盾信息的影响。

将提出的AFPN方法应用于两阶段和一阶段目标检测框架,并在MS-COCO 2017验证和测试数据集上进行评估。实验结果表明,所提出方法比其他最先进的特征金字塔网络取得了更具竞争力的结果

2.AFPN引入yolov8

2.1新建ultralytics/nn/head/AFPN.py

核心代码:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
class ASFF3(nn.Module):
    """ASFF3 module for YOLO AFPN head https://arxiv.org/abs/2306.15988"""

    def __init__(self, c1, c2, level=0):
        super().__init__()
        c1_l, c1_m, c1_h = c1[0], c1[1], c1[2]
        self.level = level
        self.dim = c1_l, c1_m, c1_h
        self.inter_dim = self.dim[self.level]
        compress_c = 8

        if level == 0:
            self.stride_level_1 = Upsample(c1_m, self.inter_dim)
            self.stride_level_2 = Upsample(c1_h, self.inter_dim, scale_factor=4)

        if level == 1:
            self.stride_level_0 = Conv(c1_l, self.inter_dim, 2, 2, 0)  # downsample 2x
            self.stride_level_2 = Upsample(c1_h, self.inter_dim)

        if level == 2:
            self.stride_level_0 = Conv(c1_l, self.inter_dim, 4, 4, 0)  # downsample 4x
            self.stride_level_1 = Conv(c1_m, self.inter_dim, 2, 2, 0)  # downsample 2x

        self.weight_level_0 = Conv(self.inter_dim, compress_c, 1, 1)
        self.weight_level_1 = Conv(self.inter_dim, compress_c, 1, 1)
        self.weight_level_2 = Conv(self.inter_dim, compress_c, 1, 1)

        self.weights_levels = nn.Conv2d(compress_c * 3, 3, kernel_size=1, stride=1, padding=0)
        self.conv = Conv(self.inter_dim, self.inter_dim, 3, 1)

    def forward(self, x):
        x_level_0, x_level_1, x_level_2 = x[0], x[1], x[2]

        if self.level == 0:
            level_0_resized = x_level_0
            level_1_resized = self.stride_level_1(x_level_1)
            level_2_resized = self.stride_level_2(x_level_2)

        elif self.level == 1:
            level_0_resized = self.stride_level_0(x_level_0)
            level_1_resized = x_level_1
            level_2_resized = self.stride_level_2(x_level_2)

        elif self.level == 2:
            level_0_resized = self.stride_level_0(x_level_0)
            level_1_resized = self.stride_level_1(x_level_1)
            level_2_resized = x_level_2

        level_0_weight_v = self.weight_level_0(level_0_resized)
        level_1_weight_v = self.weight_level_1(level_1_resized)
        level_2_weight_v = self.weight_level_2(level_2_resized)

        levels_weight_v = torch.cat((level_0_weight_v, level_1_weight_v, level_2_weight_v), 1)
        w = self.weights_levels(levels_weight_v)
        w = F.softmax(w, dim=1)

        fused_out_reduced = level_0_resized * w[:, :1] + level_1_resized * w[:, 1:2] + level_2_resized * w[:, 2:]
        return self.conv(fused_out_reduced)

详见:

https://cv2023.blog.csdn.net/article/details/132229675

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
一点就分享系列(实践篇3-上篇)— 修改YOLOV5 之”魔刀小试“+ Trick心得分享+V5精髓部分源码解读
DL部署大热,而我觉得回归原理和源码更加重要!正如去年,我也提倡部署工程化,眼争上班工作我这里也是以搬砖产出为主。但是今年嘛 我觉得很有必要研究研究,如果你不想被PASS,那就不能只限于工作任务。 检测领域YOLOV5肯定是大家的炼丹必备模型,收敛快,精度高都是其爱不释手的理由,各种魔改基础backbone或者别的trick也层出不穷,这些trick和优化V5的作者也在收集更新,大家只要跟着update就好。 上篇我主要分享下我若干改动中的两个改动,针对V5的head PAN后添加了ASFF自适应的特征融合检测层和注意力机制CBAM的模块,后续还有很多改动 一是我还在作实验,二是代码没整理好git,本篇计划故分为3篇篇幅的内容。
全栈程序员站长
2022/08/31
8320
一点就分享系列(实践篇3-上篇)— 修改YOLOV5 之”魔刀小试“+ Trick心得分享+V5精髓部分源码解读
目标检测 | 盘点目标检测中的特征融合技巧(根据YOLO v4总结)
在深度学习的很多工作中(例如目标检测、图像分割),融合不同尺度的特征是提高性能的一个重要手段。低层特征分辨率更高,包含更多位置、细节信息,但是由于经过的卷积更少,其语义性更低,噪声更多。高层特征具有更强的语义信息,但是分辨率很低,对细节的感知能力较差。如何将两者高效融合,取其长处,弃之糟泊,是改善分割模型的关键。
AI算法修炼营
2020/05/22
3.4K0
全新AFPN出现 | 完胜PAFPN,堪称YOLO系列的最佳搭档
目标检测是计算机视觉中的一个基本问题,旨在检测和定位图像或视频中的目标。随着深度学习的出现,目标检测发生了范式转变,基于深度学习的方法已成为主流方法。正在进行的研究导致了许多新方法的发展,表明了该领域进一Stride步的潜力。
集智书童公众号
2023/09/04
2.6K0
全新AFPN出现 | 完胜PAFPN,堪称YOLO系列的最佳搭档
FPN(特征图金字塔网络)理论基础与具体实现
论文地址:Feature Pyramid Networks for Object Detection
全栈程序员站长
2022/09/06
1.2K0
FPN(特征图金字塔网络)理论基础与具体实现
真正的即插即用!盘点11种CNN网络设计中精巧通用的“小”插件
所谓“插件”,就是要能锦上添花,又容易植入、落地,即真正的即插即用。本文盘点的“插件”能够提升CNN平移、旋转、scale等变性能力或多尺度特征提取,感受野等能力,在很多SOTA网络中都会看到它们的影子。 >>加入极市CV技术交流群,走在计算机视觉的最前沿
AIWalker
2021/01/18
6860
真正的即插即用!盘点11种CNN网络设计中精巧通用的“小”插件
YOLO11改进 | 北理工团队在小目标检测领域新创新!NECK层改进,即插即用特征融合模块!
近年来,无人机物体检测在遥感、交通监控、搜索行动和安全等应用领域获得了巨大的发展势头。这些应用的成功实施依赖于快速有效地识别无人机捕获图像中的物体。无人机物体检测面临着独特的挑战,由于分辨率低和背景混杂,导致特征信息有限,因此在无人机图像中小物体检测更容易受到噪声影响,导致有效信息有限。
CoovallyAIHub
2025/02/07
5660
YOLO11改进 | 北理工团队在小目标检测领域新创新!NECK层改进,即插即用特征融合模块!
特征金字塔网络与路径聚合网络的深度解析
特征金字塔网络(FPN)和路径聚合网络(PANet)是计算机视觉领域中处理多尺度目标检测的关键网络结构,它们通过不同策略实现跨层特征融合,显著提升了目标检测和实例分割任务的性能。FPN作为基础性工作,开创了特征金字塔在目标检测中的应用先河;而PANet则在FPN基础上进一步优化,通过双向特征融合机制实现了更全面的多尺度特征交互。
代码小李
2025/05/18
1300
特征金字塔特征用于目标检测
前言: 这篇文章主要使用特征金字塔网络来融合多层特征,改进了CNN特征提取。作者也在流行的Fast&Faster R-CNN上进行了实验,在COCO数据集上测试的结果现在排名第一,其中隐含的说明了其在小目标检测上取得了很大的进步。其实整体思想比较简单,但是实验部分非常详细和充分。 摘要: 特征金字塔是多尺度目标检测系统中的一个基本组成部分。近年来深度学习目标检测特意回避金字塔特征表示,因为特征金字塔在计算量和内存上很昂贵。所以作者利用了深度卷积神经网络固有的多尺度、多层级的金字塔结构去构建特征金字塔网络。
计算机视觉研究院
2018/04/17
1.8K0
特征金字塔特征用于目标检测
计算机视觉FPN: 特征金字塔网络
对用卷积神经网络进行目标检测方法的一种改进,通过提取多尺度的特征信息进行融合,进而提高目标检测的精度,特别是在小物体检测上的精度。FPN是ResNet或DenseNet等通用特征提取网络的附加组件,可以和经典网络组合提升原网络效果。
机器学习AI算法工程
2020/06/04
4.2K0
涨分利器!攻克目标检测难点秘籍之多尺度检测
在前面的秘籍一:模型加速之轻量化网络和秘籍二:非极大抑制算法和回归损失优化之路中,我们主要关注了轻量化网络,非极大值抑制算法、回归损失优化。但是要想获得较好的检测性能,检测算法的多尺度检测也极为重要。
BBuf
2020/02/21
1.3K0
涨分利器!攻克目标检测难点秘籍之多尺度检测
『深度概念』原理图解代码FPN Feature Pyramid Networks
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
小宋是呢
2019/12/02
2.5K0
全新FPN | 通道增强特征金字塔网络(CE-FPN)提升大中小目标检测的鲁棒性(文末附论文)
特征金字塔网络(FPN)已成为目标检测中提取多尺度特征的有效框架。然而,目前FPN-based的方法大多存在Channel Reduction的固有缺陷,导致语义信息的丢失。而融合后的各种特征图可能会造成严重的混叠效果。
集智书童公众号
2021/05/28
2.5K0
专栏 | CVPR 2017论文解读:特征金字塔网络FPN
机器之心专栏 作者:李俊 近日,CVPR 2017获奖论文公布,引起了业内极大的关注。但除了这些获奖论文,还有众多精彩的论文值得一读。因此在大会期间,国内自动驾驶创业公司 Momenta 联合机器之心
机器之心
2018/05/09
1.2K0
专栏 | CVPR 2017论文解读:特征金字塔网络FPN
【YOLOv8】YOLOv8改进系列(5)----替换主干网络之EfficientFormerV2
这篇论文介绍了一种名为 EfficientFormerV2 的新型高效视觉模型,旨在解决如何在移动设备上实现与 MobileNet 相当的模型大小和推理速度的同时,达到与 Vision Transformers (ViTs) 相似的高性能。
HABuo
2025/03/11
2960
【YOLOv8】YOLOv8改进系列(5)----替换主干网络之EfficientFormerV2
常见特征金字塔网络FPN及变体
预告一下,最近无事,根据个人多年的证券操作策略和自己的浅显的AI时间序列的算法知识,还有自己Javascript的现学现卖,在微信小程序上弄了个简单的辅助系统。我先试试效果如何,不错的话将来弄个文章给大家介绍介绍。
机器学习炼丹术
2020/11/11
2K0
常见特征金字塔网络FPN及变体
CenterNet的骨干网络之DLASeg
CenterNet中使用的DLASeg是在DLA-34的基础上添加了Deformable Convolution后的分割网络。
BBuf
2020/08/10
7.2K0
YOLOv8独家原创改进:FPN涨点篇 |多级特征融合金字塔(HS-FPN),助力小目标检测| 2024年最新论文
💡💡💡本文独家改进:高层筛选特征金字塔网络(HS-FPN),能够刷选出大小目标,增强模型表达不同尺度特征的能力,助力小目标检测
AI小怪兽
2024/02/05
3.9K0
目标检测算法之FPN(附FPN代码实现)
针对小目标检测网络,CV领域一般用的是特征金字塔。即将原图以不同的比例采样,然后得到不同分辨率的图像进行训练和测试,在多数情况下是有效的。但是特征金字塔的计算、内存和时间开销都非常大,导致在工程中应用是及其困难。FPN(即特征金字塔)提出了一个独特的特征金字塔网络来避免图像金字塔产生的超高计算量,同时可以较好的处理目标检测中的尺度变化问题,对于小目标检测具有很强的鲁棒性。
墨明棋妙27
2022/09/23
9150
FPN论文阅读笔记
FPN(feature pyramid networks) 是何凯明等作者提出的适用于多尺度目标检测算法。原来多数的 object detection 算法(比如 faster rcnn)都是只采用顶层特征做预测,但我们知道低层的特征语义信息比较少,但是目标位置准确;高层的特征语义信息比较丰富,但是目标位置比较粗略。另外虽然也有些算法采用多尺度特征融合的方式,但是一般是采用融合后的特征做预测,而本文不一样的地方在于预测是在不同特征层独立进行的。
嵌入式视觉
2022/09/05
5040
FPN论文阅读笔记
目标检测(object detection)系列(十) FPN:用特征金字塔引入多尺度
SSD算法证明了多层分支对于目标检测的有效性,在此之前two-stage的目标检测方法已经优化改进过很多代,但是一直没有加入多尺度的方法。终于在FPN中,two-stage引入了多尺度,并且在SSD多层分支方法的基础上进一步改进,提出了特征金字塔网络。FPN的论文是《Feature Pyramid Networks for Object Detection》。
chaibubble
2019/08/29
2K0
目标检测(object detection)系列(十) FPN:用特征金字塔引入多尺度
推荐阅读
相关推荐
一点就分享系列(实践篇3-上篇)— 修改YOLOV5 之”魔刀小试“+ Trick心得分享+V5精髓部分源码解读
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验