深入浅出之PANet网络

一、PANET的提出背景、时间与作者

提出背景

实例分割是计算机视觉领域中最重要和最具挑战性的任务之一,其目标是预测类标签和按像素排列的实例Mask,以定位图像中呈现的不同数量的实例。这项技术广泛应用于自动驾驶汽车、机器人技术、视频监控等领域。然而,传统的实例分割方法如Mask R-CNN在特征金字塔的构建和特征融合方面存在不足,如底层特征到高层特征的信息路径过长,导致定位信息流动困难,以及每个候选区域仅依赖于单一特征层进行预测,限制了信息的完整性和多样性。

时间与作者

PANet(Path Aggregation Network 路径聚合网络)由香港中文大学、清华大学、腾讯优图实验室等机构的研究人员于2018年提出,并发表在CVPR 2018会议上。这一研究旨在通过改进特征金字塔的构建和特征融合方式,提升实例分割和目标检测的性能。

二、PANET的主要贡献

PANet的主要贡献可以归纳为以下几点:

  1. 自底向上的路径增强:通过引入自下而上的路径增强,利用低层中的精确定位信号来增强整个特征金字塔,从而缩短从底层到顶层的信息路径。
  2. 自适应特征池化:提出自适应特征池化技术,允许每个候选区域获取所有特征层的信息,避免仅依赖于被人为指定的某个特征层,从而提高了信息的完整性和多样性。
  3. 全连接融合:在mask预测分支中增加全连接融合,与原有的FCN路径互补,获取不同视角的预测结果进行融合,进一步提升了mask预测的质量。

三、PANET的网络结构

PANet(Path Aggregation Network)最大的贡献是提出了一个自顶向下和自底向上的双向融合骨干网络,同时在最底层和最高层之间添加了一条“short-cut”,用于缩短层之间的路径。

PANet还提出了自适应特征池化和全连接融合两个模块。

其中自适应特征池化可以用于聚合不同层之间的特征,保证特征的完整性和多样性,而通过全连接融合可以得到更加准确的预测mask。

PANet的整体结构:

PANet的网络结构如图1所示,它由5个核心模块组成。

PANet的网络结构主要包括以下几个部分:

  • (a)FPN(特征金字塔网络):用于生成金字塔式的特征图。
  •   (b) 自下而上的路径增强(Bottom-up Path Augmentation):在FPN的基础上,增加自下而上的路径,通过下采样和特征融合操作,得到新的特征图。
  •  (c) 自适应特征池化(Adaptive Feature Pooling):对每个候选区域,在每个特征层上进行ROI Align池化,然后将不同层的特征图进行最大值融合,得到融合后的特征图作为候选区域的最终表征。
  • (d)和(e)框分支和分割预测分支:边框分支用于预测候选区域的边框,分割预测分支则用于预测候选区域的mask。在分割预测分支中,除了原有的FCN路径外,还增加了全连接融合路径。

FPN

FPN 特征金字塔结构,请参考《深入浅出之FPN (Feature Pyramid Networks for Object Detection)网络

在FPN中,因为要走自底向上的过程,浅层的特征传递到顶层需要经过几十个甚至上百个网络层,当然这取决于BackBone网络用的什么,因此经过这么多层传递之后,浅层的特征信息丢失就会比较严重。

(a)的最左侧是一个线性网络结构,通过这个自底向上模块,可以得到 [C1、C2、C3、C4、C5] 五组不同尺寸的Feature Map。

FPN通过自顶向下的路径得到4组Feature Map: [P5、P4、P3、P2] 。

其中上采样采用的是双线性差值, Pi 和Ci 的融合采用的是单位加的方式。

FPN的融合方式

PANet

PANet在FPN的自底向上的路径之后又添加了一个自底向上的路径,通过这个路径PANet得到 [N2、N3、N4、N5] 共4个Feature Map。

PANet通过一个更浅层的Ni 和更深层的Pi+1 融合的方式得到它的下一层Ni+1 ,以N2 到N3 的计算为例。

