1.数据驱动:图像分类
面对的困难挑战是视角变化,大小变化,形变,遮挡,光照条件,背景干扰,类内差异。
Nearest Neighbor分类器
在CIFAR-10数据集上,总共6W张图片,有10类。32×32×3
5W做训练集,1W做测试集。每张测试图片属于哪一类,就是直接计算两张图片的所有像素的差值,一个测试图片和5W个训练集图片分别比较,最后哪个差值小就是和这个图片一类。
L1 (Manhattan)distance
L2 (Euclidean)distance
你会发现准确率能达到38.6%。这比随机猜测的10%要好,但是比人类识别的水平(据研究推测是94%)和卷积神经网络能达到的95%还是差多了
k - Nearest Neighbor Classifier(KNN)
不找最近的一个图片的标签作为记过,找K个图片,然后投票决定图片标签
用于超参数调优的验证集
这里有K和which distance 两个超参数需要确定,不要用你的test data来调优找到超参数
在训练集中,使用交叉循环验证,分成5份,用4份做训练集,一份做验证集
一旦找到最优的超参数,就让算法以该参数在测试集跑且只跑一次,并根据测试结果评价算法。
对最优的超参数做记录。记录最优参数后,是否应该让使用最优参数的算法在完整的训练集上运行并再次训练呢?因为如果把验证集重新放回到训练集中(自然训练集的数据量就又变大了),有可能最优参数又会有所变化。在实践中,不要这样做。千万不要在最终的分类器中使用验证集数据,这样做会破坏对于最优参数的估计。直接使用测试集来测试用最优参数设置好的最优模型,得到测试集数据的分类准确率,并以此作为你的kNN分类器在该数据上的性能表现。
Nearest Neighbor分类器的优劣
耗时,图像是高维的。且用L1和L2并不准确。
仅仅使用L1和L2范数来进行像素比较是不够的,图像更多的是按照背景和颜色被分类,而不是语义主体分身。
2.参数方法:线性分类
y = wx +b
还是在 大专栏 cs231n Lecture2 Image ClassificationCIFAR-10训练集上,一个单独的矩阵乘法Wx就可以高效地并行评估10个不同的分类器。
从上面可以看到,W的每一行都是一个分类类别的分类器。对于这些数字的几何解释是:如果改变其中一行的数字,会看见分类器在空间中对应的直线开始向着不同方向旋转。而偏差b,则允许分类器对应的直线平移。需要注意的是,如果没有偏差,无论权重如何,在x_i=0时分类分值始终为0。这样所有分类器的线都不得不穿过原点。
将线性分类器看做模板匹配:关于权重W的另一个解释是它的每一行对应着一个分类的模板(有时候也叫作原型)。一张图像对应不同分类的得分,是通过使用内积(也叫点积)来比较图像和模板,然后找到和哪个模板最相似。从这个角度来看,线性分类器就是在利用学习到的模板,针对图像做模板匹配。从另一个角度来看,可以认为还是在高效地使用k-NN,不同的是我们没有使用所有的训练集的图像来比较,而是每个类别只用了一张图片(这张图片是我们学习到的,而不是训练集中的某一张),而且我们会使用(负)内积来计算向量间的距离,而不是使用L1或者L2距离。
对CIFAR-10的10个类别的权重数值可视化,可以看到如图所示。
可以看到马的模板看起来似乎是两个头的马,这是因为训练集中的马的图像中马头朝向各有左右造成的。线性分类器将这两种情况融合到一起了。类似的,汽车的模板看起来也是将几个不同的模型融合到了一个模板中,并以此来分辨不同方向不同颜色的汽车。这个模板上的车是红色的,这是因为CIFAR-10中训练集的车大多是红色的。线性分类器只拟合了一个模板,求了所有相关图像特征的均值。线性分类器对于不同颜色的车的分类能力是很弱的,但是后面可以看到神经网络是可以完成这一任务的。神经网络可以在它的隐藏层中实现中间神经元来探测不同种类的车(比如绿色车头向左,蓝色车头向前等)。而下一层的神经元通过计算不同的汽车探测器的权重和,将这些合并为一个更精确的汽车分类分值。
2017雷锋网 http://ai.yanxishe.com/page/search
2016网易云视频:
课件原文:http://cs231n.github.io/classification/
课件翻译:https://zhuanlan.zhihu.com/p/20894041?refer=intelligentunit