,

1. Object Detection With CNNs

1.1 R-CNN

R-CNN = Selective Search + CNN + SVM

  1. Input Image
  2. Extract region proposals
  3. Compute CNN Features
  4. Classify regions

Limitation:

  1. 需要固定输入图像的大小,这限制了输入图像的角度和尺度
  2. 多阶段的训练:Train CNN ; Train SVM
  3. 大量的Proposal 框,存储效率低下
  4. 多余Proposals 和耗费时间

1.2 SPPNet

操作:

  1. 将特征图划分为1*1 2*2 4*4 的区域
  2. 在每个区域进行最大池化操作
    1. 最终形成一个 1+4+16 个特征块

Improvement

  1. 只对整个图像计算一次特征图
  2. 在任意区域中池化特征以生产 fixed-length representations

Limitation:

仍然是一个多阶段的pipeline:特征提取 -> 网络微调 -> SVM 训练 -> 训练边界框回归

1.3 Fast RCNN

Making the structure end-to-end

ImproveMent:en d -to-end learning via a multi-task loss

Limitation:

  1. 将每个候选区域划分成7*7个相等的部分
  2. 对每个区域应用最大池化操作
  3. 所有的输入都被统一为 7*7 的大小

R-CNN vs. Fast R-CNN

对比维度 (Improvement) R-CNN (“Slow” R-CNN) Fast R-CNN 核心改进点
特征提取方式 (Feature Extraction) 重复计算: 对每一个候选区域(Region of Interest, RoI)单独截取图像块,并分别送入卷积网络计算特征。 共享计算: 整张图像只送入卷积网络一次。使用 RoI Pooling 将不同大小的 RoI 直接映射到特征图上的固定大小区域。 避免了对成千上万个 RoI 进行重复的卷积运算,极大提升了效率。
训练方式 (Training Approach) 分阶段/独立优化: 分类器(Class)和边界框回归(Bbox)是分开处理的组件(从图中可以看出它们是独立的模块)。 多任务损失 (Multi-task loss): 引入多任务损失函数,同时 (Simultaneously) 优化分类任务和边界框回归任务。 实现了更统一的优化,不仅简化了流程,还提升了最终的准确率。
网络结构 (Network Structure) 松散的组件: 特征提取与后续的分类/回归网络是割裂的,计算存在大量冗余。 统一的实体 (Single Entity): 将特征提取网络与分类/回归网络结合为一个整体,共享卷积层 减少了冗余计算,提升了整体计算效率。
处理对象 (Core Transformation) Image Proposals: 处理的是原始图像上的切片(Warped image regions)。 Feature Proposals: 处理的是卷积特征图上的切片。 从“处理图像块”进化为“处理特征块”。
**Problem**:
  1. RCNN, SPPNet and Fast RCNN rely on selective search
  2. Region proposal computation is still a bottleneck

1.4 Faster RCNN

Insert Region Proposal Networt(RPN) to predict proposals from features, 通过引入一个微型神经网络 RPN ,直接在特征图上滑动,快速预测哪里可能有物体。
$$
Faster RCNN = Fast RCNN+RPN
$$

1.4.1 RPN

基于预设的 Anchor Box来判断物体在哪里,在特征图的每一个像素点上,都叠放这一组固定形状和大小的框

假设:

  1. 输入图像大小为 3*640*480, image features=512*20*15
  2. Anchor Box:三种尺度($128^2,256^2,512^2$ ) ,三种长宽比(1:1,1:2,2:1),总计每个像素点生成 3*3 =9 个Anchor box

两个任务:

任务一:分类

  • 目标:判断Anchor Box中是物体还是背景
  • 输出:k * 20* 15

任务二:回归

  • 目标:Anchor Box只是大概位置,可能不准,网络需要一个修正值,把锚框修正到更贴合真实物体的位置
  • 输出: 4k*20*15,因此一个框有坐标$(x,y,w,h)$
维度 (Improvement) Fast R-CNN (及之前的 R-CNN) Faster R-CNN 核心改进点 (Description)
区域建议生成 (Region Proposal) 依赖外部算法: 使用 Selective Search (选择性搜索) 算法来生成候选框。 引入 RPN: 使用 Region Proposal Network (区域建议网络) 在网络内部生成候选框。 实现了高效且精准的候选框生成,彻底替代了缓慢的 Selective Search 算法。
特征共享 (Feature Sharing) 无共享: 候选框生成步骤(Selective Search)和后续的检测网络是完全独立的,无法共享计算。 共享卷积特征RPNFast R-CNN 检测网络共享同一组卷积特征图。 减少了冗余计算,大幅提升了运行效率。
网络结构 (Network Structure) 分离结构: 候选框生成是独立的一步,与检测网络是割裂的。 统一网络 (Unified Network): 将 RPN 和 Fast R-CNN 集成到一个统一的网络中。 允许同时 (Simultaneous) 进行候选框生成和物体检测,从而显著缩短了推理时间(Inference time)。
特征层级差异 (Feature Level Difference) 低级特征: Selective Search 依赖图像的低级特征(如颜色、纹理)来合并区域。 CNN 特征: RPN 利用深层的 CNN 特征来定位更准确的建议框。 深度特征包含语义信息,生成的建议框质量更高。
训练策略 (Training Approach) (图片未详细描述 Fast R-CNN 的具体训练,但在上下文中通常是分阶段的) 两阶段训练 (Two-stage strategy): 1. 先训练 RPN 生成高质量候选框; 2. 再训练 Fast R-CNN 对这些框进行分类和微调。 确保两个模块都能被充分优化。

