CS231n17lecture2
图像分类
这节课讲解了一些基础的图像知识和几种很简单的分类方法
Image classification
一张图像对于机器来说是一个三维矩阵(如果是灰度图则是二维的)。人眼可以将同一个物体不同角度的照片归为同一类,但是变换角度之后,图像矩阵上各点的值发生了改变,对于机器来说就不能单纯凭借矩阵上的值来判定图像的类别。
此外还有一些其他的原因对分类造成影响:
- 光照条件的不同
- 物体形变或者目标的姿态发生变化
- 其他物体对目标产生遮挡
- 不同的背景信息
- 同类别不同目标之间的交叉
设计分类器
对于分类器,我们的直观想法是输入一张图片,将图片的类别输出。比如我们输入一张猫的图片,我们可以勾勒出猫的轮廓,基于这个轮廓我们判断这张图片是猫,但这种方法很难做到对影响条件鲁棒,如果猫换一种姿势,那么判断就要出现问题。
为了让算法能适用尽可能多的情况,我们提出了Data-Drived方法:
- 收集图片和标记构成的数据集
- 使用机器学习方法训练一个分类器
- 用新的图片评估分类器
Nearest Neighbor
方法
将所有图片放到存储空间,当给定新的图片时,根据判定标准,将新的图片归类于与其最类似图片的类别
判定标准有:
- 矩阵的一范数:
- 矩阵的二范数:
分析
最近邻算法训练时只需构造一个包含所有训练图片的矩阵,复杂度为 ,测试时,需要将输入与所有的训练图片比较,复杂度为 ,我们希望算法可以在训练时花费时间,但是在测试时尽可能得快,所以NN算法不符合要求
KNN
因为NN算法只考虑与其间隔最小的点,如果改点是噪声,那么对图片的分类会造成很大的影响,于是提出了KNN算法:选取最相近的K个点,根据这K个点的分类判断输入图像的类别。
这里讨论了一范数与二范数的不同:
一范数的取值基于坐标轴,转动坐标会对一范数产生影响,但二范数不受该坐标轴的影响,如果分类时一些特征含有特殊含义那么最好使用一范数,如果坐标只是空间中的通用向量,不清楚其特别含义,那么二范数更好;另外在优化时使用一范数得到的结果稀疏度更高。
在KNN中,存在两个超参数:
- k,所谓超参数是无法通过训练得到的参数。
- distance:选择一范数还是二范数
超参数的设置方法
我们不能只有训练集,因为训练集上的表现并不能反映在现实中的表现;不能只有训练集和测试集,这样无法验证算法在新数据上的准确性;最好设置训练集验证集和测试集,在训练集里训练参数,在验证集中调试超参数,在测试集中测试分类器性能。
这里提出了交叉验证的方法:如果我们的数据中只有训练集和测试集,那么我们可以将训练集分成n份,在n-1份中训练,在剩下的一份中验证,取n次验证结果的平均值作为当前超参数的性能。交叉验证的方法只适用于小的数据集,对于大型数据集(深度学习数据集)不适用。
对于图像的判别不适应
- 图像维度很高,判断很慢
- 对于不同图像,使用 或 无法有效的区分各类图片
左边三张与第一张有相同的 - 维度诅咒:维度越高要完美判定需要的数据越多,对于一张图片而言,输入图片,图片的像素数即为其维度,很难获取足够的图片将维度填满。
Linear classification
线性分类器是复杂分类器的基础,我们使用的卷积神经网络可以认为是线性分类器的组合
对于一张输入图片,我们将其拉为一个 维的向量, 的行数为分类的类别数,列数为输入图片的维度。
对于线性分类器我们可以这么理解: 的每一行为一个类别的模版, 的每一个值为对一个类别的补偿,输入图像的类别为最匹配模版的类别。
上图为W每一行可视化之后的图像。
参考资料
对于该课程的作业在:
https://github.com/sharedeeply/cs231n-assignment-solution
课件:
http://cs231n.stanford.edu/slides/2017/cs231n_2017_lecture2.pdf