[深度学习基础] 斯坦福CS231n李飞飞计算机视觉Lecture 2笔记

Lecture 2: Image Classification pipeline

分类图片的多变性

目前的感知分类问题最重要的就是标签与图像,通常图像都是由庞大的数字列表组成,例如一张800x600x3的图片(其中3是指颜色的三个通道,一般医学图像为单独的1个灰度通道),数值在0-255之间:
在这里插入图片描述
而且在现实情况下,相机在拍照过程中也会对物体进行旋转,平移,缩放,增加亮度等操作;不止如此,一些同一类别物体也会有不同的造型,姿势,或者部分被遮挡,我们在进行分类过程中要对这些问题具有很好的鲁棒性:
在这里插入图片描述

图片分类器的原型

图像分类器是什么样子的呢,我们要构建一个三维空间,定义一个函数,使用算法将猫的图片输进去,得到猫的标签。但是,普通的算法很难达到,通常我们想到的是构建猫的轮廓,或者某一部分的特点:
在这里插入图片描述
但是当给你一个其他的类别,再进行轮廓识别然后再寻找特点会使情况变得过于复杂,这时,机器学习体现了它的能力,我们可以通过训练数据训练一个分类模型,当你把一个新的测试数据带入模型中时,可以得到测试数据最接近的类别:
在这里插入图片描述
这里举一个例子:记住所有训练数据与标签,然后当测试数据预测时,计算预测数据与每一张训练数据的每一个像素的差值,然后求和,得到的数值就是两张图片的L1距离(曼哈顿距离),然后得到的那个距离最小的差值,就将测试数据分入那个类别之中,这就是一个简单的近邻算法分类器:
在这里插入图片描述
但是,根据刚才的例子,可以看出测试时候的速度是非常缓慢的,如何能够提高测试速度呢(这里可以使训练速度相对的慢一些)?

K近邻分类器

什么是K近邻分类器呢?上面例子是将测试数据归类为最邻近训练数据的标签,为什么只用最相似的1张图片的标签来作为测试图像的标签呢?这不是很奇怪吗!是的,使用K近邻分类器就能做得更好。它的思想很简单:与其只找最相近的那1个图片的标签,我们找最相似的k个图片的标签,然后让他们针对测试图片进行投票,最后把票数最高的标签作为对测试图片的预测。所以当k=1的时候,K近邻分类器就是近邻分类器。
在这里插入图片描述
上图可以看出每个训练数据的图片区域分类情况,其中k=1时找到两个不同分类的中点来分类区域;当k增大时,分类区域由临近的k张训练数据共同决定,从直观感受上就可以看到,更高的k值可以让分类的效果更平滑,使得分类器对于异常值更有抵抗力。其中白色区域为最邻近的几个区域投票数相同,无法准确分类的区域。

K近邻分类器在线测试例子:http://vision.stanford.edu/teaching/cs231n-demos/knn/

除去k值,还有在近邻选择中使用L2距离(欧式距离)进行分类:
在这里插入图片描述
k与L1、L2距离选择这两个参数就决定了分类器的泛化能力,那么如何对这两个超参数进行选择呢?需要从我们的数据入手,首先将数据分为训练数据与测试数据:
在这里插入图片描述
当整个训练数据被我们用来训练并且k = 1时,整个训练数据的准确率都是100%的,这样没办法看出我们算法的表现能力,所以我们要将训练数据分为训练数据与验证数据,并且只训练训练数据,在验证数据上进行验证,以了解我们训练数据的算法泛化能力:
在这里插入图片描述
再进一步,我们可以将训练数据分为x份,使每一份数据都做一次验证数据,这样我们就得到了x个准确率,取其中的平均值,就得到了当k取任意值时的准确率如何,这样再选择准确率最高时的k值,就得到了一个表现最为良好的算法:
在这里插入图片描述
所得到的准确率随k的选择变化折线图如下图所示,可以看到当k取7时准确率达到最高,所以这个模型的话,取k=7可以达到效果最好的分类结果:
在这里插入图片描述
虽然K近邻算法在理论上可行性很高,但是实际问题中一般不会被使用,一是因为它计算的像素之间的差值会因为物体在图像内的平移,遮盖,变色而产生很大的差别,即使还是原来的物体;另一个原因是它的计算复杂度非常之高,当检测的维度升高以后参数的个数呈指数上涨;最后一个也是最重要的原因,通过这个方法进行分类时更多注意的是背景信息(背景信息在图片中一般比物体更多),并不是我们需要的语义信息。
在这里插入图片描述
在这里插入图片描述

线性分类器

线性分类器就是我们所认识的神经网络,要识别一个物体属于哪一种类别(假设10类),我们需要将输入图片(假设图片为32x32x3的数组,一共3072个数字)通过包含权重参数的线性变换,得到10种类别所得到的分数,让它在它的标签下的类别得到很高的分数,其他类别表现很低的分数,我们所要学习的就是这个线性变换的函数,或者准确说学习w的权重值,一般我们要在学习中加入一个偏置参数b,以让图片在分类时对它属于的标签有更大的偏置:
在这里插入图片描述
以下是一个具体例子:
在这里插入图片描述
上面的方法将原图的2x2个像素排列成一列,也可以直接使用矩阵相乘方法:
在这里插入图片描述
因为猫得到的分数不是很高,所以这并不是一个很好的分类器,需要重新设置w与b;下图是一个将设置权重可视化的图片,可以看出10个类别权重都有各自的特点,比如飞机的权重中蓝色通道分量高于其他分量,使得蓝色通道权重可以取得更高的分数,红色与绿色通道取得较低的分数,更容易找到在天空中的飞机:
在这里插入图片描述
从几何观点来看,下图中三条颜色的线分别表示在三类分类中分数为0的位置,但是当向各自的箭头方向延伸时,那么对应类别的分数也会越来越高:
在这里插入图片描述

评价分类分数

接下来是针对输出结果的评价指标,看到下图种使用10个分类权重分别对三张图片得到的结果:
在这里插入图片描述
可以看出,在三张图片上得到的效果都不是很好,这里需要引用损失函数Loss,来定量测量每一个权重矩阵在数据集上的分类结果好坏,并且根据Loss的大小来调整权重值,那么如何优化矩阵权值使得Loss能够达到最小呢?走进下一课!

资料来源:

  1. 斯坦福CS231n李飞飞计算机视觉视频课程:https://study.163.com/course/courseMain.htm?courseId=1003223001
  2. CS231n官方笔记授权翻译总集篇:https://zhuanlan.zhihu.com/p/21930884
  3. CS231n官方PPT:http://vision.stanford.edu/teaching/cs231n/syllabus.html
  • 2
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值