前端开发入门到精通的在线学习网站

网站首页 > 资源文章 正文

【视觉AI的基石】斯坦福大学笔记!带你吃透卷积神经网络 (CNN)

qiguaw 2025-05-14 15:55:53 资源文章 4 ℃ 0 评论

CNN:让计算机拥有“火眼金睛”的秘诀

想象一下,你怎么认出一张图片里的是猫还是狗?

你不会把图片所有像素点揉成一团再看。你会先注意到一些局部特征:猫有尖耳朵、胡须,狗可能有下垂的耳朵、突出的鼻子。然后,你会把这些局部特征组合起来:尖耳朵 + 胡须 + 圆脸 ≈ 猫。最后,你综合所有信息得出结论。

卷积神经网络 (CNN) 就是在模仿我们人类的这种视觉识别过程!

它不像传统神经网络那样,一开始就把图片“拍扁”成一长串数字,丢失了空间信息(比如像素点之间的邻近关系)。

CNN 通过“卷积核”(Filters/Kernels) 这种小窗口,在图片上滑动扫描,专门用来 检测局部特征。有的卷积核专门找边缘,有的找纹理,有的找特定形状(比如眼睛、鼻子)。

通过一层层的卷积,CNN 能把检测到的 低级特征(如边缘)组合成更高级的特征(如眼睛、轮廓),最后再根据这些高级特征进行判断和识别。

简单来说,CNN 的核心优势在于:

  1. 局部感知 (Local Receptive Fields): 每个神经元只关注输入的一小块区域,有效捕捉局部特征。
  2. 参数共享 (Parameter Sharing): 一个卷积核会在整个图片上滑动,用同一组参数检测同一个特征,大大减少了模型参数量。
  3. 空间或层级结构 (Spatial Hierarchy): 通过堆叠卷积层和池化层,能学习到从简单到复杂的特征表示。

正是因为这些特性,CNN 在图像识别、目标检测、图像分割、人脸识别等计算机视觉任务中取得了革命性的成功,是我们现在能享受到的各种“刷脸”支付、自动驾驶感知、医学影像分析等技术的核心基石。

传统 CNN 架构:

卷积神经网络模型一般包含如下过程:

输入图像 (Input Image): 原始图片。

卷积层 (Convolutions): 使用卷积核提取特征。

池化层 (Pooling): 降低特征图的维度(下采样),减少计算量,提高模型的鲁棒性。

全连接层 (Fully Connected): 在最后阶段,将前面提取到的高级特征整合起来,进行分类或回归预测。

层的类型 :

卷积层 (CONV):

作用: 使用滤波器 (Filters) 对输入进行卷积操作,扫描输入图像(或上一层的特征图)以提取特征。

超参数:

滤波器尺寸 (Filter Size, F): 滤波器的大小,比如 3x3, 5x5。

步长 (Stride, S): 滤波器每次滑动的距离。

输出: 特征图 (Feature Map) 或激活图 (Activation Map),代表了滤波器检测到的特征在不同位置的强度。卷积操作可以推广到 1D (如文本) 和 3D (如视频、医学影像)。

池化层 (POOL):

作用: 执行下采样 (Downsampling) 操作,通常在卷积层之后,目的是降低空间维度,减少计算量,并提供一定的空间不变性 (Spatial Invariance)(即物体在图片中轻微移动不影响结果)。

最大池化 (Max Pooling): 在一个小区域内选择最大值。优点是能保留最显著的特征。最常用。

平均池化 (Average Pooling): 在一个小区域内计算平均值。优点是能保留更多背景信息,但可能模糊特征。LeNet 中使用过。

全连接层 (FC):

作用: 将前面层输出的特征图“压平”(Flatten) 成一个向量,然后像普通神经网络一样,每个输入节点连接到所有输出节点。通常位于 CNN 的末端,用于最终的分类决策。

滤波器超参数 (Filter hyperparameters)

滤波器维度 (Dimensions of a filter): 一个尺寸为 F x F 的滤波器,如果应用于一个有 C 个通道 (Channel) 的输入 (比如彩色图有 R,G,B 三个通道),那么这个滤波器的实际“体积”是 F x F x C。它会对输入的 I x I x C 区域进行运算,产生一个 O x O x 1 的输出特征图。

多个滤波器: 通常一个卷积层会包含 K 个不同的滤波器,每个滤波器学习检测一种不同的特征。因此,应用 K 个滤波器后,输出的特征图维度是 O x O x K。

步长 (Stride, S): 滤波器在输入上每次移动的像素数。

零填充 (Zero-padding)

作用: 在输入的边界周围添加 P 圈 0。

目的:控制输出特征图的空间尺寸 (O)。