它先通过一个步长为2的3*3 卷积对N2进行下采样,再通过单位加的方式将P3和下采样之后的Feature Map进行特征融合。

接着再使用一个3*3的卷积对特征进行融合,增加融合之后的特征的表征能力。

最后使用ReLU激活函数对特征进行非线性化。

在PANet中,[N3、N4、N5]均是采用上面的融合方式,而N2是直接复制的P2的值。

PANet的融合方式

此外PANet还在自顶向下模块和自底向上模块各添加了一个跨越多层的shortcut,如图中的红色和绿色虚线。

自适应特征池化

在FPN中,每个Feature Map都会输出一个预测结果。

FPN这么做的原因是出于感受野和网络深度成正比的关系,即网络越深,网络上的像素点的感受野越大。

但其实不同的层次的Feature Map的不同特性并不仅仅只有感受野,还有它们不同的侧重点,基于这个思想,PANet提出了融合所有层的Feature Map的池化操作:自适应特征池化层。

自适应特征池化先将通过RPN提取的ROI压缩成一维的特征向量,然后通过取max或者取和的方式进行不同Feature Map的融合,最后在融合之后的基础上记性bounding box和类别的预测。

​​

全连接融合

全连接和FCN都被广泛应用到分割图的预测,但是FCN和全连接都有它们各自的优点。

FCN给出的像素点级别的预测是基于它的局部感受野和共享的卷积核。

全连接的特点在于它是对位置敏感的,因为它对于不同的空间位置的预测都是使用不同的参数进行预测的,因此全连接层具有适应不同空间位置的能力。

同时全连接的每个像素点的预测都是基于整个图的信息,这对于区分物体是否是同一个对象也非常重要。

基于这个动机,PANet提出了对FCN和全连接融合的结构。

其主分支由4个连续的3*3卷积核一个上采样2倍的反卷积组成,它用来预测每个类别的mask分支。

全连接融合的另一个分支是从conv3叉出的一个全连接层,它先通过两个3*3卷积进行降维,然后将其展开成一维向量,然后通过这个向量预测类别不可知的前景/背景的mask。

最后再通过一个reshape操作将其还原为 28*28的Feature Map。

这里一般只使用一个全连接层,因为两个以上的全连接会使空间特征遭到破坏。

最后在单位加和一个sigmoid激活函数得到最终输出。

​四、Yolo中的PANet

YOLOv4中的PANet(Path Aggregation Network,路径聚合网络)是一个重要的组成部分,它主要用于增强特征信息的聚合和传递,从而提高目标检测的准确性。以下是关于YOLOv4中PANet的详细解析:

4.1、PANet的作用与特点

  • 特征融合:PANet通过一种保留空间和语义信息的方式,将不同层次的特征结合起来。这种特征融合机制有助于模型更好地理解和检测图像中的目标,尤其是对小目标的检测效果有显著提升。
  • 路径增强:PANet在FPN(Feature Pyramid Networks,特征金字塔网络)的基础上增加了自下而上的路径增强(Bottom-up Path Augmentation),使得低层特征信息能够更有效地传递到高层,同时减少了高层到低层的信息流通需要穿过的卷积层数。
  • 多尺度信息整合:PANet能够整合多尺度的特征信息,使得模型在检测不同大小的目标时具有更强的鲁棒性。

4.2、PANet在YOLOv4中的实现

  • 结构集成:在YOLOv4的框架中,PANet作为颈部(Neck)的一部分,与SPP(Spatial Pyramid Pooling,空间金字塔池化)等模块共同构成了一个强大的特征提取和融合网络。
  • 特征图处理:PANet对输入的特征图进行一系列处理,包括卷积、上采样、下采样等操作,以生成具有丰富语义信息和空间信息的特征图。
  • 信息聚合:通过PANet中的路径聚合机制,不同层次的特征图被有效地聚合在一起,形成了更具代表性的特征表示。

PANet位在于YOLOv4模型的neck,主要通过保留空间信息来增强实例分割过程。

当图像经过神经网络的各个层时,特征的复杂度增加 ,同时图像的空间分辨率降低 。

