Panoptic FPN-Panoptic Feature Pyramid Networks用于全景分割的特征金字塔网络

论文地址: Panoptic Feature Pyramid Networks

0. 摘要

  当下用于语义分割和实例分割的方法使用的是完全不同的网络,二者之间没有很好的共享计算,该论文通过赋予Mask R-CNN一个使用特征金字塔网络的语义分割分支来在架构层面将这两种方法结合成一个单一网络来同时完成实例分割和语义分割的任务。

1. 介绍

  该论文的目标是设计一个相对简单的单一网络来进行全景分割,即一种同时进行实例分割和语义分割的分割任务,然而设计这样的一个网络面临着很大的挑战。对于语义分割任务来说,空洞卷积扩充的FCNs是目前主流的方法;对于实例分割来说,带有特征金字网络的基于区域提议的Mask R-CNN则比较常见。改论文避免了在两个任务各自的精度上做取舍,设计的模型能够同时产生实例分割中的区块输出和语义分割中的像素密集输出。
在这里插入图片描述
  论文提出的模型结构如上图,保持FPN主干网络不变,在这个主干的基础上新增一个与实例分割的分支并行的分支进行语义分割。这两个分支的训练对于最终产生结果的好坏影响很大论文中也在损失函数,训练批次,学习率,数据增广等多方面进行了研究,
  最终发现单独对每个分支进行训练最终会得到非常好的结果,实例分割效果和Mask R-CNN相同,语义分割的效果与重量级的模型DeepLabV3+相近。
  对于全景分割来说,适当的训练单个FPN来同时解决两个问题和训练两个FPNs的效果相同,前者还能减少一半的计算量。Panoptic FPN在Mask R-CNN上加了一个轻量级的前端,内存占用和计算量上都非常高效,而且避免了使用空洞卷积。论文也可以移植使用不同的主干网络来获得更好的性能,比如ResNeXt。

2. 全景分割特征金字塔网络

  Panoptic FPN是一个简单的单一网络同时实现实例分割和语义分割并希望取得顶级的效果,两个任务一齐称为全景分割。

2.1 模型架构

特征金字塔网络:FPN网络使用一个标准的网络提取多个空间位置的特征,然后加一个轻量级的自顶而下的通路,并且和特征提取网络横向连接。自定而下的通路在网络最深的层开始然后进行上采样,生成原始图像的1/32,1/16,1/8,1/4四个分辨率的特征图,每个层级的通道数默认都是256.
实例分割分支:FPN和相同通道数的设计都是为了基于区域提议的目标检测器更易于检测。例如,FPN之后Faster R-CNN在不同的金字塔层级分别进行RoI池化,然后增加一个网络分支来为每个候选区域预测其类别得分和边界框位置。为了得到实例分割的结果,扩展Faster R-CNN新增一个FCN分支来为每一个候选区域生成一个二进制掩码图,即Mask R-CNN。
Panoptic FPN:该论文的工作就是对带有FPN的Mask R-CNN进行修改使其能够进行逐像素的语义分割预测。然而为了得到这个逐像素的预测,有三个必须的条件:

  • 一是分辨率适当高的特征图以便捕获细节信息
  • 二是编码密集语义信息的同时进行类别预测
  • 三是捕获多尺度的信息

  尽管FPN是为目标检测设计的,但是这三个条件FPN正好具备,因此只需要在FPN上添加一个简单的分支用于语义分割即可。
