深圳Yolo 视觉
深圳
立即加入
词汇表

特征金字塔网络(FPN)

探索特征金字塔网络 (FPN) 如何增强多尺度目标 detect。了解 Ultralytics YOLO26 如何使用先进的 FPN 来 detect 小型和大型目标。

特征金字塔网络 (FPN) 是现代计算机视觉 (CV)系统中用于改进对不同尺度目标detect的专门架构组件。它有效解决了图像分析中长期存在的挑战:在同一图像中识别大型突出结构和微小远距离细节。通过生成输入的(概念上类似于金字塔的)多尺度表示,FPN允许神经网络在每个分辨率级别提取丰富的语义信息。这种架构通常位于提取原始特征的骨干网络和预测目标类别及边界框的detect头之间。

特征金字塔网络的工作原理

FPN 的核心创新在于其信息处理方式。传统的卷积神经网络 (CNNs) 自然地创建了一个特征层级结构,其中输入图像被逐步下采样。尽管这加深了语义理解(知道图像中有什么),但它通常会降低空间分辨率(精确知道在哪里),导致小目标消失。

FPN 通过三步过程解决此问题:

  1. 自下而上的路径:这是网络的标准前向传播过程,例如 残差网络 (ResNet)。随着网络处理图像,它会创建 特征图,这些特征图尺寸减小但语义价值增加。
  2. 自上而下路径:网络通过上采样深层中语义丰富的特征来构建更高分辨率的金字塔。这一步骤将强大的上下文信息重新注入到更大的空间图中。
  3. 横向连接:为了恢复下采样过程中丢失的清晰细节,FPNs通过横向连接将上采样特征与来自自底向上路径的原始高分辨率特征图融合。

这种组合形成了一个金字塔,其中每个级别都具有强大的语义良好的定位能力,显著提升了所有目标尺寸的precisionrecall

在目标 detect 架构中的重要性

FPN 是现代目标 detect 架构的基石。在其引入之前,模型必须在速度(仅使用最终层)或准确性(处理图像金字塔,这非常慢)之间做出选择。FPN 提供了一种两全其美的解决方案,实现了实时推理,同时不牺牲小目标 detect 能力。

这种效率对于像YOLO26这样的先进模型至关重要,它利用受 FPN 原理(如 PANet)启发的复杂聚合网络,以实现最先进的性能。该架构确保无论模型是通过Ultralytics Platform部署在边缘设备还是强大服务器上,它都能在各种数据集中保持高准确性。

实际应用

FPN 的多尺度能力使其在安全和精度至关重要的行业中不可或缺。

  • 汽车AI:自动驾驶汽车必须同时track附近的重型卡车和远处的微小交通灯或行人。FPNs使感知堆栈能够一次性处理这些不同尺度的目标,确保及时决策。nuScenes等数据集常用于衡量这些能力。
  • 医学图像分析: 在诊断成像中,detect 病理需要发现大小差异很大的异常。配备 FPN 的模型可以在 MRI 扫描中识别大型器官结构和微小早期肿瘤,帮助放射科医生做出准确诊断。
  • 农业AI:精准农业依赖于从无人机图像中detect农作物和病虫害。由于无人机飞行高度的变化,图像中植物的大小也会随之改变。FPNs帮助模型实现良好的泛化能力,无论相机高度如何,都能准确执行目标计数

FPN 与其他特征聚合器

区分标准 FPN 与在新架构中发现的其演进变体是有益的。

  • FPN 与 PANet:FPN添加了自上而下的路径以丰富特征,而路径聚合网络 (PANet)则在FPN之上添加了一个额外的自下而上的路径。这缩短了低级特征的信息路径,进一步提高了定位能力,该技术常在YOLO模型中采用。
  • FPN 与 BiFPN:在EfficientDet中发现的双向特征金字塔网络 (BiFPN)为不同的特征引入了可学习的权重,并移除了只有一个输入的节点,从而优化了网络的效率。

实例

先进的库,例如 ultralytics 内部处理 FPN 构建的复杂性。当您加载像 YOLO26 这样的模型时,该架构会自动包含这些特征聚合层以最大限度地提高性能。

from ultralytics import YOLO

# Load the YOLO26 model, which uses advanced feature pyramid principles internally
# The 'n' suffix indicates the nano version, optimized for speed
model = YOLO("yolo26n.pt")

# Perform inference on an image containing objects of various sizes
# The model's neck (FPN-based) aggregates features to detect small and large items
results = model("https://ultralytics.com/images/bus.jpg")

# Display results to see bounding boxes around buses (large) and people (small)
results[0].show()

让我们一起共建AI的未来!

开启您的机器学习未来之旅