图像分类笔记

图像分类笔记(image classification notes)

计算机视觉算法在图像识别方面遇到的一些困难,要记住图像是以3维数组来表示的,数组中的元素是亮度值.

  • 视角变化(Viewpoint variation)
  • 大小变化(Scale variation)
  • 形变(Deformation)
  • 遮挡(Occlusion)
  • 光照条件(Illumination conditions)
  • 背景干扰(Background clutter)
  • 类内差异(Intra-class variation)

数据驱动方法: 给计算机很多数据,然后实现学习算法,让计算机学习到每个类的外形。这种方法,就是数据驱动方法

Nearest Neighbor分类器:超参数(hyperparameter)
用于超参数调优的验证集:其思路是:从训练集中取出一部分数据用来调优,我们称之为验证集(validation set)。
训练集数量较小(因此验证集的数量更小),人们会使用一种被称为交叉验证的方法,这种方法更加复杂些。将训练集平均分成5份(一般为3、5、10),其中4份用来训练,1份用来验证。然后我们循环着取其中4份来训练,其中1份来验证,最后取所有5次验证结果的平均值作为算法验证结果。

实际应用k-NN
如果你希望将k-NN分类器用到实处(最好别用到图像上,若是仅仅作为练手还可以接受),那么可以按照以下流程:

  • 预处理你的数据:对你数据中的特征进行归一化(normalize),让其具有零平均值(zero mean)和单位方差(unit
    variance)。在后面的小节我们会讨论这些细节。本小节不讨论,是因为图像中的像素都是同质的,不会表现出较大的差异分布,也就不需要标准化处理了。
  • 如果数据是高维数据,考虑使用降维方法,比如PCA(wiki ref, CS229ref, blog ref)或随机投影。
  • 将数据随机分入训练集和验证集。按照一般规律,70%-90%
    数据作为训练集。这个比例根据算法中有多少超参数,以及这些超参数对于算法的预期影响来决定。如果需要预测的超参数很多,那么就应该使用更大的验证集来有效地估计它们。如果担心验证集数量不够,那么就尝试交叉验证方法。如果计算资源足够,使用交叉验证总是更加安全的(份数越多,效果越好,也更耗费计算资源)。
  • 在验证集上调优,尝试足够多的k值,尝试L1和L2两种范数计算方式。
  • 如果分类器跑得太慢,尝试使用Approximate Nearest
    Neighbor库(比如FLANN)来加速这个过程,其代价是降低一些准确率。
  • 对最优的超参数做记录。记录最优参数后,是否应该让使用最优参数的算法在完整的训练集上运行并再次训练呢?因为如果把验证集重新放回到训练集中(自然训练集的数据量就又变大了),有可能最优参数又会有所变化。在实践中,不要这样做。千万不要在最终的分类器中使用验证集数据,这样做会破坏对于最优参数的估计。直接使用测试集来测试用最优参数设置好的最优模型,得到测试集数据的分类准确率,并以此作为你的kNN分类器在该数据上的性能表现

猜你喜欢

转载自blog.csdn.net/qq_43283527/article/details/84062779