文章目录
- 📚 学习路线图
- 本文内容一览(快速理解)
- 一、什么是图像分类(Image Classification):计算机视觉的核心任务
- 1.1 图像分类的定义(What is Image Classification):给图像分配类别标签
- 1.2 语义鸿沟(Semantic Gap):像素值与语义理解之间的差距
- 1.3 图像分类的挑战(Challenges in Image Classification):六个主要挑战
- 二、最近邻分类器(Nearest Neighbor Classifier):基于相似度的简单分类方法
- 2.1 最近邻分类器的原理(Nearest Neighbor Basics):记住训练数据,找到最相似的图像
- 2.2 距离度量(Distance Metric):如何比较两张图像的相似性
- 2.3 K-最近邻分类器(K-Nearest Neighbors):使用K个最近邻的投票机制
- 2.4 超参数设置(Hyperparameter Setting):如何选择K和距离度量
- 2.5 最近邻分类器的局限性(Limitations of Nearest Neighbor):为什么不适合图像分类
- 三、线性分类器(Linear Classifier):使用线性函数进行图像分类
- 3.1 参数化方法(Parametric Approach):使用参数进行图像分类
- 3.2 线性分类器的计算(Linear Classifier Computation):从图像到类别分数
- 3.3 线性分类器的三种理解方式(Three Viewpoints of Linear Classifier):代数、视觉、几何
- 3.4 线性分类器的局限性(Limitations of Linear Classifier):不能处理复杂模式
- 📝 本章总结
- 📚 延伸阅读
- 推荐资源
📌适合对象:计算机视觉初学者、机器学习入门者
⏱️预计阅读时间:40-50分钟
🎯学习目标:理解图像分类的基本概念和挑战,掌握最近邻分类器和线性分类器的原理
📚 学习路线图
本文内容一览(快速理解)
- 图像分类(Image Classification):给图像分配一个类别标签的核心任务
- 语义鸿沟(Semantic Gap):计算机看到的像素值与人类理解的语义之间的差距
- 图像分类的挑战:视角变化、背景杂乱、光照、形变、遮挡、类内变化
- 最近邻分类器(Nearest Neighbor):基于相似度的简单分类方法
- K-最近邻分类器(K-Nearest Neighbors):使用K个最近邻的投票机制
- 线性分类器(Linear Classifier):使用线性函数进行图像分类
一、什么是图像分类(Image Classification):计算机视觉的核心任务
这一章要建立的基础:理解图像分类的基本概念和挑战
核心问题:如何让计算机识别图像中的物体类别?
[!NOTE]
📝 关键点总结:图像分类是给图像分配一个类别标签的任务。计算机看到的只是像素值,而我们需要的是语义理解,这之间存在语义鸿沟。图像分类面临视角变化、背景杂乱、光照、形变、遮挡、类内变化等挑战。
1.1 图像分类的定义(What is Image Classification):给图像分配类别标签
概念的本质:
图像分类是计算机视觉的核心任务之一。给定一张图像和一个预定义的类别集合(如{狗, 猫, 卡车, 飞机, …}),我们需要给图像分配一个类别标签。
图解说明:
💡说明:
- 输入:一张图像(如800 × 600 × 3 800 \times 600 \times 3800×600×3的RGB图像)
- 输出:一个类别标签(如"cat")
- 类别集合:预定义的离散标签集合
类比理解:
想象你在看一张照片,照片中有一只猫。图像分类就像你看到照片后说"这是一只猫"。但计算机看到的只是一堆数字(像素值),它需要学会从这些数字中识别出"猫"这个类别。
实际例子:
图像分类的应用: 1. 图像搜索引擎:根据类别搜索图像 2. 自动驾驶:识别道路上的车辆、行人、标志 3. 医学影像:识别病变、器官 4. 社交媒体:自动标记照片中的物体 图像分类的特点: - 输入:图像(像素值矩阵) - 输出:类别标签(离散值) - 挑战:需要从像素值中提取语义信息1.2 语义鸿沟(Semantic Gap):像素值与语义理解之间的差距
概念的本质:
计算机看到的图像只是一堆数字(像素值,如0-255之间的整数),而我们需要的是语义理解(如"这是一只猫")。这之间的差距就是语义鸿沟。
图解说明:
💡说明:
- 计算机视角:图像是800 × 600 × 3 800 \times 600 \times 3800×600×3的数字矩阵(每个像素是0 00-255 255255的整数)
- 人类视角:图像包含语义信息(如"猫"、“狗”)
- 语义鸿沟:两者之间的差距,需要通过特征提取和学习来桥接
类比理解:
想象你在看一本用你不懂的语言写的书。你看到的只是一堆符号(就像计算机看到的像素值),但你需要理解书的内容(就像我们需要理解图像的语义)。语义鸿沟就像这两种理解之间的差距,需要通过"翻译"(特征提取和学习)来桥接。
实际例子:
语义鸿沟的例子: - 计算机看到:[[56, 231, 24], [2, 45, 123], ...](像素值) - 人类理解:这是一只猫(语义信息) - 差距:需要从像素值中提取特征,学习语义 为什么不能直接硬编码? - 无法用简单的规则描述"猫"的特征 - 猫有各种形状、颜色、姿态 - 需要从数据中学习模式 解决方案: - 使用机器学习方法 - 从大量标注数据中学习 - 提取特征,学习分类规则1.3 图像分类的挑战(Challenges in Image Classification):六个主要挑战
概念的本质:
图像分类面临许多挑战,包括视角变化、背景杂乱、光照变化、形变、遮挡、类内变化等。这些挑战使得图像分类成为一个困难的问题。
图解说明:
💡说明:
- 视角变化:相机移动时,所有像素都改变
- 背景杂乱:物体可能出现在各种背景中
- 光照变化:同一物体在不同光照下看起来不同
- 形变:物体可能有各种形状和姿态
- 遮挡:物体可能被部分遮挡
- 类内变化:同一类别的物体可能有很大差异
类比理解:
想象你在教一个孩子识别"猫"。但猫可能:
- 从不同角度拍摄(视角变化)
- 出现在不同背景中(背景杂乱)
- 在阳光下或阴影中(光照变化)
- 坐着、躺着、站着(形变)
- 被其他物体部分遮挡(遮挡)
- 有各种颜色、大小、品种(类内变化)
这些挑战使得识别"猫"变得困难,需要学习对这些变化鲁棒的特征。
实际例子:
视角变化的挑战: - 同一物体从不同角度拍摄,像素值完全不同 - 需要学习对视角变化不变的特征 - 例如:旋转、缩放、平移 背景杂乱的挑战: - 物体可能出现在各种背景中 - 背景可能包含干扰信息 - 需要专注于物体本身,忽略背景 光照变化的挑战: - 同一物体在不同光照下看起来不同 - 需要学习对光照变化鲁棒的特征 - 例如:亮度、对比度、阴影 形变的挑战: - 物体可能有各种形状和姿态 - 需要学习对形变鲁棒的特征 - 例如:非刚性形变 遮挡的挑战: - 物体可能被部分遮挡 - 只能看到部分特征 - 需要从部分信息推断整体 类内变化的挑战: - 同一类别的物体可能有很大差异 - 需要学习类别的共同特征 - 例如:不同品种的猫二、最近邻分类器(Nearest Neighbor Classifier):基于相似度的简单分类方法
这一章要建立的基础:理解基于相似度的分类方法
核心问题:如何根据训练数据对新图像进行分类?
[!NOTE]
📝 关键点总结:最近邻分类器是一种简单的分类方法:记住所有训练数据和标签,对于新图像,找到最相似的训练图像,预测其标签。虽然简单,但预测速度慢(O ( N ) O(N)O(N)),且像素距离不能很好地表示图像相似性。
2.1 最近邻分类器的原理(Nearest Neighbor Basics):记住训练数据,找到最相似的图像
概念的本质:
最近邻分类器是一种非常简单的分类方法:
- 训练阶段:记住所有训练图像和对应的标签
- 预测阶段:对于新图像,找到训练集中最相似的图像,预测其标签
图解说明:
💡说明:
- 训练:O ( 1 ) O(1)O(1)时间复杂度,只需要存储数据
- 预测:O ( N ) O(N)O(N)时间复杂度,需要计算与所有训练图像的距离
- 问题:预测速度慢,我们希望预测快、训练慢可以接受
类比理解:
想象你在一个图书馆中找书。最近邻分类器就像:
- 训练阶段:记住图书馆中所有书的位置和类别
- 预测阶段:拿到一本新书,在图书馆中找到最相似的书,然后说"这本书和那本书一样,所以是同一类"
这种方法简单,但每次预测都需要遍历整个图书馆,速度很慢。
实际例子:
最近邻分类器的例子(CIFAR-10数据集): - 10个类别:飞机、汽车、鸟、猫、鹿、狗、青蛙、马、船、卡车 - 50,000张训练图像 - 10,000张测试图像 训练过程: - 存储所有50,000张训练图像和标签 - 时间复杂度:$O(1)$(只是存储) 预测过程: - 对于每张测试图像,计算与所有50,000张训练图像的距离 - 找到距离最小的训练图像 - 预测其标签 - 时间复杂度:$O(N)$,$N=50,000$ 问题: - 预测速度慢:每张测试图像需要比较50,000次 - 我们希望预测快,训练慢可以接受2.2 距离度量(Distance Metric):如何比较两张图像的相似性
概念的本质:
距离度量用于比较两张图像的相似性。常用的距离度量包括L1距离(曼哈顿距离)和L2距离(欧氏距离)。
图解说明:
💡说明:
- L1距离:对应像素差的绝对值之和
- L2距离:对应像素差的平方和的平方根
- 距离越小:图像越相似
类比理解:
想象你在比较两幅画。距离度量就像测量两幅画的差异:
- L1距离:逐像素比较,累加所有差异(就像数有多少个像素不同)
- L2距离:考虑差异的大小,大差异的权重更大(就像考虑差异的严重程度)
实际例子:
距离度量的计算: 假设两张图像各有4个像素: 图像1: [56, 231, 24, 2] 图像2: [60, 235, 20, 5] L1距离(曼哈顿距离): $|56-60| + |231-235| + |24-20| + |2-5|$ $= 4 + 4 + 4 + 3 = 15$ L2距离(欧氏距离): $\sqrt{(56-60)^2 + (231-235)^2 + (24-20)^2 + (2-5)^2}$ $= \sqrt{16 + 16 + 16 + 9} = \sqrt{57} \approx 7.55$ 距离度量的选择: - L1距离:对异常值更鲁棒 - L2距离:更常用,对大差异更敏感 - 都是超参数,需要根据问题选择2.3 K-最近邻分类器(K-Nearest Neighbors):使用K个最近邻的投票机制
概念的本质:
K-最近邻(KNN)分类器是最近邻分类器的扩展。不是只使用最近的一个邻居,而是使用K个最近的邻居,通过投票决定类别标签。
图解说明:
💡说明:
- K=1:最近邻分类器,直接使用最近邻的标签
- K>1:使用K个最近邻,通过多数投票决定标签
- 优势:对噪声更鲁棒,减少过拟合
类比理解:
想象你在问路。KNN就像:
- K=1:只问一个人,完全相信他的答案(可能不准确)
- K=3:问三个人,选择多数人的答案(更可靠)
- K=5:问五个人,选择多数人的答案(更可靠,但可能忽略少数人的正确意见)
K值的选择是一个权衡:K太小容易受噪声影响,K太大可能忽略局部特征。
实际例子:
KNN分类器的例子: 假设K=3,新图像有3个最近邻: - 最近邻1:类别"猫" - 最近邻2:类别"猫" - 最近邻3:类别"狗" 投票结果: - "猫":2票 - "狗":1票 预测:类别"猫"(多数投票) K值的选择: - K=1:最近邻分类器,可能对噪声敏感 - K=3或5:通常效果较好,平衡了鲁棒性和局部性 - K太大:可能忽略局部特征,边界不清晰 K是超参数: - 需要根据验证集选择 - 不同问题可能需要不同的K值2.4 超参数设置(Hyperparameter Setting):如何选择K和距离度量
概念的本质:
K值和距离度量(L1或L2)都是超参数,需要根据验证集来选择。不能使用测试集来选择超参数,否则会过拟合测试集。
图解说明:
💡说明:
- 训练集:用于训练模型
- 验证集:用于选择超参数(K值、距离度量)
- 测试集:只在最后评估一次,不能用于选择超参数
- 交叉验证:对于小数据集,可以使用交叉验证
类比理解:
想象你在准备考试:
- 训练集:你的学习材料(用来学习)
- 验证集:模拟考试(用来调整学习方法,如学习时间、复习方式)
- 测试集:真正的考试(只在最后考一次,不能用来调整方法)
如果你用测试集来调整方法,就像提前知道考试题目,这样得到的成绩不能反映真实水平。
实际例子:
超参数设置的错误方法: ❌ 方法1:在训练集上选择超参数 - 问题:K=1在训练集上总是完美(记住所有数据) - 结果:过拟合,泛化能力差 ❌ 方法2:在测试集上选择超参数 - 问题:测试集被"污染",不能反映真实性能 - 结果:过拟合测试集,实际应用效果差 ✅ 正确方法:使用验证集 - 训练集:训练模型 - 验证集:选择超参数(K值、距离度量) - 测试集:只在最后评估一次 交叉验证(小数据集): - 将数据分成K折(如5折) - 每次用K-1折训练,1折验证 - 重复K次,平均结果 - 选择平均性能最好的超参数2.5 最近邻分类器的局限性(Limitations of Nearest Neighbor):为什么不适合图像分类
概念的本质:
最近邻分类器在图像分类中很少使用,因为:
- 预测速度慢:O ( N ) O(N)O(N)时间复杂度,需要比较所有训练图像
- 像素距离不信息:像素级别的距离不能很好地表示图像的语义相似性
图解说明:
💡说明:
- 预测慢:每张测试图像需要与所有训练图像比较
- 像素距离问题:两张图像可能有相同的L2距离,但语义完全不同(如原始图像、加框图像、平移图像)
类比理解:
想象你在用最近邻分类器识别猫:
- 问题1:每次识别都需要与所有训练图像比较,速度很慢
- 问题2:两张图像可能在像素级别相似(如都是猫),但像素值完全不同(视角、光照不同)。相反,两张图像可能在像素级别相似(如平移后的图像),但语义相同。
像素距离不能很好地捕捉语义相似性。
实际例子:
像素距离的问题: 原始图像、加框图像、平移图像可能有相同的L2距离,但: - 原始图像和加框图像:语义相同(都是猫),但像素值不同 - 原始图像和平移图像:语义相同(都是猫),但像素值不同 这说明: - 像素级别的距离不能很好地表示语义相似性 - 需要更好的特征表示(如SIFT、CNN特征) 最近邻分类器的总结: - 优点:简单、训练快 - 缺点:预测慢、像素距离不信息 - 结论:不适合实际应用,需要更好的方法(如线性分类器、CNN)三、线性分类器(Linear Classifier):使用线性函数进行图像分类
这一章要建立的基础:理解参数化方法和线性分类器的原理
核心问题:如何用参数化的方法进行图像分类?
[!NOTE]
📝 关键点总结:线性分类器使用参数化的方法,通过线性函数f ( x , W ) = W x + b f(x,W) = Wx + bf(x,W)=Wx+b将图像映射到类别分数。参数W WW和b bb需要从数据中学习。线性分类器有三种理解方式:代数视角、视觉视角、几何视角。
3.1 参数化方法(Parametric Approach):使用参数进行图像分类
概念的本质:
与最近邻分类器(非参数化,需要存储所有训练数据)不同,参数化方法使用参数(权重W WW和偏置b bb)进行图像分类。参数需要从训练数据中学习,但预测时只需要参数,不需要训练数据。
图解说明:
💡说明:
- 输入:图像(32 × 32 × 3 = 3072 32 \times 32 \times 3 = 307232×32×3=3072个像素)
- 参数:W WW(10 × 3072 10 \times 307210×3072权重矩阵)和b bb(10 × 1 10 \times 110×1偏置向量)
- 输出:10 1010个类别的分数
- 优势:预测快(只需要矩阵乘法),不需要存储训练数据
类比理解:
想象你在学习识别猫。参数化方法就像:
- 最近邻方法:记住所有见过的猫的照片,每次识别时比较(需要存储所有照片)
- 参数化方法:学习一套"规则"(参数),用这套规则识别(只需要规则,不需要照片)
参数化方法更高效,但需要学习参数。
实际例子:
线性分类器的例子(CIFAR-10): 输入图像:$32 \times 32 \times 3 = 3072$个像素 类别数:$10$个类别 参数: - $W$:$10 \times 3072$权重矩阵 - $b$:$10 \times 1$偏置向量 计算: $f(x,W) = Wx + b$ - $x$:$3072 \times 1$(展平的图像) - $Wx$:$10 \times 3072 \times 3072 \times 1 = 10 \times 1$(类别分数) - $+b$:$10 \times 1 + 10 \times 1 = 10 \times 1$(最终分数) 输出:$10$个类别的分数,选择分数最高的类别 优势: - 预测快:只需要矩阵乘法 - 不需要存储训练数据 - 参数数量固定($10 \times 3072 + 10 = 30,730$个参数)3.2 线性分类器的计算(Linear Classifier Computation):从图像到类别分数
概念的本质:
线性分类器通过矩阵乘法将图像映射到类别分数。对于每个类别,计算一个分数,分数最高的类别就是预测结果。
图解说明:
💡说明:
- 展平图像:将图像展平成向量
- 矩阵乘法:W x WxWx计算每个类别的加权和
- 加偏置:+ b +b+b调整每个类别的分数
- 选择最大值:分数最高的类别就是预测结果
类比理解:
想象你在给一幅画打分。线性分类器就像:
- 权重W:每个像素对每个类别的重要性(如像素1对"猫"的重要性是0.2)
- 矩阵乘法:计算每个类别的总分(加权和)
- 偏置b:每个类别的基础分数(如"猫"的基础分数是1.1)
- 最终分数:选择分数最高的类别
实际例子:
线性分类器的计算示例: 假设图像有4个像素,3个类别(猫、狗、船) 输入图像:[56, 231, 24, 2](展平) 权重矩阵$W$($3 \times 4$): 像素1 像素2 像素3 像素4 猫 $[0.2, -0.5, 0.1, 2.0]$ 狗 $[1.5, 1.3, 2.1, 0.0]$ 船 $[0.0, 0.25, 0.2, -0.3]$ 偏置$b$:$[1.1, 3.2, -1.2]$ 计算: $$Wx = \begin{bmatrix} 0.2 \times 56 + (-0.5) \times 231 + 0.1 \times 24 + 2.0 \times 2 \\ 1.5 \times 56 + 1.3 \times 231 + 2.1 \times 24 + 0.0 \times 2 \\ 0.0 \times 56 + 0.25 \times 231 + 0.2 \times 24 + (-0.3) \times 2 \end{bmatrix} = \begin{bmatrix} -96.8 \\ 437.9 \\ 61.95 \end{bmatrix}$$ 加偏置: $$\text{分数} = \begin{bmatrix} -96.8 \\ 437.9 \\ 61.95 \end{bmatrix} + \begin{bmatrix} 1.1 \\ 3.2 \\ -1.2 \end{bmatrix} = \begin{bmatrix} -95.7 \\ 441.1 \\ 60.75 \end{bmatrix}$$ 预测:类别"狗"(分数最高:441.1)3.3 线性分类器的三种理解方式(Three Viewpoints of Linear Classifier):代数、视觉、几何
概念的本质:
线性分类器可以从三个角度理解:
- 代数视角:f ( x , W ) = W x + b f(x,W) = Wx + bf(x,W)=Wx+b,矩阵乘法
- 视觉视角:每个类别有一个模板(W WW的每一行),通过模板匹配
- 几何视角:每个类别有一个超平面,将空间分割成不同区域
图解说明:
💡说明:
- 代数视角:数学公式,矩阵运算
- 视觉视角:将W WW的每一行重塑成图像,可以看到每个类别的"模板"
- 几何视角:在高维空间中,每个类别用一个超平面分割空间
类比理解:
想象你在识别手写数字。线性分类器的三种理解方式就像:
- 代数视角:用数学公式计算分数(精确但抽象)
- 视觉视角:每个数字有一个"模板",通过模板匹配(直观)
- 几何视角:在特征空间中,每个数字占据一个区域(空间理解)
实际例子:
代数视角: $f(x,W) = Wx + b$ - 直接计算,数学公式 - 适合实现和理解计算过程 视觉视角: 将$W$的每一行重塑成$32 \times 32 \times 3$的图像 - 可以看到每个类别的"模板" - 模板显示了该类别关注的像素模式 - 例如:"猫"的模板可能显示眼睛、耳朵等特征 几何视角: 在高维空间($3072$维)中 - 每个类别用一个超平面分割空间 - 超平面的法向量是$W$的对应行 - 图像落在哪个区域,就属于哪个类别 - 例如:在2D空间中,一条直线将平面分成两部分 三种视角的互补: - 代数视角:理解计算 - 视觉视角:理解模板 - 几何视角:理解空间分割3.4 线性分类器的局限性(Limitations of Linear Classifier):不能处理复杂模式
概念的本质:
线性分类器只能学习线性决策边界,不能处理复杂的非线性模式。对于某些问题(如XOR问题、多模态分布),线性分类器无法正确分类。
图解说明:
💡说明:
- 线性边界:线性分类器只能学习超平面(直线、平面等)
- 复杂模式:对于非线性模式,线性分类器无法正确分类
- 解决方案:需要使用非线性模型(如神经网络、卷积神经网络)
类比理解:
想象你在用一条直线分割空间。线性分类器就像:
- 简单问题:可以用一条直线分开(如"大于5"和"小于5")
- 复杂问题:需要曲线才能分开(如"在第一象限和第三象限"或"在第二象限和第四象限")
线性分类器只能画直线,不能画曲线。
实际例子:
线性分类器无法处理的问题: 1. XOR问题: 类别1:第一象限和第三象限 类别2:第二象限和第四象限 - 无法用一条直线分开 - 需要非线性边界 2. 多模态分布: 类别1:两个分离的区域 类别2:其他区域 - 线性分类器只能用一个超平面 - 无法处理多个分离的区域 3. 环形分布: 类别1:$L_2$范数在$1$到$2$之间 类别2:其他 - 需要环形边界 - 线性分类器无法处理 解决方案: - 使用非线性模型 - 例如:神经网络、卷积神经网络 - 可以学习复杂的非线性决策边界📝 本章总结
核心要点回顾:
图像分类:
- 给图像分配类别标签的核心任务
- 面临语义鸿沟和多种挑战
最近邻分类器:
- 简单但预测慢(O ( N ) O(N)O(N))
- 像素距离不能很好地表示语义相似性
K-最近邻分类器:
- 使用K个最近邻投票
- 需要选择合适的K值和距离度量
线性分类器:
- 参数化方法,预测快
- 三种理解方式:代数、视觉、几何
- 只能学习线性边界,不能处理复杂模式
知识地图:
关键决策点:
- 选择分类器:最近邻简单但慢,线性分类器快但能力有限
- 距离度量:L1对异常值鲁棒,L2更常用
- K值选择:使用验证集选择,平衡鲁棒性和局部性
- 超参数设置:使用验证集,不能使用测试集
- 线性分类器的局限性:需要非线性模型处理复杂模式
📚 延伸阅读
推荐资源
CS231n课程:Stanford CS231n: Convolutional Neural Networks for Visual Recognition
- 详细的图像分类和深度学习课程
经典数据集:
- CIFAR-10:10类图像分类数据集
- ImageNet:大规模图像分类数据集
下一步学习:
- 损失函数:如何衡量分类器的好坏
- 优化:如何学习参数W和b
- 卷积神经网络:更强大的图像分类模型