CSPNet: A New Backbone that can Enhance Learning Capability of CNN

摘要

作者提出了跨阶段部分网络(CSPNet),以缓解以往工作需从网络架构的角度进行大量推理计算的问题。作者将此问题归因于网络优化中梯度信息的重复。所提出的网络通过集成网络阶段开始和结束的特征图来尊重梯度的可变性,在作者的实验中,在ImageNet数据集上以同等甚至更高的精度减少了20%的计算量,并且在MS COCO目标检测数据集上的AP50方面显著优于 SOTA

1.引言

设计CSPNet的主要目的是使该体系结构能够实现更丰富的梯度组合,同时减少计算量。这一目标是通过将基础层的特征图划分为两个部分,然后通过提出的跨阶段层次结构将它们合并来实现的。

在这里插入图片描述

主要概念是通过拆分梯度流,使梯度流在不同的网络路径上传播。通过这种方式,作者证实了通过切换拼接 (switching concatenation) 和转换步骤 (transition steps),传播的梯度信息可以有很大的相关差异。此外,CSPNet 可以大大减少计算量,提高推理速度和精度,如图1所示。作者提出的基于cspnet的目标检测器解决了以下三个问题:

  • 增强 CNN 的学习能力
    所提出的CSPNet可以很容易地应用于ResNet、ResNeXt和DenseNet。在上述网络上应用CSPNet后,计算量可从10%减少到20%,但在ImageNet上进行图像分类任务时,其准确率优于ResNet、ResNeXt、DenseNet、HarDNet、Elastic和Res2Net
  • 消除计算瓶颈
  • 降低存储成本

3.方法

3.1Cross Stage Partial Network

k k k 层 CNN 的输出可以表示为

在这里插入图片描述
F F F 是输入 x 0 x_0 x0 到目标 y y y 的映射函数,也是整个 CNN 模型, H k H_k Hk 是 CNN 第 k k k 层的运算函数。通常, H k H_k Hk 由一组卷积层和一个非线性激活函数组成。以 ResNet 和 DenseNet 为例,分别用公式 2 和公式 3 表示,如下所示:

在这里插入图片描述

其中 R R R D D D 分别代表残差层和 Dense Layer 的计算算子,这些算子通常由 2 ~ 3 个卷积层组成

在残差网络(ResNet)或密集网络(DenseNet)中,每个卷积层的输入都接收到前面所有层的输出(ResNet 是元素级加法,DenseNet 是通道维度 concatenation)。这种设计能够减少梯度路径的长度,从而在反向传播过程中使梯度流传播更加高效。然而,这种架构设计也会导致第 k k k 层将梯度传递给所有 k − 1 k-1 k1 k − 2 k-2 k2、…、 1 1 1 层,并用这些梯度来更新权重,这样做会导致重复学习冗余的信息

简单来说,虽然这种设计可以提高梯度传播的效率,但同时也带来了梯度信息的重复使用问题,这可能会导致网络学习效率降低,因为它在多个层之间重复利用相同的梯度信息来进行学习

最近,一些研究尝试使用筛选后的 H k ( ⋅ ) H_k(\cdot) Hk() 输入来提高学习能力和参数利用率。

最先进的方法将重点放在优化每一层的 H i H_i Hi 函数上,作者建议 CSPNet 直接优化 F F F 函数如下:

在这里插入图片描述

