本文是对《深度学习视觉应用》课程的系统性整理,涵盖计算机视觉中常用的数据集、模型评估指标、目标检测(以 YOLO 为例)以及语义分割(FCN、DeepLab)的基本概念。内容适合作为视觉任务入门及面试复习参考。

目录

  1. 常用数据集
  2. 模型评价指标
  3. 目标检测与 YOLO
  4. 语义分割简介

1. 常用数据集

计算机视觉的各个子任务(分类、检测、分割)都依赖标准数据集进行算法评估与对比。以下是几个最具影响力的数据集。

1.1 MNIST 与 Fashion-MNIST

  • MNIST:手写数字识别数据集,10 个类别(0~9),训练集 60,000 张,测试集 10,000 张,图像尺寸 28×28 灰度图。常用于算法的快速验证。
  • Fashion-MNIST:MNIST 的直接替代品,同样 10 类(服装商品),相同的数据划分和图像尺寸,但分类难度更高,更适合测试模型的泛化能力。

数据加载示例(PyTorch):

def load_data_fashion_mnist(batch_size, resize=None):
    trans = [transforms.ToTensor()]
    if resize:
        trans.insert(0, transforms.Resize(resize))
    trans = transforms.Compose(trans)
    mnist_train = torchvision.datasets.FashionMNIST(
        root="../data", train=True, transform=trans, download=True)
    mnist_test = torchvision.datasets.FashionMNIST(
        root="../data", train=False, transform=trans, download=True)
    return (data.DataLoader(mnist_train, batch_size, shuffle=True),
            data.DataLoader(mnist_test, batch_size, shuffle=False))

1.2 CIFAR-10

  • CIFAR-10:10 类彩色图像(飞机、汽车、鸟、猫等),图像尺寸 32×32×3。共 60,000 张,其中 50,000 张训练,10,000 张测试。
  • CIFAR-100:100 个细粒度类别,每类 600 张图像,数据规模与 CIFAR-10 相同。

CIFAR 系列适用于中小规模图像分类实验,也是验证数据增强、网络结构设计的重要基准。

1.3 PASCAL VOC

  • 全称:Pattern Analysis, Statistical Modelling and Computational Learning - Visual Object Classes
  • 活跃时间:2005 – 2012 年,常用版本为 VOC 2012。
  • 任务:图像分类、目标检测、分割。
  • 类别数量:20 类,包括 person、bird、cat、cow、dog、horse、sheep、aeroplane、bicycle、boat、bus、car、motorbike、train、bottle、chair、dining table、potted plant、sofa、tv/monitor。
  • 标注格式:每张图像对应一个同名的 XML 文件,包含目标 bounding box 和类别标签。

PASCAL VOC 是早期检测和分割任务的基准数据集,虽然已被 COCO 和 ImageNet 取代,但其评价体系(mAP)延续至今。

1.4 MS COCO

  • 全称:Microsoft Common Objects in Context
  • 发布:2014 年起,当前是检测、分割、关键点检测等领域最权威的数据集之一。
  • 规模:超过 33 万张图片,其中 20 万张有标注,个体标注总数超过 150 万个。
  • 类别:80 类,分为人(1 类)、交通工具(8 类)、交通标志(5 类)、动物(10 类)、随身物品(5 类)、运动器材(10 类)、厨房餐具(7 类)、水果食品(10 类)、家具(7 类)、家庭常见物品(17 类)。
  • 任务:目标检测、实例分割、全景分割、关键点检测、看图说话等。

COCO 相对于 VOC 的难点在于:目标尺度更小、图像场景更复杂、每张图中目标数量更多。COCO 的评估指标采用 AP@IoU=0.5:0.95(平均多个 IoU 阈值),对定位精度要求更高。

1.5 ImageNet 与 ILSVRC

  • ImageNet:2009 年由李飞飞团队发布,大规模层次化图像数据库。总图像数约 1419 万,类别数 21,841(其中超过 100 万张带有边界框标注)。
  • ILSVRC(ImageNet Large Scale Visual Recognition Challenge):2010–2017 年举办的年度竞赛,极大推动了深度学习的发展。通常所说“ImageNet 数据集”指 ILSVRC 使用的子集,包含约 1400 万张图像,21,000 个类别,其中 1000 类用于竞赛。
  • JFT-300M:Google 内部数据集,3 亿张图像,超过 10 亿个标签(多标签),用于训练大模型(如 EfficientNet、ViT)。

ImageNet 预训练已经成为迁移学习的标准做法:在 ImageNet 上训练好的分类模型作为 backbone,用于检测、分割等下游任务。


2. 模型评价指标

2.1 混淆矩阵与基础指标

对于二分类问题,混淆矩阵如下:

真实\预测 正例(1) 负例(0)
正例(1) TP FN
负例(0) FP TN
  • TP:正确预测为正例的数量
  • FN:错误预测为负例的数量(漏检)
  • FP:错误预测为正例的数量(虚警)
  • TN:正确预测为负例的数量

