0苦笑着释怀0
0苦笑着释怀0
5月前 · 7 人阅读

从上一篇的Computer Vision的历史与回顾,在进行图像识别的时候,Data作为最重要的驱动力,这一篇我们将介绍数据驱动下的两种图像分类的主流算法。

图像分类实质上就是“模式匹配”,早期我们进行图像分类,是利用两张图像的像素值的不同,进而计算图像上的每一块的像素值,通过不同的计算方式,对图像进行分类。

曼哈顿算法

这是一种非参数化方法,是一种NN分类器,即超参数k=1时的最近邻算法,具体的计算公式如下:

通过计算两张图像的距离,即图1的每一块像素值减去图2的每一块像素值,得到两张图像的距离,再将每一块像素值相加,也就是图像的相似性。如果两张图像相同,那么他们之间的距离就是零。

同样的,或者计算图像之间的欧拉距离,只是在计算公式上有所不同,识别效果大体相同。

还需要提一个关于Dataset的小知识,在我们看一些书或是一些论文中,通常X表示图像,Y表示标签(label),label也就是图像的分类,通过以上介绍的算法,计算每一个图像的距离,进而计算出最小的图像实例,得到最小的索引,完成图像分类。

K-NN(K Nearest Neighbor)K最近邻算法

K-NN分类器,具体点说,就是假设我们在训练集中选5张照片,即选取5张最相似的图像,然后对图像的label,也就是种类进行多数表决,进行分类。
K-NN的前身是NN分类器,显然,k等于5的时候,5-NN分类器要比NN分类器要更平滑一些。如图所示:

同样,我们可以选取10张图片,这时k的取值就是10,接着选取图像进行分类,对10张图片进行多数表决。当然,我们再对K取值时,不仅是5,10,还可以对不同的参数进行选择,100,200,2000......所以,K-NN分类器的核心就是对于K这个超参数(Hyperparameter)的取值问题。但在实际应用中,K-NN分类器在应用图片识别领域从未使用过。

Notes:

在进行图像分类的时候,不要过多的依赖训练数据,应适当应用测试数据,来增加训练模型的鲁棒性。有很多方法来增强训练模型的鲁棒性。其中的一种最有效的方法称为交叉验证(Cross Validation)。如图所示:

将train data 分成若干个fold,每次完成一个fold后,用测试数据验证一下训练模型,通过几次fold这样的循环之后,训练效果会大大增加。

线性分类器(Linear Classification)

线性分类器在我们进行图像分类时,是最重要也是最常用的分类器。就像我们童年时期搭建的乐高积木,每一层都是一个线性分类器,并且都是相互独立,共同构成了神经网络。

线性分类器实际上是一个巨大的矩阵相乘,这是一种参数化方法的实例,通过构造一个函数f(x,w),x是我们要分类的图像,w是一个参数,称之为权重,实际上这个f函数计算的就是加权和,后面会详细介绍。将已经确定的x和w放入f中,进行图像的分类。
举个例子,我们有十万张图片,10个图像类别。我们输入一张图片(32x32x2),通过f(x,w)函数计算,输出与10个类别相对应的数值,若对应某个类别的图片,正权值越大,就越属于这个类别中。

在f(x,w)函数中,x是由不能改变的像素值构成的n维列向量,在本例子中是3072维列向量,再多说一点,x的处理方式有很多种,可以是一个接一个堆叠起来的红绿蓝三通道,也可以是一个接一个堆叠起来的二通道的灰度图像,最终都是按照你自己想要的序列方法,将像素点拆成一列。
w称之为权重,是可以不断调整,可以改变的,w是一个mxn的矩阵,m行是m个图像分类,n列是n个像素点,在本例中w是3072x10的矩阵,有30720个数值。图片上的每一个像素点都有权重,如果权重为零,则w不会关注那部分图片,对于计算不会产生任何影响,如果权重不为零,那么就要考虑那部分图片,对计算会产生影响。

在f(x,w)的基础上,再加上一个参数b,参数b同样是可以不断调整,可以改变的,称之为偏置,是一个独立的权重函数。b是一个m维的列向量。
对于w,b这些参数都是我们可以控制的部分,通过不断调整得到最佳的数值。
再给大家举个简单例子:

就上面的图片而言,我们输入一个“猫”的图片,分别给出w,是一个3x4的矩阵,w每一行代表着一个种类,3行代表着cat,dog,ship;x是4维的列向量,每一行都是像素值;b的每一行代表着每个种类的偏置值。用w的第一行与b的第一个偏置值计算出第一个分类也就是“猫”的数值为-96.8。在分类的过程中,相当于有3个分类器进行并行计算,每一行就是一个分类器,不同分类器之间是相互独立的。这个例子中的分类器设计得并不是很好,我们可以设计更多的种类,调整参数,得到更好的效果。

Notes:

(1)通常我们训练的图片是大小不一的,我们会处理成相同大小的图片,而且是方形的,并对不同大小的图片进行压缩。效果还是很nice的。

(2)对于线性分类器的整个运行过程,得到的输出y = wx+b,就像是在二维空间中的一条线,如图:

w和b的作用可以由上图形象的表达出来,比如说我们在识别车的时候,那么在识别的过程中,会一直沿着图中红线的箭头方向延伸。

在实际应用中,我们常用的线性分类器是softmax,将逻辑回归计算成概率,让识别结果的数值相加为1。同时为了使分类器效果更好,我们利用one-hot encoding这种数学方法,哪个越接近1,正确的类别为1,其他的类别为0.看图理解更深刻:

图像分类器就介绍到这里,下一篇将介绍loss function,loss function用来定量的测定分类器工作的好坏以及最小化损失的w,更多精彩内容请大家持续关注我们Computer Vision系列文章!

收藏 0
关键词: 分类器 图像 nn 分类 图片 像素
评论