在这里插入图片描述
语义分割分支:这个分支的构造如上图所示,最顶层的输入来字FPN最底层的输出,但是都进行了上采样操作恢复至特征图的四分之一大小,,每个上采样阶段包括一个 3 × 3 3\times 3 3×3的卷积层,一个ReLU层和一个两倍双线性内插上采样。之后的横向连接也用到了这个基础的上采样模块。最终特征图的结果是原始图像的四分之一,最终接一个 1 × 1 1 \times 1 1×1卷积核一个四倍双线性内插上采样恢复到原始的尺寸,然后使用softmax来生成类别标签。[还有一个特殊的其他类,没理解,原文:for all pixels belonging to objects to avoid predicting stuff classes for such pixels,感觉就是背景]
其他实现细节:FPN每个金字塔层级都有256个输出通道,语义分割分支降到128个。对于FPN之前的主干网络,论文选择了带有BN的在ImageNet预训练的Resnet和ResNeXt。在进行微调的时候,将BN换成一个固定的信道仿射变换。

2.2 推断和训练

  实例分割和语义分割的输出会有部分重合,进行一个后处理以消除这种重合:

  • 根据它们的置信图消除不同实例之间的重叠
  • 根据实例之间的差别消除语义分割和实例分割的重叠
  • 一处stuff region根据分类(其他类)或者是设定的阈值

联合训练:实例分割训练会产生三个损失函数即 L C , L b , L m L_C,L_b,L_m LCLbLm,实例分割的损失就是此三者之和,前两个损失函数通过RoIs采样的数量进行归一化,后一个损失通过RoIs判定为前景的数量进行归一化。语义分割的损失 L S L_S LS,通过已分类的像素点的数量进行归一化。这两个分支的损失有不同的初读和归一化策略,简单地加在一起用于联合训练显然不可行,可以通过两个参数 λ i 和 λ s \lambda_i和\lambda_s λiλs来调节二者所占的比重。

3. 实验和结果

论文的目标是证明Panoptic FPN可以作为一个简单有效的单网络baseline,用于实例分割、语义分割,以及他们的联合任务全景分割。
因此,我们从测试语义分割方法(这个单任务变体称为Semantic FPN)开始分析,这个简单的模型在COCO和Cityscapes数据集上实现了具有竞争力的语义分割结果。
接下来,分析了语义分割分支与Mask R-CNN的集成,以及联合训练的效果。最后,我们再次在COCO和Cityscapes数据集上展示了全景分割的结果。定性结果如下图:
在这里插入图片描述
在这里插入图片描述
欢迎扫描二维码关注微信公众号 深度学习与数学   [每天获取免费的大数据、AI等相关的学习资源、经典和最新的深度学习相关的论文研读,算法和其他互联网技能的学习,概率论、线性代数等高等数学知识的回顾]
在这里插入图片描述