其中 x 0 x_0 x0 沿通道维度分割成两部分,可被表示为: x 0 = [ x 0 ′ , x 0 ′ ′ ] x_0 = [x_{0^{'}}, x_{0^{''}}] x0=[x0,x0′′] T T T 是用于截断梯度流 H 1 H_1 H1, H 2 H_2 H2 … … H k H_k Hk 的转换函数(transition function)。

M M M 是用于混合两个被分割部分的转换函数(transition function)。接下来,作者展示如何将 CSPNet 集成到 DenseNet 中的示例,并解释如何解决 CNN 中重复信息的学习问题。

在这里插入图片描述

这张图展示了两种不同的神经网络架构的比较:传统的DenseNet(图a)和提出的Cross Stage Partial DenseNet(CSPDenseNet,图b)。

图 (a) DenseNet:
在DenseNet架构中,每一个Dense Layer(密集层)的输出不仅会被送入下一个层,而且会与之前所有层的输出进行连接(concat)。例如,在Dense Layer 1完成处理后,它的输出 x 1 x_1 x1 会被复制并与输入 x 0 x_0 x0 连接,作为Dense Layer 2的输入。这个过程在所有的Dense Layers中重复进行。这样,随着网络深度的增加,每个层都会积累越来越多的特征,直到在Transition Layer(转换层)中进行某种形式的维度缩减(通常是通过卷积操作)。

图 (b) Cross Stage Partial DenseNet(CSPDenseNet):
在CSPDenseNet架构中,输入特征图 x 0 x_0 x0 被分成两部分,其中一部分 x 0 ′ x_0' x0 直接传递到阶段 (stage) 的末尾,而另一部分 x 0 ′ ′ x_0'' x0′′ 则经过一系列的Dense Layers。在这些Dense Layers中,特征图依旧会进行复制和连接操作,但仅限于 x 0 ′ ′ x_0'' x0′′ 的部分。在经过了 k k k 个Dense Layers之后,这些处理过的特征图会与 x 0 ′ x_0' x0 进行连接,并通过一个Partial Transition Layer(部分转换层)进行特征整合和维度变换,输出 x U x_U xU

总的来说,CSPDenseNet通过在每个阶段初分割输入特征图,减少了冗余信息的传递,并试图通过这种方式平衡梯度流,提高网络学习的多样性,从而提高效率和减少计算资源的需求。这种结构对于在资源受限的设备上部署深度学习模型特别有价值。

DenseNet

DenseNet 的每个阶段(操作空间尺寸相同的特征图)包含一个密集块和一个过渡层,每个密集块由 k k k 个密集层(非线性映射层)组成。第 i i i 个密集层的输出将与第 i i i 个密集层的输入进行连接,连接后的结果将成为第 ( i + 1 ) (i + 1) (i+1) 个密集层的输入。表示上述机理的方程可表示为:

在这里插入图片描述

其中 ∗ * 表示卷积算子, [ x 0 , x 1 , … ] [x_0, x_1,…] [x0,x1] 表示连接(concatenation) x 0 , x 1 , … , x_0, x_1,…, x0,x1,,

w i w_i wi x i x_i xi 分别是第 i i i 个密集层的权值和输出。

如果利用反向传播来更新权值,则权值更新的方程可以写成:

在这里插入图片描述

其中, f i f_i fi 为第 i i i 个密集层的权值更新函数, g i g_i gi 为传播到第 i i i 个密集层的梯度。可以发现,在更新不同密度层的权重时,大量的梯度信息被重用。这将导致不同的密集层反复学习复制的梯度信息。

在这里,每个 w k ′ w'_k wk 表示第 k k k 层之后的权重更新,而 f k f_k fk 是更新函数,它依赖于当前层的权重 w k w_k wk 和所有前面层的梯度信息 g 0 ,

### YOLO 不同版本的区别对比 #### 1. **YOLO v1** YOLO (You Only Look Once) 是一种实时目标检测算法,其核心思想是将目标检测视为回归问题。YOLO v1 将输入图像划分为 $S \times S$ 的网格,并预测每个网格单元中的边界框及其置信度分数[^2]。 - 主要特点: - 输入图像被分割成固定大小的网格。 - 每个网格负责预测多个边界框和类别概率。 - 单阶段检测方法,速度快于传统两阶段方法(如 Faster R-CNN)。 - 局限性: - 对小目标的检测效果较差。 - 定位精度较低,在高 IOU 下表现不佳[^3]。 --- #### 2. **YOLO v2** YOLO v2 提出了改进版 Darknet-19 架构,并引入了锚框机制以提升定位能力。它还通过预训练分类任务提升了泛化性能[^4]。 - 主要改进: - 使用锚框(Anchor Boxes),增强对不同形状物体的适应能力。 - 增加分辨率调整策略,提高特征提取能力。 - 改进了多尺度训练方式,使模型更鲁棒。 - 性能提升: - mAP 和速度均有所改善。 - 更好的处理复杂场景下的目标分布。 --- #### 3. **YOLO v3** YOLO v3 进一步优化了架构设计,支持多尺度预测并增强了对小目标的检测能力。 - 关键特性: - 引入 FPN(Feature Pyramid Network)结构,实现多层次特征融合。 - 针对三种不同的尺寸进行预测,显著提高了小目标检测的效果。 - 继续沿用 Darknet-53 作为骨干网络,进一步提升效率与准确性。 - 缺点: - 虽然在 AP 上有较好表现,但在更高 IOU 条件下仍存在不足。 --- #### 4. **YOLO v4** YOLO v4 结合了许多先进的技术成果,例如 CSPNet、Mish 激活函数以及 DropBlock 正则化方法。 - 技术亮点: - CSPDarknet53 骨干网路减少了计算量的同时保持高性能。 - Mish 激活函数替代 ReLU,有助于梯度传播。 - CIoU Loss 函数用于更加精准的位置估计。 - 实验结果表明: - 在相同的硬件条件下,YOLO v4 达到了更高的 mAP 和 FPS 表现。 --- #### 5. **YOLO v5** YOLO v5 并未由原作者 Joseph Redmon 发布,而是由 Ultralytics 开发团队基于 PyTorch 推出的一个开源项目[^1]。 - 新增功能: - 自动超参数调节工具 HyperAutoLabel 及 AutoAnchor 功能简化数据准备流程。 - 支持多种预定义配置文件满足不同需求(nano, small, medium 等)。 - 易于扩展至自定义数据集上的应用开发。 - 应用优势: - 更低门槛适合初学者快速上手实践。 - 社区活跃更新频繁提供持续技术支持。 --- ```python import torch from models.experimental import attempt_load def load_yolov5_model(weights_path='yolov5s.pt'): model = attempt_load(weights_path, map_location=torch.device('cpu')) return model ``` 以上代码展示了如何加载 YOLOv5 模型权重文件以便后续推理操作。 --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值