由此定义:

  • 精确率(Precision) P = T P T P + F P P = \frac{TP}{TP + FP} P=TP+FPTP,表示预测为正例的样本中有多少是真的正例。“模型有多挑剔”。
  • 召回率(Recall) R = T P T P + F N R = \frac{TP}{TP + FN} R=TP+FNTP,表示真正的正例中有多少被正确检出。“模型有多敏感”。
  • 准确率(Accuracy) A c c = T P + T N T P + T N + F P + F N Acc = \frac{TP+TN}{TP+TN+FP+FN} Acc=TP+TN+FP+FNTP+TN,整体分类正确率。当类别不均衡时,准确率可能失去意义。

2.2 P-R 曲线与 AP

在目标检测中,模型会输出每个预测框的置信度(confidence score)。通过改变置信度阈值,可以得到不同的 (Precision, Recall) 点,连成曲线即为 P-R 曲线。通常精确率越高,召回率越低,两者相互制约。

AP(Average Precision) 是 P-R 曲线下的面积,计算方式为:

A P = ∑ k = 1 N P ( k ) ⋅ Δ r ( k ) AP = \sum_{k=1}^{N} P(k) \cdot \Delta r(k) AP=k=1NP(k)Δr(k)

其中 k k k按置信度排序后的第 k k k个预测, P ( k ) P(k) P(k)是在该阈值下的精确率, D e l t a r ( k ) Delta r(k) Deltar(k)是从第 k − 1 k-1 k1到第 k k k个预测时召回率的变化量。实际计算中常采用插值法(如 VOC 的 11 点插值或 COCO 的 101 点积分)。

mAP(mean Average Precision):对所有类别的 AP 取平均值,是目标检测任务最核心的指标。

不同数据集的 AP 计算略有差异:

  • PASCAL VOC:IoU 阈值固定为 0.5,AP 采用 11 点插值。
  • MS COCO:IoU 阈值从 0.5 到 0.95 以 0.05 步长取 10 个值,分别计算 AP 后平均,记为 A P 0.5 : 0.95 AP_{0.5:0.95} AP0.5:0.95。此外还提供 A P 0.5 AP_{0.5} AP0.5(等同 VOC 指标)、 A P 0.75 AP_{0.75} AP0.75(更严格定位)以及针对小、中、大物体的 AP。

2.3 示例:单个类别的 AP 计算步骤

  1. 模型对所有测试样本输出该类的置信度 score。
  2. 按 score 从高到低排序,得到序列。
  3. 遍历排序后的列表,每遇到一个真正的正样本(ground truth),就计算当前累计 TP 和 FP 下的 Precision 和 Recall。
  4. 绘制 P-R 曲线,计算曲线下面积。

课件中的计算实例(10 个样本)最终 AP ≈ 0.782。


3. 目标检测与 YOLO

3.1 目标检测任务定义

目标检测需要同时解决两个问题:

  • 定位:用边界框(bounding box)标出物体的位置。
  • 分类:识别框内物体的类别。

检测面临的主要挑战:

  • 物体尺寸变化大(从几十像素到接近整图)
  • 物体可以出现在任何位置
  • 任意数量的物体(包括 0 个)
  • 多类别共存,且可能存在重叠

3.2 两阶段与单阶段方法概述

  • 两阶段检测器(如 R-CNN 系列):先提取候选区域(region proposals),再对每个区域进行分类和回归。精度高但速度慢。
  • 单阶段检测器(如 YOLO、SSD):直接在图像网格上预测类别概率和边界框偏移,端到端一次完成。速度快,适合实时应用。

3.3 YOLO(You Only Look Once)核心思想

YOLO 将检测视为回归问题:

  • 将输入图像划分为 (S \times S) 的网格。
  • 每个网格负责预测:
    • (B) 个边界框(每个框包含位置 (x, y, w, h) 和置信度 confidence)
    • (C) 个类别概率(条件概率,给定该网格包含物体)
  • 最终输出张量尺寸:(S \times S \times (B \times 5 + C))。

置信度定义为:(P(\text{object}) \times \text{IoU}_{\text{pred}}^{\text{truth}})。既表示网格内是否含有物体,也表示预测框与真实框的重合度。

优势:全局推理(整图一次处理),速度快(可达实时),泛化能力强。
劣势:对小物体检测效果较差,对重叠物体的处理有限。

YOLO 已发展多个版本(v1~v8),持续改进多尺度预测、锚框、损失函数等。

3.4 YOLO 损失函数(简化版)

损失由四部分加权组成:
L = λ coord ∑ i = 0 S 2 ∑ j = 0 B 1 i j obj [ ( x i − x ^ i ) 2 + ( y i − y ^ i ) 2 ] + λ coord ∑ i = 0 S 2 ∑ j = 0 B 1 i j obj [ ( w i − w ^ i ) 2 + ( h i − h ^ i ) 2 ] L = \lambda_{\text{coord}} \sum_{i=0}^{S^2} \sum_{j=0}^{B} \mathbf{1}_{ij}^{\text{obj}} \left[ (x_i - \hat{x}_i)^2 + (y_i - \hat{y}_i)^2 \right] + \lambda_{\text{coord}} \sum_{i=0}^{S^2} \sum_{j=0}^{B} \mathbf{1}_{ij}^{\text{obj}} \left[ (\sqrt{w_i} - \sqrt{\hat{w}_i})^2 + (\sqrt{h_i} - \sqrt{\hat{h}_i})^2 \right] L=λcoordi=0S2j=0B1ijobj[(xix^i)2+(yiy^i)2]+λcoordi=0S2j=0B1ijobj[(wi w^i )2+(hi h^i )2]