本课程适合具有一定深度学习基础,希望发展为深度学习计算机视觉方向的算法工程师和研发人员的同学们。基于深度学习计算机视觉是目前人工智能最活跃的领域,应用非常广泛,如人脸识别和无人驾驶中的机器视觉等。该领域的发展日新月异,网络模型和算法层出不穷。如何快速入门并达到可以从事研发的高度对新手和中级水平的学生而言面临不少的挑战。精心准备的本课程希望帮助大家尽快掌握基于深度学习计算机视觉的基本原理、核心算法和当前的领先技术,从而有望成为深度学习计算机视觉方向的算法工程师和研发人员。本课程系统全面地讲述基于深度学习计算机视觉技术的原理并进行项目实践。课程涵盖计算机视觉的七大任务,包括图像分类、目标检测、图像分割语义分割实例分割全景分割)、人脸识别、图像描述、图像检索、图像生成(利用生成对抗网络)。本课程注重原理和实践相结合,逐篇深入解读经典和前沿论文70余篇,图文并茂破译算法难点, 使用思维导图梳理技术要点。项目实践使用Keras框架(后端为Tensorflow),学员可快速上手。通过本课程的学习,学员可把握基于深度学习计算机视觉的技术发展脉络,掌握相关技术原理和算法,有助于开展该领域的研究与开发实战工作。另外,深度学习计算机视觉方向的知识结构及学习建议请参见本人优快云博客。本课程提供课程资料的课件PPT(pdf格式)和项目实践代码,方便学员学习和复习。本课程分为上下两部分,其中上部包含课程的前五章(课程介绍、深度学习基础、图像分类、目标检测、图像分割),下部包含课程的后四章(人脸识别、图像描述、图像检索、图像生成)。
HS-FPN(高层筛选特征金字塔网络)是一种专门用于解决多尺度目标检测问题的网络架构,尤其是在处理不同尺寸的白细胞等目标时表现出色。该结构基于特征金字塔网络FPN),通过构建多尺度特征层次结构来增强模型对不同大小目标的检测能力[^1]。 ### 网络架构设计 HS-FPN的核心思想是利用高层语义信息来筛选和权衡低层的空间细节信息,并将这些信息融合到高层特征中。这种双向交互机制使得网络能够更好地表达不同尺度的目标特征。具体来说: - **高层特征**:具有更强的语义信息,适合检测大目标。 - **低层特征**:保留了更多的空间细节,适合检测小目标。 - 在HS-FPN中,高层特征会反向传播到低层特征,通过某种权重机制对低层特征进行筛选和调整,然后与原始低层特征进行融合,从而提升整体性能。 ### 特征金字塔设计 HS-FPN的特征金字塔设计通常包括以下几个关键步骤: 1. **自上而下路径**:从高层特征开始,逐步上采样并与来自中间层的特征图结合。 2. **横向连接**:将自上而下的特征与对应的低层特征进行融合,通常使用逐元素相加或拼接操作。 3. **高层筛选机制**:引入一个额外的模块来计算高层特征对低层特征的权重,从而动态地调整低层特征的重要性。 这种设计允许HS-FPN在不同层级之间传递信息,使模型能够在多个尺度上同时保持高精度的检测能力[^1]。 ### 目标检测中的应用 HS-FPN可以广泛应用于目标检测任务,特别是在需要处理多尺度目标的情况下。例如,在医学图像分析中,HS-FPN可以帮助更准确地检测不同尺寸的白细胞;在自动驾驶场景中,它可以用于识别远处的小型物体如行人、交通标志等。由于其强大的尺度适应性,HS-FPN已经被集成到一些最新的目标检测框架中,如YOLOv8-pose关键点检测系统中[^2]。 ### 示例代码 以下是一个简化的PyTorch风格伪代码示例,展示了如何实现HS-FPN的基本结构: ```python import torch import torch.nn as nn import torch.nn.functional as F class HSFusion(nn.Module): def __init__(self, in_channels): super(HSFusion, self).__init__() self.conv = nn.Conv2d(in_channels, in_channels, kernel_size=1) def forward(self, high_feat, low_feat): # 上采样高层特征 upsampled_high_feat = F.interpolate(high_feat, size=low_feat.shape[2:], mode='nearest') # 使用高层特征筛选低层特征 weights = torch.sigmoid(self.conv(upsampled_high_feat)) # 融合后的特征 fused_feat = weights * low_feat + upsampled_high_feat return fused_feat # 假设我们有三个层级的特征图 c3, c4, c5 = 256, 512, 1024 h, w = 64, 64 # 假设输入特征图的尺寸 # 创建HS-FPN模块 hs_fpn3 = HSFusion(c3) hs_fpn4 = HSFusion(c4) # 模拟输入特征 feat3 = torch.randn(1, c3, h, w) feat4 = torch.randn(1, c4, h//2, w//2) feat5 = torch.randn(1, c5, h//4, w//4) # 自上而下融合 p5 = feat5 p4 = hs_fpn4(p5, feat4) p3 = hs_fpn3(p4, feat3) print("Fused Features P3:", p3.shape) print("Fused Features P4:", p4.shape) print("Fused Features P5:", p5.shape) ``` 这段代码定义了一个简单的HS-FPN模块,它接受两个特征图作为输入,并返回融合后的特征图。通过这种方式,HS-FPN可以在不同层级之间传递和融合信息,从而提升模型的多尺度检测能力。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值