让卷积核能够处理图像边缘的信息,否则边缘像素被“扫描”的次数会少很多。

Valid: P=0,不填充。输出尺寸会缩小。会丢失边缘信息。

Same: 填充适量的 P,使得输出尺寸 O 与输入尺寸 I 大致相同(严格来说是 ceil(I/S))。方便网络设计。也叫“半填充”(half padding)。

Full: 填充足够多的 P (P=F-1),使得滤波器能够“看到”输入的每一个角落。

CONV, POOL, FC 对比表 ,这张表总结了三类层的输入/输出尺寸、参数数量。

参数量: CONV 层参数量与滤波器大小和数量有关 ((F*F*C + 1) * K,+1 是偏置项),POOL 层没有参数,FC 层参数量巨大 ((Nin+1)*Nout)。

CONV 通常 S<F,常用 K=2C;POOL 通常 S=F;FC 输入需要展平,神经元数量是自由设计的。

感受野 (Receptive field)

定义: 在第 k 层特征图上的一个像素,能够“看到”的原始输入图像区域的大小,记作 Rk x Rk。

它依赖于各层的滤波器大小 (Fj) 和步长 (Si)。直观理解就是,层数越深,感受野越大,能看到更宏观的特征。

例子: 图示两层 3x3 卷积,步长为 1,第二层的感受野是 5。

调优超参数 (Tuning hyperparameters)

参数兼容性公式: O = (I - F + P_start + P_end) / S + 1 ( P_start + P_end 代表总 padding,通常是 2P)。这个公式告诉你给定输入尺寸 I、滤波器尺寸 F、填充 P 和步长 S,即可计算输出尺寸 O 是多少。这是设计 CNN 架构时必须考虑的。

常用激活函数 (Commonly used activation functions)

作用: 为神经网络引入非线性 (non-linearities),使其能够学习更复杂的模式。没有激活函数,多层网络就退化成单层线性网络了。

ReLU (Rectified Linear Unit): g(z) = max(0, z)。计算简单,是目前最常用的激活函数。缺点是可能导致“神经元死亡”(负数输入的梯度为0)。

Leaky ReLU: g(z) = max(εz, z) (ε 是个很小的数,如 0.01)。解决了 ReLU 的死亡问题。

ELU (Exponential Linear Unit): 形式更复杂一些。也是 ReLU 的改进版,输出均值接近 0。

Softmax: 通常用在 CNN 的最后一层(FC 层之后),将输出转换为概率分布,用于多分类任务。

目标检测 (Object detection)

图像分类 (Image classification): 图片里是啥?(e.g., "泰迪熊") - 传统 CNN。

分类 + 定位 (Classification w. localization): 图片里是啥?它在哪?(预测一个边界框 Bounding Box) - 简化的 YOLO, R-CNN。

检测 (Detection): 图片里有哪些东西?它们都在哪?(可能检测多个物体,每个都有边界框) - YOLO, R-CNN。

检测任务细分:

边界框检测 (Bounding box detection): 输出物体的位置框 (通常用中心点坐标 bx, by 和宽高 bh, bw 表示)。

地标检测 (Landmark detection): 检测物体的关键点 (如人脸的眼睛、鼻子、嘴巴位置)。更精细。

交并比 (Intersection over Union, IoU):

定义: 衡量预测边界框 Bp 与 真实边界框 Ba 重合度的指标。IoU = (Bp ∩ Ba) / (Bp ∪ Ba),即交集面积除以并集面积。

取值: [0, 1]。值越大,表示预测越准。

约定: 通常 IoU ≥ 0.5 就认为预测是成功的 (good enough)。

锚框 (Anchor boxes):

目的: 解决一个网格单元需要预测多个不同形状、尺寸或重叠的物体的问题。

方法: 预先定义一组不同宽高比和大小的“锚框”,模型学习预测每个锚框相对于真实物体的偏移量和置信度。

非极大值抑制 (Non-max suppression, NMS):

目的: 在模型输出了大量重叠的边界框后,去除多余的框,只保留最准确的那个。

步骤:

移除概率低于某个阈值 (如 0.6) 的框。

选取概率最高的框。

移除与该框 IoU 大于某个阈值 (如 0.5) 的其他框。

重复步骤 2 和 3,直到所有框处理完毕。

YOLO (You Only Look Once):

核心思想: 将图像划分为 GxG 网格,每个网格单元负责预测落在该单元中心的物体,同时预测边界框属性和类别概率。它一次性完成所有预测,速度快。

输出格式: y 是一个巨大的张量,包含了每个网格单元、每个锚框的预测信息 (置信度 pc, 边界框 bx,by,bh,bw, 类别概率 c1...cp)。