1.5 YOLO

1.5.1 Single-Stage Object Detection

传统方法(如 R-CNN): 先在图像上生成无数个候选框(Region Proposals),然后对每个框进行分类。这是一个分类问题。

Single-Stage OD是一个回归问题。它不需要生成候选框,而是直接输入整张图片,让神经网络一次性输出图片中所有物体的位置坐标(Bounding Box)类别概率。因此分类输出维度是$(C+1) \times K\times20 \times 15$,Box输出维度是$C \times 4K\times20 \times 15$

1.5.2 v1

每个网格需要预测 B 个边界框,每个边界框包含 5 个预测值:

  1. $x,y$:边界框中心相对于网格边界的偏移量。
  2. $w,h$:边界框的宽和高(相对于整张图)。
  3. Confidence:置信度,代表“框里有物体的概率” $\times$ “预测框与真实框的重合度(IoU)”。

同时,每个网格还要预测 C 个类别的条件概率(即如果这里有物体,它是猫、狗还是车的概率)。

1.5.3 Further improvement

  • Train longer
  • Multiscale backbone:Feature pyramid Network
  • Better Backbone:ResNet
  • Very big models work better
  • Big ensembles, more data, etc..

2. 3D Vision with Deep Learning

主要问题:

  1. 从单张图片预测3D形状
  2. 根据3D形状判断物体类别

3D形状的表示方法:

2.1 Depth Map

Depth Map可以给出每个像素到摄像头的距离

RGB image ($3\times H \times w$)+ Depth image($H\times W$) = RGB-D Image(2.5D)

这种数据可以被一些3D传感器直接记录下来

Predicting Depth

2.2 Surface Normal

表面法线:对于每个像素,表面法线提供了一个向量,表示该像素在世界空间中的物体的法线向量

Predicting Normals

2.3 Voxels

  • 用 $V\times V \times V$ 网格表示形状
  • (+)概念十分简单,就是一个3D网格
  • (-)需要高空间的分辨率来捕捉细小结构
  • (-)向高分辨率扩展很困难

Processing voxels Inputs:

Voxel Problems:Memory Usage

Scaling Voxeds: Oct-Trees

解决方案是使用 “Heterogenous resolution”(非均匀分辨率/异构分辨率)

  • 八叉树原理:
    • 想象一个大立方体。如果这个立方体里是“空的”(没有物体),我们就不用管它,只存一个大块。
    • 如果这个立方体里“有物体”(比如车的引擎盖),我们就把它切成 8 个 更小的小立方体(这就是“八叉”的由来)。
    • 然后对这 8 个小立方体重复上述过程:空的就不管,有细节的继续切分。
  • 结果: 我们只在物体表面(需要细节的地方)使用高分辨率的小方块,而在空旷的背景或物体内部使用低分辨率的大方块。这极大地节省了内存

2.4 Point Cloud

  • 将形状表示为 3D 空间中的 P 个点的集合
  • (+) 可以用很少的点表示细腻的结构
  • ( )需要新的结构、损失函数等
  • (-) 没有明确表示形状的表面:提取用于渲染或其他应用的网格需要后处理

由于点云数据的无序性不规则性,主要介绍四种主流的深度学习处理范式:

2.4.1 基于 PointNet 的方法

这是处理点云的开创性工作(引用了 CVPR 2017 的 PointNet 和 NeurIPS 2017 的 PointNet++)。

  • 核心思想:将点云视为一个集合(Set),点的顺序不应该影响结果(置换不变性)。
  • 处理流程
    1. 对每一个点独立运行 MLP(多层感知机)。
    2. 使用 Max-Pooling(最大池化) 操作将所有点的特征聚合为一个全局特征向量。
    3. 最后通过全连接层进行分类。
  • 特点:直接处理原始点云,简单高效。

