Image Classification¶
约 1280 个字 6 张图片 预计阅读时间 5 分钟
- input: image
- output: label -- assign image to one of a fixed set of categories
challenge:
- semantic gap: the difference between low-level pixels and high-level concepts
- viewpoint variation: the same object can look different from different viewpoints
- intraclass variation: the same class can have a lot of variation
- fine-grained discrimination: distinguishing between similar categories
- background clutter: 需要识别的物体可能与环境融为一体
- illumination changes: 光照变化,会大幅影响像素
- deformation:物体变形(猫是可以随便变形的液体x)
- Occlusion:遮挡
machine learning¶
data-driven approach:
- collect a dataset of images and labels
- use machine learning to train a classifier
- evaluate the classifier on a new image
MNIST 是一个手写数字数据集,每个图片是一个28x28的灰度图像,有10个类别,共计50000张训练图片和10000张测试图片。
由于 MNIST 数据集太简单,所以很多模型都能达到很高的准确率,因此通常只用来验证模型是否能正常工作。
ImageNet 是一个大型的图像数据集,有1000个类别,共计1400万张图片,被视为计算机视觉领域的标准测试集。
当我们进行图像分类时,通常会涉及到两个主要的函数:train 和 predict。
- train: 输入训练数据集,让模型学习并记忆数据及其标签,输出一个模型
- predict: 输入与训练数据集相似的测试数据集,让模型根据数据的特征预测其标签,输出预测标签
First classifier: Nearest Neighbor¶
我们首先需要能够衡量两个图片之间的相似度,例如曼哈顿距离(L1 distance):
如果只考虑最近的一个邻居,那么我们的分类器就很容易受到噪声等各种因素的影响。如果我们在这时考虑更多的邻居,例如 K 个,那么这个位置的点的分类就会是这 K 个点中最多的那个类别,这称为 K-Nearest Neighbor。
对于 K-Nearest Neighbor 而言,有两个我们无法通过训练得到的超参数(hyperparamete r):K 和 distance metric。
通常而言,我们有几种来确定超参数的方法:
- 如果我们只考虑让模型在我们自己的训练集上表现最好,那么毫无疑问我们应该选择 K=1,因为这样的话所有训练数据的最近邻居都是它自己(距离为 0),虽然这样能达到 100% 的准确率,但毫无疑问这样的模型是过拟合的。
- 假如我们把数据集划分为训练集和测试集两部分,并且我们只关心测试集的准确率,这样也会得到不那么好的结果。因为每一次接触测试集的数据,我们的模型都会被“污染”,这会导致我们无法评估模型的泛化能力。
-
我们还可以把数据集分为训练集、验证集和测试集三部分,利用训练集训练,根据验证集上的表现结果调整参数,并最后在测试集上进行且仅进行一次测试,根据测试结果最终判定模型的好坏。
Evaluate on the test set only a single time, at the very end.
虽然这在事实上是训练模型的正确方法,但这也意味着我们如果我们最终发现模型的表现不好,那么前面所做的所有工作就都白费了,这在实践中是难以接受的。
-
还有一种方法是把数据分块,每次只用其中一块作为验证集,其余的作为训练集,这样我们可以多次验证模型的表现,最终取平均值作为模型的表现。这种方法叫做交叉验证(cross-validation),但在深度学习中很少使用。
- 交叉验证的计算成本很高,因此人们更倾向于使用单一认证分割(single validation split),通常使用 50%-90% 的数据用于训练,其余用于验证。
K-Nearest Neighbor: Universal Approximation¶
某种意义上,只要我们拥有足够多的训练数据,我们就可以利用 K-Nearest Neighbor 模型来近似任何函数,这称为 Universal Approximation(万能逼近,通用近似)。


但要达到这样的目的就需要我们拥有足够稠密的数据点,例如我们想要达到在一维数据中 4 个能够做到的密集程度,在二维数据中就需要 $ 4^2 $ 个,而在三维数据中就需要 $ 4^3 $ 个,在高维数据中就会出现维度爆炸问题。
我们很少直接在原始的像素空间上进行 K-Nearest Neighbor,但利用深度卷积网络(deep convolutional network)可以在高维空间中学习到一个好的特征表示,这样就可以在特征空间中进行 K-Nearest Neighbor。
Abstract
- In Image classification we start with a training set of images and labels, and must predict labels on the test set
- Image classification is challenging due to the semantic gap: we need invariance to occlusion, deformation, lighting, intraclass variation, etc
- Image classification is a building block for other vision tasks
- The K-Nearest Neighbors classifier predicts labels based on nearest training examples
- Distance metric and K are hyperparameters
- Choose hyperparameters using the validation set; only run on the test set once at the very end!