# CNN 与多层感知机 (MLP) 的优势对比

相比传统的 MLP,CNN 在处理图像数据时具有显著优势:

  • 局部连接 (Local Connectivity):每个神经元只与输入图像的局部区域相连。这种连接方式大幅减少了网络参数,有效降低了过拟合的风险。
  • 参数共享 (Parameter Sharing):同一个卷积核(过滤器)在整个输入图像上滑动,提取相同的特征类型。这种机制能够捕捉图像中的空间结构和局部模式,提高了计算效率并进一步减少了参数量。
  • 层次化特征学习 (Hierarchical Feature Learning):通过多层卷积,CNN 能够逐层学习从简单的局部特征(如边缘、角点)到复杂的高级特征(如物体、形状)的层次化表示,从而有效识别图像中的各种模式和结构。
  • 平移不变性 (Translation Invariance):卷积操作使 CNN 能够提取空间不变特征,这意味着即使图像中的物体位置发生变化,其重要特征(如纹理)也能被稳定识别,提高了模型的泛化能力。

# CNN 的数值计算与结构

# 核心参数

  • 输入维度B×Cin×H×WB \times C_{in} \times H \times W (批次大小 x 输入通道数 x 高 x 宽)
  • 卷积核大小Cout×Cin×Kh×KwC_{out} \times C_{in} \times K_h \times K_w (输出通道数 x 输入通道数 x 卷积核高 x 卷积核宽)
  • 偏置大小CoutC_{out} (输出通道数)
  • 输出维度B×Cout×H×WB \times C_{out} \times H^\prime \times W^\prime (批次大小 x 输出通道数 x 输出高 x 输出宽)
  • 输出形状计算
    • 输出的高/宽 H,WH^\prime, W^\prime 可由以下公式计算:

    H=H+2PKhstrideh+1H^\prime = \lfloor \frac{H + 2P - K_h}{\text{stride}_h} \rfloor + 1

    W=W+2PKwstridew+1W^\prime = \lfloor \frac{W + 2P - K_w}{\text{stride}_w} \rfloor + 1

    • 其中,H/WH/W 是初始长或宽,PP 是填充 (Padding) 大小,Kh/KwK_h/K_w 是卷积核长或宽,strideh/stridew\text{stride}_h/\text{stride}_w 是步长。

# 感受野 (Receptive Field)

  • 单层卷积:每层卷积会增加 (K1)(K-1) 的感受野大小,其中 KK 是卷积核大小。
  • 多层网络:若所有卷积核大小相同,一个 LL 层网络的感受野大小为 1+L(K1)1 + L(K-1)

# 经典 CNN 网络发展历程

  • AlexNet:首个成功应用大规模深度学习的 CNN 模型。
    • 首次使用 ReLU 作为激活函数,加速了训练过程。
    • 通过大量数据增强来避免过拟合。
  • VGGNet:以更小的卷积核构建更深的网络。
    • 使用多个 3×33\times3 的小卷积核代替一个大卷积核,例如,三个 3×33\times3 卷积核的堆叠能够达到一个 7×77\times7 卷积核的相同感受野,但参数量更少。
    • 通过堆叠更多卷积层,增加了网络的非线性程度。
  • GoogleNet:构建了更深且计算更高效的网络。
    • 引入 Inception module 的思想,将不同大小的卷积核和池化操作并行处理,并堆叠这些小型网络结构。
    • 在同一层中采用多种大小的卷积核,以捕捉不同尺度的特征。
  • ResNet:解决了训练极深网络时遇到的梯度消失问题。
    • 引入残差连接 (Residual Connection),使得网络能够训练得更深,有效提升了性能。

# 图像数据增强方法

图像数据增强旨在通过对现有图像进行变换来增加训练数据的多样性,从而提高模型的泛化能力。常见的方法包括:

  • 几何变换
    • Rotation:在 0° 到 360° 之间随机选择一个角度进行旋转。
    • Translation:在 -10 到 10 像素范围内进行随机平移。
    • Rescaling:使用介于 1/1.6 和 1.6 之间的缩放因子进行随机缩放。
    • Flipping:根据伯努利分布决定是否进行镜像翻转。
    • Shearing:在 -20° 到 20° 之间随机选择一个角度进行剪切变换。
    • Stretching:使用介于 1/1.3 和 1.3 之间的拉伸因子进行随机拉伸。
  • 裁剪
    • Cropping:从图像中心随机裁剪一个区域。
    • Cutout:在图像上随机遮挡一定区域。
  • 色彩与噪声
    • Color jitter:随机调整图像的色调、饱和度、亮度、对比度等。
    • Add noise:向图像中添加随机噪声。
    • Blur:对图像进行模糊处理。

# 目标检测

目标检测旨在识别图像中物体的类别并确定其位置。