流程图: 展示了从预测大量框 -> NMS 筛选 -> 最终结果的过程。

R-CNN (Region with CNN):

核心思想: 分两步走。1. 区域提议 (Region Proposal): 先用传统方法或一个小型网络找出可能包含物体的候选区域。2. 区域分类: 对每个候选区域运行 CNN 提取特征,然后用分类器判断类别。

缺点: 原始 R-CNN 速度慢,因为要对大量区域独立跑 CNN。

改进: Fast R-CNN 和 Faster R-CNN 通过共享计算等方式大幅提高了速度。

人脸验证与识别 (Face verification and recognition)

模型类型对比:

验证 (Verification): 1 对 1 比较。这是张三吗?(输入一张待测照片和张三的参考照片/ID)。

识别 (Recognition): 1 对 N 比较。这个人是数据库里的谁?(输入一张待测照片,在 N 个人的数据库里查找匹配)。

一次性学习 (One Shot Learning):

挑战: 通常人脸库里每个人的样本很少(可能只有一张)。

思路: 不直接学习分类,而是学习一个相似度函数 d(img1, img2),用来衡量两张图片是否属于同一个人。

孪生网络 (Siamese Network):

架构: 使用两个结构相同、参数共享的 CNN,分别处理两张输入图片,得到它们的嵌入向量 (embedding) f(x^(i))。然后计算这两个向量的距离来判断相似度。

三元组损失 (Triplet loss):

目的: 学习更好的嵌入向量表示,使得同一个人 (Anchor, Positive) 的向量距离近,不同人 (Anchor, Negative) 的向量距离远。

公式: L(A, P, N) = max( d(A, P) - d(A, N) + α, 0 )。α 是一个边界 (margin) 参数。目标是让 d(A, N) 比 d(A, P) 至少大 α。

上图清晰地展示了损失为 0 (满足要求) 和损失 > 0 (需要调整) 的情况。

神经风格迁移 (Neural style transfer)

目标: 生成一张新图片 G,使其内容像内容图片 C,风格像风格图片 S。

激活 (Activation): a^[l] 表示第 l 层的激活值(特征图)。

内容代价函数 (Content cost function): J_content(C, G) 衡量 G 和 C 在某一(或某几)卷积层 l 的激活值之间的差异。目标是让 G 的内容特征接近 C。

风格矩阵 (Style matrix): G^[l] 是一个 Gram 矩阵。它计算第 l 层特征图中不同通道之间的相关性。可以理解为它捕捉了纹理、笔触等风格信息,而不是具体内容。

风格代价函数 (Style cost function): J_style(S, G) 衡量 G 和 S 在多个卷积层 l 的风格矩阵之间的差异。目标是让 G 的风格特征接近 S。

总代价函数 (Overall cost function): J(G) = α * J_content(C, G) + β * J_style(S, G)。通过调整权重 α 和 β,可以控制生成图像更偏向内容还是风格。

使用计算技巧的架构 (Architectures using computational tricks)

ResNet (残差网络):

核心思想: 引入残差块 (Residual blocks) 和跳跃连接 (Skip connections)。允许网络学习“残差” F(x) = H(x) - x,而不是直接学习目标映射 H(x)。

优点: 解决了深度神经网络训练中的梯度消失/爆炸问题,使得训练非常深的网络成为可能,显著降低了训练误差。

Inception Network (GoogLeNet):

核心思想: 在同一层中使用多种不同尺寸的卷积核 (1x1, 3x3, 5x5) 和池化操作,并将它们的输出拼接起来(称为 Inception 模块)。

优点: 能在不同尺度上同时捕捉特征,提高网络性能和效率。

1x1 卷积技巧: 大量使用 1x1 卷积来降低计算量(通道降维)。

GAN (生成对抗网络):

架构: 由一个生成器 (Generator) 和一个判别器 (Discriminator) 组成。

目标: 生成器试图生成以假乱真的数据(如图片),判别器试图区分真实数据和生成器造的假数据。两者相互竞争、共同进化。

应用: 图像生成、文本生成、音乐生成、数据增强等。

这份斯坦福大学的笔记,简直太好用,从基本的卷积、池化操作,到各种超参数、优化技巧,再到目标检测、人脸识别、风格迁移等应用,以及 ResNet、GAN 等高级架构,几乎涵盖了 CNN 的方方面面。

希望这篇结合斯坦福笔记的解读,能帮你系统地理解卷积神经网络这个强大的工具。它不仅是计算机视觉领域的中流砥柱,其思想也启发了其他领域的很多研究。

Afshine Amidi & Shervine Amidi, Stanford University. 
stanford.edu/~shervine

Tags:

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表