+ ∑ i = 0 S 2 ∑ j = 0 B 1 i j obj ( C i − C ^ i ) 2 + λ noobj ∑ i = 0 S 2 ∑ j = 0 B 1 i j noobj ( C i − C ^ i ) 2 + ∑ i = 0 S 2 1 i obj ∑ c ∈ classes ( p i ( c ) − p ^ i ( c ) ) 2 +\sum_{i=0}^{S^2} \sum_{j=0}^{B} \mathbf{1}_{ij}^{\text{obj}} (C_i - \hat{C}_i)^2 + \lambda_{\text{noobj}} \sum_{i=0}^{S^2} \sum_{j=0}^{B} \mathbf{1}_{ij}^{\text{noobj}} (C_i - \hat{C}_i)^2 + \sum_{i=0}^{S^2} \mathbf{1}_{i}^{\text{obj}} \sum_{c \in \text{classes}} (p_i(c) - \hat{p}_i(c))^2 +i=0S2j=0B1ijobj(CiC^i)2+λnoobji=0S2j=0B1ijnoobj(CiC^i)2+i=0S21iobjcclasses(pi(c)p^i(c))2

  • 前两项:边界框中心坐标和宽高的回归损失(宽高取平方根以缓和大小框的尺度差异)。
  • 第三、四项:置信度损失(正样本和负样本分开加权, λ noobj \lambda_{\text{noobj}} λnoobj通常较小,如 0.5)。
  • 最后一项:分类损失(每个有物体的网格预测类别概率)。

更详细的推导和代码实现可参考课程配套材料。


4. 语义分割简介

4.1 任务定义

语义分割是对图像中的每个像素分配一个类别标签(如道路、天空、人、车等)。与实例分割不同,语义分割不区分同一类别的不同个体。

4.2 FCN(Fully Convolutional Network)

FCN 是语义分割的开创性工作(2015),核心贡献:

  • 将分类网络(如 VGG)的全连接层替换为卷积层,使网络能接受任意尺寸输入并输出与输入同尺寸的 score map。
  • 引入 转置卷积(transposed convolution) 实现上采样,恢复空间分辨率。
  • 使用 跳跃连接(skip connections) 融合浅层细节和深层语义信息,改善分割边界。

4.3 DeepLab 系列

DeepLab(v1, v2, v3, v3+)是目前广泛使用的语义分割模型,主要特点:

  • 空洞卷积(Atrous Convolution):在不增加参数的前提下扩大感受野,控制特征图分辨率。
  • ASPP(Atrous Spatial Pyramid Pooling):多个不同膨胀率的空洞卷积并行,捕捉多尺度上下文信息。
  • 条件随机场(CRF,v1/v2):后处理优化边缘细节(v3 之后逐渐被更强大的 ASPP 和 decoder 替代)。

DeepLab v3+ 引入 encoder-decoder 结构,进一步提升边界质量。

课程中提供了 deeplab.ipynb 演示文件,建议运行体验实际分割效果。


总结与常见问题

数据集选择建议

任务类型 推荐起始数据集 进阶/竞赛数据集
图像分类 MNIST, CIFAR-10 ImageNet, JFT-300M
目标检测 PASCAL VOC MS COCO
语义分割 PASCAL VOC 2012 Cityscapes, COCO-Stuff

评价指标速查

任务 核心指标 说明
分类 Accuracy, Top-1/Top-5 Error Top-5 用于 ImageNet
检测 mAP 需指定 IoU 阈值
分割 mIoU(平均交并比) 每个类别计算 IoU 后平均

常见问题

  1. 精确率和召回率分别关注什么?

    • 精确率关注“检出的结果中有多少是正确的”(避免误报)。
    • 召回率关注“所有真正的正例有多少被检出”(避免漏报)。
  2. 为什么 COCO 的 mAP 比 VOC 低很多?
    因为 COCO 采用多个 IoU 阈值(从 0.5 到 0.95)平均,对定位精度要求更高;且 COCO 包含更多小物体和复杂场景。

  3. YOLO 为什么比两阶段方法快?
    YOLO 将检测视为回归问题,一次前向传播同时得到所有物体的位置和类别,无需候选区域生成和逐区域分类的过程。

  4. 转置卷积和上采样的区别?
    转置卷积是一种可学习的上采样方式,具有参数;而双线性插值等上采样没有可学习参数。FCN 使用转置卷积,DeepLab 后来改用双线性上采样加卷积,两者各有优劣。

Logo

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。

更多推荐