# 核心评估指标与概念

  • IoU (Intersection over Union):预测框与真实框的交集面积除以并集面积。
    • IoU > 0.5:可接受。
    • IoU > 0.7:表现良好。
    • IoU > 0.9:非常精确。
  • NMS (Non-Max Suppression):非极大值抑制。当多个预测框重叠且 IoU 大于某个阈值(如 0.7)时,只保留得分最高的预测框。
  • TP, FP, FN
    • TP (True Positive):正确识别的预测框。
    • FP (False Positive):错误识别的预测框(将背景识别为物体)。
    • FN (False Negative):未识别到的真实物体。
  • Precision (精确率)TP/(TP+FP)=TP/预测框总数TP / (TP + FP) = TP / \text{预测框总数}
  • Recall (召回率)TP/(TP+FN)=TP/真实物体总数TP / (TP + FN) = TP / \text{真实物体总数}
  • mAP (Mean Average Precision):对每个类别的 AP (Average Precision) 求平均。AP 是通过计算 P-R (Precision-Recall) 曲线下的面积得到的。COCO mAP 则是对不同 IoU 阈值下的 mAP 求平均。

# 目标检测算法

  • 传统方法
    • Sliding Window (滑动窗口):通过在图像上滑动不同尺寸的固定窗口来生成候选框,计算量巨大。
    • Selective Search (选择性搜索):通过图像分割等方法快速生成约 2000 个高质量候选框,但速度较慢,通常在 CPU 上运行。
  • 基于区域的 CNN (Two-Stage Detectors)
    • R-CNN:将 Selective Search 生成的候选框输入 CNN,提取特征后进行分类和边界框回归。
      • 边界框回归公式

      bx=px+pwtx,by=py+phtyb_x = p_x + p_wt_x, \quad b_y = p_y + p_ht_y

      bw=pwexptw,bh=phexpthb_w = p_w \exp t_w, \quad b_h = p_h \exp t_h

      • 这种回归方式的优势在于避免了输出负数长宽、提供了平滑且自然的尺度变化,并稳定了训练过程。
    • Fast R-CNN:先对整张图像进行 CNN 特征提取,然后从特征图中截取候选框区域,再进行分类和回归。大幅提高了效率。
    • Faster R-CNN:用 RPN (Region Proposal Network) 代替了 Selective Search,直接从 CNN 特征图中生成高质量候选框。它是一个端到端的、完全基于深度学习的 Two-Stage 算法。
  • 单阶段检测器 (Single-Stage Detectors)
    • YOLO (You Only Look Once):将目标检测视为一个回归问题,直接从图像中预测边界框和类别。
      • 将输入图像划分为网格,每个网格预测多个边界框和类别概率。
      • YOLO 算法速度极快,但精度通常略低于 Two-Stage 算法。
  • 无锚框 (Anchor-free) 算法
    • 基于多关键点联合表达或基于单中心点预测,摆脱了预设锚框的限制。

# 区域特征提取方法

  • RoI Pooling (Region of Interest Pooling):将大小不一的候选框区域划分成大致相同的网格,然后对每个网格进行最大池化,得到固定尺寸的特征向量。
  • RoI Align (Region of Interest Align):使用插值方法在每个网格区域内均匀选取特征点,并计算其特征值,避免了 RoI Pooling 因取整造成的精度损失。
    • 双线性插值公式
    f_{xy} = \sum_{x_i, y_i} \max(0, 1-\abs{x-x_i})\max(0, 1-\abs{y-y_i}) f_{x_i, y_i}

# 生成模型

生成模型的目标是学习训练数据的内在分布,并从中采样得到新的、具有类似分布的样本(如新图片)。其基本方法是从随机噪声中采样,并学习一个映射,将噪声转换为符合目标数据分布的样本。

  • GAN (Generative Adversarial Networks)
    • 由一个生成器 (Generator) 和一个判别器 (Discriminator) 组成。
    • 判别器:一个 CNN,用于判断输入的图片是真实图片还是生成器生成的假图片。
    • 生成器:一个上采样网络(通过步长小于 1 的卷积实现),用于将随机噪声转换为图片。
    • 目标函数:两者通过博弈的方式进行训练。
    • 判别器目标:最大化其辨别能力,让真实图片的得分尽可能高,生成图片的得分尽可能低。

    maxθdExpdata[logDθd(x)]+Ezpz[log(1Dθd(Gθg(z)))]\max_{\theta_d} \mathbb{E}_{x\sim p_{data}} [\log D_{\theta_d}(x)] + \mathbb{E}_{z\sim p_{z}} [\log (1-D_{\theta_d}(G_{\theta_g}(z)) )]

    • 生成器目标:最小化其生成的图片被判别器识别为假的概率,即让生成图片的得分尽可能高。
    • 原始目标函数

    minθgEzpz[log(1Dθd(Gθg(z)))]\min_{\theta_g} \mathbb{E}_{z\sim p_{z}} [\log (1-D_{\theta_d}(G_{\theta_g}(z)) )]

    • 修改后的目标函数:为了解决梯度消失问题,改为最大化生成图片的判别器得分,即:

    maxθgEzpz[logDθd(Gθg(z))]\max_{\theta_g} \mathbb{E}_{z\sim p_{z}} [\log D_{\theta_d}(G_{\theta_g}(z))]

  • Diffusion Model (扩散模型)
    • 正向过程:通过一个马尔可夫链,向图片中逐步缓慢地增加噪声,直到图片变为纯噪声。
    • 逆向过程:学习一个逆向马尔可夫链,从纯噪声中逐步去除噪声,从而恢复出原始图片。