2.4.2 基于卷积的方法

  • 挑战:点云在空间分布上是不规则的,无法直接使用传统的标准卷积(Grid-based Convolution)。
  • 两种解决方案
    1. 3D 连续卷积 (Continuous Convolution):在连续空间定义卷积核,邻域点的权重取决于其相对于中心点的空间分布。
    2. 3D 离散卷积 (Discrete Convolution):在规则网格上定义卷积核,邻域点的权重取决于相对于中心点的偏移量(Offset)。

2.4.3 基于图的方法

  • 核心思想:将每一个点或点的区域视为图(Graph)的一个顶点(Vertex)。
  • 流程:输入点 $\rightarrow$ 图构建 $\rightarrow$ 特征学习与池化 $\rightarrow$ 输出点。
  • 优点
    • 处理不规则数据的能力强。
    • 模型通常比较轻量级。

2.4.4 基于 Transformer 的方法

  • 核心思想:将每一个点视为一个 Token(类似于自然语言处理中的词向量)。
  • 流程:展示了如 “Pyramid Point Transformer” 的架构,包含 Embedding、Transformer 模块、上采样(Upsampling)和 MLP。
  • 优点:利用自注意力机制(Self-Attention),能够很好地捕捉点与点之间的全局相关性(Global correlation)

3. Videos with Deep Learning

  • 定义:视频可以被视为 2D图片 + 时间维度。它是一个4D张量,形状为 $T \times 3 \times H \times W$(时间帧数 $\times$ 通道数 $\times$ 高 $\times$ 宽)。

  • 任务:主要关注 视频分类(Video Classification) 或动作识别(Action Recognition)。

    • 图片识别关注的是“物体”(如:猫、鱼)。
    • 视频识别关注的是“动作”(如:游泳、跑步、跳跃)。
  • 难点视频数据量巨大

    • 原始未压缩视频(高清、高帧率)每分钟可达10GB,直接处理对算力要求极高。
  • 解决方案基于片段(Clips)训练

    • 不使用全长视频,而是截取短片段(Short clips)。
    • 降低帧率(Low FPS)和空间分辨率(Low spatial resolution)。
    • 测试时:对视频的不同片段运行模型,然后平均预测结果。

A. Single-Frame CNN

  • 思路:将视频的每一帧当作独立的图像,用标准的2D CNN进行分类,最后对所有帧的预测结果取平均。
  • 评价:这通常是一个非常强劲的基准(Baseline),课件建议“总是先尝试这个方法”。
  • 缺点:完全忽略了时间信息(动作的连贯性)。

B. Fusion Methods

为了引入时间信息,研究者尝试融合不同帧的特征:

  1. 后期融合 (Late Fusion)
    • 在两帧相距较远的地方分别提取特征,最后在全连接层(FC)或通过池化(Pooling)进行融合。
    • 问题:很难捕捉帧与帧之间的底层运动细节。
  2. 早期融合 (Early Fusion)
    • 在输入层就将多帧图像在通道维度拼接(Input: $3T \times H \times W$),然后用2D CNN处理。
    • 问题:仅靠第一层卷积很难有效处理所有的时间信息。

C. 3D CNN

  • 思路:将卷积核扩展到3D(时间 $\times$ 高 $\times$ 宽),同时在空间和时间维度上提取特征。
  • 代表模型:C3D
    • 被称为“3D CNN中的VGG”。
    • 使用 $3\times3\times3$ 的卷积核。
    • 优点:能同时建模外观和运动。
    • 缺点:计算量非常大(FLOPs 很高),参数多。

D. Two-Stream Networks

  • 思路:将“外观”和“运动”分开处理。
    1. 空间流 (Spatial stream):输入单帧RGB图像,提取外观特征。
    2. 时间流 (Temporal stream):输入多帧光流 (Optical Flow) 图,提取运动特征。
  • 结果:最后融合两个流的结果。在当时(2014年左右)准确率优于 3D CNN。

E. Long-term Temporal Structure

  • 问题:上述CNN方法通常只处理几秒钟的短片段,难以理解长视频中的复杂逻辑。
  • 解决方案:CNN + RNN
    • 利用 LSTM 或其他循环神经网络(RNN)来处理由CNN提取的帧特征序列。
    • 也有 Recurrent Convolutional Network(在卷积层之间加入循环连接)。

F. 基于 Transformer 的方法

  • 思路:利用 自注意力机制 (Self-attention) 同时处理空间和时间线索。
  • 这是较新的趋势(引用了2021年的论文),试图用 Attention 替代传统的卷积或循环结构来理解视频。

总结

视频深度学习的发展路线大致为:

  1. Single-frame CNN(最简单,效果意外地好)。
  2. Late/Early Fusion(尝试引入时间信息)。
  3. 3D CNN(真正的时空特征提取,但计算重)。
  4. Two-stream(显式利用光流分离运动信息,效果好)。
  5. CNN + RNN(解决长序列问题)。
  6. Spatio-temporal Self-attention(Transformer 时代的新方法)。