YOLOv3中使用的FPN使用自顶向下的路径来提取语义丰富的特征并将其与精确的定位信息结合起来。

但对于为大目标生成mask,这种方法可能会导致路径过于冗长,因为空间信息可能需要传播到数百个层。

另一方面,PANet使用另一条自底向上的路径,而FPN采用的自顶向下的路径。

通过使用从底层到顶层的横向连接,这有助于缩短路径。

这就是所谓的“shortcut”连接,它只有大约10层。

PANet通常使用自适应特征池化将相邻的层相加到一起进行mask预测。

但是,在YOLOv4中使用PANet时,这种方法做了点修改,不是相加相邻的层,而是对它们应用一个拼接操作,以提高预测的准确性。

张量连接concat也是一种融合方式,只不过把如何融合交给了下一层卷积核的学习。

而add有一种先验在里面,就是假设特征图的每层代表着不同的语义信息,而待融合的两个特征图每个层是对应的,并且相比于concat,add操作使得相加以后,对应的层对应的特征分享相同的权重。

 4.3、PANet对YOLOv4性能的影响

  • 提升检测精度:PANet的引入显著提升了YOLOv4在目标检测任务中的精度,特别是对于小目标和复杂场景下的目标检测效果更加明显。
  • 保持检测速度:尽管PANet增加了网络的复杂度和计算量,但YOLOv4通过优化网络结构和训练策略,仍然保持了较高的检测速度,实现了速度与精度的良好平衡。

4.4  panet pytorch实现

在PyTorch中实现YOLOv4中的PANet(Path Aggregation Network)部分,你需要首先理解YOLOv4的整体架构,特别是其颈部(Neck)部分,因为PANet通常作为颈部的一部分来增强特征融合。

YOLOv4的颈部通常结合了SPP(Spatial Pyramid Pooling)和PANet来增强特征表示。以下是一个简化的PyTorch实现思路,用于说明如何在YOLOv4中集成PANet。

首先,你需要定义一些基本的卷积块,如残差块(Residual Block)或瓶颈块(Bottleneck Block),这些块将用于构建PANet。

import torch  
import torch.nn as nn  
import torch.nn.functional as F  
  
class ConvBlock(nn.Module):  
    def __init__(self, in_channels, out_channels, kernel_size, stride=1, padding=0):  
        super(ConvBlock, self).__init__()  
        self.conv = nn.Conv2d(in_channels, out_channels, kernel_size, stride, padding, bias=False)  
        self.bn = nn.BatchNorm2d(out_channels)  
        self.leaky_relu = nn.LeakyReLU(0.1)  
  
    def forward(self, x):  
        x = self.conv(x)  
        x = self.bn(x)  
        x = self.leaky_relu(x)  
        return x  
  
# 假设的残差块或瓶颈块,具体实现可能根据YOLOv4的原始实现有所不同  
class ResidualBlock(nn.Module):  
    # 这里只是一个示例,YOLOv4中可能使用更复杂的残差块  
    def __init__(self, in_channels, out_channels):  
        super(ResidualBlock, self).__init__()  
        # 添加卷积层等  
  
    def forward(self, x):  
        # 实现残差连接  
        return x + self.some_conv_layers(x)

接下来,你可以开始构建PANet。PANet主要由两部分组成:自顶向下的特征金字塔(类似于FPN)和自底向上的路径增强。

