查看全课大纲(第 38 / 93 节)
- 1.计算机视觉概述
- 2.计算机视觉应用场景
- 3.困难与挑战
- 4.开源库介绍
- 5.图像显示与存储
- 6.CLAHE
- 7.腐蚀膨胀与开闭运算
- 8.滤波与边缘填充
- 9.各种滤波
- 10.图像金字塔
- 11.傅里叶变换
- 12.短时傅里叶变换与小波变换
- 13.颜色特征与颜色直方图
- 14.几何特征_边缘
- 15.几何特征-角点与斑点
- 16.局部特征-SIFT特征描述子
- 17.局部特征-SURF特征描述子
- 18.局部特征-ORB特征描述子
- 19.其他特征描述子
- 20.传统图像分割技术
- 21.GraphCut
- 22.GrabCut
- 23.人脸检测的传统方法
- 24.行人检测的传统方法HOG+SVM
- 25.行人检测DPM
- 26.人工神经网络的架构
- 27.目标函数与梯度下降
- 28.误差反向传播
- 29.可手算的神经网络
- 30.改进目标函数与克服梯度消散
- 31.神经网络之传统神经网络与深度网络的差异
- 32.各种梯度下降算法
- 33.如何选择合适的梯度下降算法
- 34.避免过适应
- 35.CNN的架构
- 36.CNN的误差反向传播_卷积层
- 37.CNN的误差反向传播_池化层
- 38.分类所用的数据集
- 39.Alexnet详解
- 40.VGG详解
- 41.GoogLeNet_v1
- 42.BatchNormalization
- 43.GoogLeNet_v3v4
- 44.ResNet
- 45.ResNeXt
- 46.CNN设计准则
- 47.图像检索与推土机距离
- 48.基于颜色相似性
- 49.基于形状相似性
- 50.基于纹理相似性
- 51.基于局部特征相似性
- 52.DL的二值哈希编码
- 53.高维空间中检索KDTree
- 54.高维空间中检索LSH
- 55.目标识别任务综述
- 56.RCNN
- 57.SPP-Net
- 58.Fast R-CNN
- 59.Faster R-CNN
- 60.R-CNN系列模型回顾
- 61.R-FCN的设计思路
- 62.R-FCN的实现
- 63.YOLOv1
- 64.YOLOv2_9000
- 65.YOLOv3
- 66.图像分割应用场景与数据集
- 67.上采样的实现方式
- 68.FCN网络架构的由来
- 69.FCN构建细节
- 70.DeepLabv1
- 71.CRF
- 72.DeepLabv2
- 73.DeepLabv3
- 74.特定的医学影像分割任务
- 75.U-Net
- 76.3D U-Net
- 77.V-Net
- 78.DenseNet
- 79.病理切片分析任务及数据集
- 80.病理切片分析
- 81.图说任务及其传统处理方法
- 82.深度语言模型与RNN
- 83.LSTM及其变种
- 84.NIC模型
- 85.SAT模型
- 86.图说的性能指标
- 87.判别模型与生成模型
- 88.KL散度与JS散度
- 89.VAE
- 90.GAN的基本原理
- 91.DCGAN与CGAN
- 92.Wasserstein GAN
- 93.SRGAN
分类所用的数据集
小象实战讲义 · 基于深度学习的计算机视觉
在正式学习经典的卷积神经网络(CNN)之前,我们需要先了解一个关键的基础:图像分类任务及其常用的基准数据集。图像分类是计算机视觉的基石,也是衡量模型性能的“试金石”。本节将介绍图像分类问题的定义、核心评价指标,并重点讲解两个在深度学习发展史上至关重要的数据集——ImageNet和CIFAR-10。理解这些数据集的特点和用途,是后续学习AlexNet、VGG、ResNet等经典模型的前提。
💡 核心导读
- 图像分类任务:理解“一张图片对应一个标签”的基本设定,以及Top-1 Error和Top-5 Error两种核心性能指标。
- ImageNet与ILSVRC:认识这个推动深度学习革命的大规模视觉识别挑战赛,了解其任务构成、数据规模以及WordNet语义组织方式。
- 性能进化史:概览从传统方法到AlexNet、VGG、GoogLeNet、ResNet等模型在ImageNet上的性能飞跃,直观感受深度学习的威力。
- CIFAR-10数据集:掌握这个分辨率小、类别少但非常实用的“轻量级”数据集,它常被用于算法原型验证和教学演示。
什么是图像分类?
图像分类是计算机视觉中最基础、最经典的任务之一。其目标是:给定一张输入图像,通过算法模型判断该图像中是否包含某个特定的物体,并输出该物体所属的类别标签。
核心特点:
- 一对一的映射:通常情况下,一张图片对应一个确定的类别标签(例如,“猫”、“狗”、“汽车”)。
- 模型的输出:对于一个有 个类别的分类问题,模型的最终输出通常是一个 维的向量,经过 Softmax 函数处理后,可以理解为模型对每个类别的预测概率。
性能评价指标:Top-1与Top-5 Error
在评估分类模型性能时,我们不仅关心模型认为“最可能”的类别是否正确,有时也关心正确答案是否出现在模型认为“比较可能”的前几个候选中。这就引出了两个关键指标:
- Top-1 Error(错误率):模型预测概率最高的那个类别(即排名第一的类别)如果与真实标签不符,则计为一次错误。它衡量的是模型“一击即中”的能力。
- Top-5 Error(错误率):模型预测概率最高的前五个类别中,只要包含了真实标签,即视为正确;如果前五个都没有包含真实标签,则计为一次错误。这个指标对模型的要求相对宽松,常用于类别数量非常多(如ImageNet的1000类)的场景。
举个例子: 假设真实图片是一个“铁皮鼓”(Steel drum)。模型A的输出概率排名前五的类别依次是:标尺、T恤衫、铁皮鼓、鼓槌、泥龟。
- 对于Top-1指标:模型A的第一个预测是“标尺”,错误。
- 对于Top-5指标:真实类别“铁皮鼓”出现在前五名中,正确。
模型B的输出概率排名前五的类别依次是:标尺、T恤衫、大熊猫、鼓槌、泥龟。
- 对于Top-1指标:第一个预测“标尺”,错误。
- 对于Top-5指标:真实类别“铁皮鼓”未出现在前五名中,错误。
里程碑:ImageNet与ILSVRC竞赛
谈到图像分类和现代深度学习,就绕不开ImageNet和由其发起的ImageNet大规模视觉识别挑战赛。
ImageNet数据集概览
ImageNet是一个根据WordNet(一个基于本体论构建的大型英语语义词汇网络)层次结构组织的图像数据集。
- 语义组织:它依据 WordNet 的层次结构组织类别;WordNet 本身收录了超过 10 万个同义词集(synsets),ImageNet 从中选取了约 2.1 万个名词性 synset。
- 数据规模:全部 synset 合计约 1419 万张图片(14,197,122 张),平均每个 synset 约 650 张;ILSVRC 竞赛使用的 1000 类子集则每类约 1000~1300 张。这种大规模、高质量、语义清晰的数据集,为训练强大的深度模型提供了坚实基础。
ILSVRC竞赛:深度学习的“催化剂”
ImageNet Large Scale Visual Recognition Challenge (ILSVRC) 是2010年至2017年间计算机视觉领域最具影响力的年度竞赛。它于2017年正式结束,组织者认为图像分类等任务已被深度学习很好地解决,未来将专注于更具挑战性的新方向。
ILSVRC包含多个视觉任务,其中最著名的是图像分类(Image Classification) 任务:
- 类别数:1000个类别。
- 数据划分:
- 训练集:约120万张图片。
- 验证集:约5万张图片。
- 测试集:约15万张图片。
- 模型输出:参赛模型需要输出一个1000维的向量,对应1000个类别的预测概率。
除了图像分类,ILSVRC还包括场景分类(使用MIT Places2数据集,超1000万图片,365个场景)、目标检测、物体定位和场景解析等任务。
ImageNet上的性能进化史
ILSVRC竞赛的历史,几乎就是深度学习卷积神经网络(CNN)的进化史。通过Top-5错误率的变化,我们可以清晰地看到技术发展的脉络:
年份 模型/方法 Top-5错误率(约) 说明
-----------------------------------------------------------------------
2011 传统方法(SIFT+FVs) ~25% 深度学习前夜
2012 AlexNet (8层) ~16.4% “深度学习革命”的起点
2014 VGG (19层) ~7.3% 结构规整,广泛用作基础网络
2014 GoogLeNet (22层) ~6.7% 引入Inception模块
2015 ResNet (152层) ~3.57% 引入残差连接,性能超越人类关键转折点:
- 2012年,AlexNet横空出世:由Geoffrey Hinton的学生Alex Krizhevsky等人提出,首次在大规模图像分类任务上显著超越传统方法,错误率骤降近10%,震惊了整个学术界和工业界,正式开启了深度学习的时代。
- 网络越来越深:从AlexNet的8层,到VGG的19层,再到ResNet的152层,网络的深度不断增加,性能也持续提升。ResNet的3.57% Top-5错误率,甚至被认为在某些条件下超过了人类的识别水平。
- 从竞赛到工业应用:这些在ImageNet上锤炼出的模型(如VGG、ResNet),其网络结构或预训练权重被广泛迁移到其他视觉任务(如目标检测、图像分割)中,成为通用的特征提取器。
轻量级选择:CIFAR-10数据集
对于学习者、研究者进行算法原型验证或教学演示来说,ImageNet规模过大,对计算资源要求高。CIFAR-10数据集则是一个理想的“轻量级”替代品。
CIFAR-10特点:
- 分辨率低:图像尺寸仅为32×32像素,比ImageNet常用的224×224或256×256小得多,计算速度快。
- 规模适中:共有6万张彩色图像。
- 类别清晰:分为10个互斥的类别,包括:飞机、汽车、鸟、猫、鹿、狗、青蛙、马、船、卡车。
- 数据划分:
- 训练集:5万张图像(构成5个批次,每批1万张)。
- 测试集:1万张图像(每个类别随机选取1000张)。
由于其小巧且易于收敛的特性,CIFAR-10常被用于新模型架构的快速实验、超参数调试以及深度学习入门教学。
下面我们用代码模拟构造一个微型的CIFAR-10数据批次,并展示其基本属性:
import numpy as np
# 模拟一个微型的CIFAR-10数据批次:4张32x32的RGB图像
# 在实际CIFAR-10中,像素值是0-255的整数,这里为演示生成随机整数
np.random.seed(42) # 固定随机种子,确保结果可复现
batch_size = 4
height, width, channels = 32, 32, 3
# 生成4张“图像”数据 (4, 32, 32, 3),像素值在[0, 255]区间
simulated_batch_images = np.random.randint(0, 256, size=(batch_size, height, width, channels), dtype=np.uint8)
# 生成对应的4个标签(0-9之间)
simulated_batch_labels = np.random.randint(0, 10, size=(batch_size,))
print("模拟一个微型CIFAR-10数据批次:")
print(f"图像数据形状: {simulated_batch_images.shape}")
print(f"图像像素值范围: [{simulated_batch_images.min()}, {simulated_batch_images.max()}]")
print(f"对应标签: {simulated_batch_labels}")
print("标签含义示例: 0=飞机, 1=汽车, ..., 9=卡车")模拟一个微型CIFAR-10数据批次:
图像数据形状: (4, 32, 32, 3)
图像像素值范围: [0, 255]
对应标签: [6 9 6 6]
标签含义示例: 0=飞机, 1=汽车, ..., 9=卡车在实际训练前,通常需要对图像数据进行预处理,例如归一化(Normalization)。最常见的操作是将像素值从[0, 255]的整数范围缩放到[0, 1]或[-1, 1]的浮点数范围,有助于模型稳定训练。
import numpy as np
# 为了演示归一化,我们重新在块内构造一份独立的数据,确保自包含
np.random.seed(42)
demo_images = np.random.randint(0, 256, size=(2, 5, 5, 3), dtype=np.uint8) # 使用更小的5x5图像便于观察
print("原始图像数据(第一张图像的第一个5x5块,R通道):")
print(demo_images[0, :, :, 0])
print(f"原始像素值范围: [{demo_images.min()}, {demo_images.max()}]")
# 归一化到 [0, 1] 区间
normalized_images = demo_images.astype(np.float32) / 255.0
print("\n归一化后数据(第一张图像的第一个5x5块,R通道):")
np.set_printoptions(precision=3, suppress=True)
print(normalized_images[0, :, :, 0])
print(f"归一化后像素值范围: [{normalized_images.min():.3f}, {normalized_images.max():.3f}]")原始图像数据(第一张图像的第一个5x5块,R通道):
[[102 95 234 3 14]
[ 46 99 212 188 153]
[203 214 121 114 239]
[244 74 14 145 184]
[116 85 226 235 151]]
原始像素值范围: [0, 254]
归一化后数据(第一张图像的第一个5x5块,R通道):
[[0.4 0.373 0.918 0.012 0.055]
[0.18 0.388 0.831 0.737 0.6 ]
[0.796 0.839 0.475 0.447 0.937]
[0.957 0.29 0.055 0.569 0.722]
[0.455 0.333 0.886 0.922 0.592]]
归一化后像素值范围: [0.000, 0.996]备注:CIFAR-10数据集的收集者之一正是Alex Krizhevsky,也就是AlexNet的第一作者。可以说,从CIFAR-10到ImageNet,体现了研究问题从简单到复杂、模型能力从浅到深的自然演进路径。
📝 动手练一练
- 概念辨析:假设有一个1000类的图像分类模型,在测试集上评估得到Top-1错误率为10%,Top-5错误率为2%。请解释这两个数字的具体含义。如果一个分类任务只关心模型给出的“最佳答案”,应该更关注哪个指标?
👉 点击查看参考答案
- Top-1错误率10%:意味着在测试集中,模型预测概率最高的那个类别(第一名)与真实标签不符的情况占10%。即模型“最佳答案”的准确率为90%。
- Top-5错误率2%:意味着在测试集中,真实标签没有出现在模型预测概率最高的前五个类别中的情况占2%。即模型“前五名答案”的覆盖准确率为98%。
- 指标选择:如果任务只关心模型给出的单一、最确定的答案(例如,自动驾驶中识别一个交通标志必须是唯一确定的),那么应该更关注Top-1错误率。Top-5错误率更适用于需要提供多个候选答案供后续处理或人工复核的场景(例如,图像搜索引擎的初步检索)。
- 数据理解:在CIFAR-10数据集中,如果训练集是5万张图,测试集是1万张图,每个类别有6000张图。请问,训练集中每个类别的图片大约有多少张?测试集呢?这种划分方式可能带来什么潜在假设?
👉 点击查看参考答案
- 训练集每个类别的图片数:总训练图片数5万 / 10个类别 = 平均每类5000张。
- 测试集每个类别的图片数:总测试图片数1万 / 10个类别 = 平均每类1000张。
- 潜在假设:这种划分方式假设了数据是类别平衡的,即每个类别的样本数量大致相同。在现实世界的许多数据集中,类别分布可能是不平衡的(某些类别的图片远多于其他类别),这就需要采用不同的采样策略或损失函数来处理。CIFAR-10的平衡性使其成为算法初步比较的公平基准。
本章小结
本节我们为学习经典的卷积神经网络做好了数据准备。我们明确了图像分类任务的基本框架和Top-1/Top-5评价指标,深入了解了推动深度学习浪潮的ImageNet数据集及其著名的ILSVRC竞赛,也认识了适合快速实验的CIFAR-10数据集。理解这些基准数据集的特点和意义,是欣赏后续AlexNet、VGG、ResNet等模型创新与性能突破的关键背景。
需要补充的是,ILSVRC 已于 2017 年停办,但 ImageNet 预训练权重和 Top-1/Top-5 指标至今仍是分类任务最通用的“度量衡”。今天面向大模型预训练的数据规模已远超 ImageNet(如数亿乃至数十亿图文对),但正是 ImageNet 确立了“大规模标注 + 统一评测”的范式,本节介绍的组织方式与评价口径因此仍是理解后续一切数据集工作的基础。
📋 行动清单
- 清晰复述Top-1 Error和Top-5 Error的定义和区别。
- 说出ImageNet数据集的三个关键特点(规模、WordNet组织、ILSVRC竞赛)。
- 记住AlexNet在2012年ILSVRC竞赛中的突破性意义,以及ResNet取得的里程碑式性能(~3.57% Top-5错误率)。
- 了解CIFAR-10数据集在分辨率、规模和用途上与ImageNet的主要差异。
—— 小象教研组
配套资料 · 直接下载
课件、代码、数据集等配套资料全部免费,点击即可直接下载,无需分享或解锁。