图像分类笔记(上)摘录
数据驱动方法:如何写一个图像分类的算法呢?这和写个排序算法可是大不一样。怎么写一个从图像中认出猫的算法?搞不清楚。因此,与其在代码中直接写明各类物体到底看起来是什么样的,倒不如说我们采取的方法和教小孩儿看图识物类似:给计算机很多数据,然后实现学习算法,让计算机学习到每个类的外形。这种方法,就是数据驱动方法。
图像分类流程在课程视频中已经学习过,图像分类就是输入一个元素为像素值的数组,然后给它分配一个分类标签。完整流程如下:
- 输入:输入是包含N个图像的集合,每个图像的标签是K种分类标签中的一种。这个集合称为训练集。
- 学习:这一步的任务是使用训练集来学习每个类到底长什么样。一般该步骤叫做训练分类器或者学习一个模型。
- 评价:让分类器来预测它未曾见过的图像的分类标签,并以此来评价分类器的质量。我们会把分类器预测的标签和图像真正的分类标签对比。毫无疑问,分类器预测的分类标签和图像真正的分类标签如果一致,那就是好事,这样的情况越多越好。
Nearest Neighbor分类器
将两张图片先转化为两个向量和,然后计算他们的L1距离:
1,评分函数:就是一个将原始图像数据转换到分类标签的参数化映射(Parameterized mapping from images to label scores)。对于线性分类器而言,就是下面的线性映射: f(xi, W, b) = Wxi + b
xi为一张图片拉伸成一个长度为D的列向量,
W是大小为[C,D]的权重矩阵,
b是[C,1]的偏置向量,
f为[C,1]的评分向量,表示样本在每一个类别上的得分。
其中W的每一行都表示为一个类别的分类器,共C个类别,与xi相乘之后得到一个分数(可以理解为相似度),其实就是从训练集中为每一个类别抽象出一个模板保存在W中,然后将新的图像与这C个模板相比较,最相似的就当做是其类别。所以训练分类器的目的就是从训练集中学习到最优的参数W和b(其实可以通过给x和W分别扩展一个维度将b融到其中,见下图)。