class PANet(nn.Module):  
    def __init__(self, in_channels_list, out_channels):  
        super(PANet, self).__init__()  
        # 初始化自顶向下的路径(类似于FPN)  
        self.top_down_blocks = nn.ModuleList([  
            ConvBlock(in_channels, out_channels, kernel_size=1) for in_channels in in_channels_list  
        ])  
  
        # 初始化自底向上的路径(路径增强)  
        # 注意:这里需要根据你的特征图尺寸和通道数来适当设计  
        # 假设每个上采样后都接一个卷积块  
        self.bottom_up_blocks = nn.ModuleList([  
            ConvBlock(out_channels, out_channels, kernel_size=3, stride=1, padding=1) for _ in range(len(in_channels_list) - 1)  
        ])  
        self.upsamples = nn.ModuleList([  
            nn.Upsample(scale_factor=2, mode='bilinear', align_corners=True) for _ in range(len(in_channels_list) - 1)  
        ])  
  
    def forward(self, features):  
        # features是一个特征图列表,按从低到高的顺序排列  
        # 自顶向下路径  
        top_down_features = [block(feature) for feature, block in zip(features, self.top_down_blocks)]  
  
        # 初始化自底向上路径的输入  
        bottom_up_features = [top_down_features[-1]]  
  
        # 自底向上路径  
        for i in range(len(top_down_features) - 2, -1, -1):  
            upsampled_feature = self.upsamples[i](bottom_up_features[-1])  
            concatenated_feature = torch.cat([upsampled_feature, top_down_features[i]], dim=1)  
            bottom_up_features.append(self.bottom_up_blocks[i](concatenated_feature))  
  
        # 注意:这里bottom_up_features列表现在是反向的,你可能需要反转它以匹配原始特征图的顺序  
        # 或者,你可以直接在后续处理中按需要索引这些特征图  
  
        # 返回处理后的特征图列表(或根据需要进行其他处理)  
        return bottom_up_features[::-1]

 请注意,上面的PANet类是一个简化的示例,用于说明如何在PyTorch中实现PANet的基本结构。在实际应用中,YOLOv4的PANet实现可能会更加复杂,包括更多的卷积层、残差连接、不同的上采样方法等。此外,YOLOv4的PANet通常还会与SPP等模块结合使用,以进一步增强特征表示。

最后,请确保你的in_channels_listout_channels参数与你的网络架构相匹配,并且你的特征图列表features已经按照从低到高的顺序排列。

 

4.5、总结

YOLOv4中的PANet是一个关键的技术创新点,它通过增强特征信息的聚合和传递,提高了目标检测的准确性和鲁棒性。PANet的引入使得YOLOv4在多个计算机视觉任务中表现出色,成为当前最流行的目标检测算法之一。

五、PANET的实现过程

PANet的实现过程主要包括以下几个步骤:

  1. 特征提取:使用预训练的卷积神经网络(如ResNet)作为backbone,提取图像的特征图。
  2. 特征金字塔构建:通过FPN构建金字塔式的特征图。
  3. 自下而上的路径增强:在FPN的基础上,增加自下而上的路径,通过下采样和特征融合操作,得到新的特征图。
  4. 自适应特征池化:对每个候选区域,在每个特征层上进行ROI Align池化,然后将不同层的特征图进行最大值融合。
  5. 边框预测和mask预测:使用边框分支预测候选区域的边框,使用分割预测分支预测候选区域的mask。在分割预测分支中,融合FCN路径和全连接融合路径的预测结果。

六、PANET的优缺点

优点

  1. 性能优异:在多个数据集上取得了优异的性能,特别是在实例分割和目标检测任务中表现突出。
  2. 信息流动增强:通过自下而上的路径增强和自适应特征池化,增强了信息在特征金字塔中的流动,提高了特征的完整性和多样性。
  3. 结构灵活:PANet的结构灵活,可以应用于各种基于CNN的目标检测模型。

缺点

  1. 计算开销增加:由于增加了自下而上的路径和自适应特征池化等操作,PANet的计算开销相比FPN有所增加。
  2. 参数调优复杂:PANet包含多个模块和参数,需要仔细调优以达到最佳性能。

七、PANET的应用前景

PANet在实例分割和目标检测领域展现出了优异的性能,具有广泛的应用前景。随着自动驾驶、机器人技术、视频监控等领域的不断发展,对实例分割和目标检测技术的需求将不断增加。PANet作为一种高效、灵活的实例分割和目标检测模型,有望在这些领域发挥重要作用。同时,随着深度学习技术的不断进步和计算资源的日益丰富,PANet的性能和应用范围还将进一步提升和拓展。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值