计算机视觉历史回顾和介绍
现代互联网85%都是图片,如何处理?计算机视觉十分必要。
哈佛大学放图片对猫的脑部视觉区脉冲检测,50%都在处理眼睛的信息,发现切换图片的时候才有感觉,所以视觉的前期是对图片边缘和形状的识别。
Block world论文,一个东西不同角度,边缘决定形状和结构,可以通过边缘和形状来识别东西。
1966年MIT建立了第一个AI实验室,在那个夏天研究了计算机视觉。
David Marr提出视觉是分层的。
- 从简单的形状开始处理
- 建立一个分层的模型,第一层应该是边缘
早期的计算机视觉,70年代,其一认为物体都是由基本的形状构成的,比如说圆柱形,其二,由基本的组件构成,比如说鼻子等,可以容许形变。3D建模。
80年代处理彩色图像,以及图像分割,或者说normalized cut,和感知分组。实时人脸检测和特征。
从70到80,从3D建模到识别,从计算机视觉到人工智能。
数据驱动的图像分类方式:K近邻和线性分类器
难度:比如说猫图片的分类,形状不一、种类不同、有遮盖、光线不好的图片都能够分类出来
K近邻
数据集:CIFAR-10,其中有50000张训练图片和10000张测试图片,10中标签,图片大小为32*32*3
方法:对于一张图片,和训练图片依次比较,找到距离最近的一张图片,该图片的标签就是我们需要分类的图片的标签。对于k>1的情况,在训练集中找到前k个距离最近的图片,然后投票表决。
距离定义:
- L1距离(manhattan distance)
图片大小相同,对应元素依次相减取绝对值,得到一个相同大小的矩阵,将该矩阵的元素求和最后得到的值就是这两张图的L1距离。
2. L2距离(Euclidean distance)
问题:
- 因为每个图片的分类都要依次和训练集比较,因此算法复杂度随着训练集规模的扩大成线性增长
- 效果不好,实际中很少使用,比如说对于同一张图片,要是有一点偏移或者色调发生了变化,距离就会变化很大
主要超参数:
1. k,和几个图片进行比较
2. distance,使用L1距离还似乎L2距离
可以看到随着k的增加,对异常点的处理越好,可以增加模型的泛化能力。
如果数据量比较小,可以通过交叉验证来得到模型分类能力的评估。5折交叉验证,把数据集分成5份,依次挑选其中的1份作为验证集,剩下的作为训练集,最后在验证集上分别得到5个分数,取平均就是该参数下模型的分数。
优点和缺点:
- 算法简单易于实现
- 训练不需要时间,但是预测耗时长,对实际使用不利
- 在图像分类问题上效果不好,肉眼不可见的平移颜色等,都会导致距离变得很大
线性分类器
总览:一个分类模型由两个函数和一个方法组成,第一是通过输入数据得到各个分类的得分,第二是通过模型预测和实际值得到损失,方法是通过调整第一个函数的权值来减少第二个函数输出的损失。
参数方法和非参数方法
- 参数方法,比如说线性分类器,通过学习训练集,来改变模型的参数w和
b - 非参数方法,比如说k近邻,没有需要学习的参数
Score Function
首先定义线性分类器的第一个函数,通过输入数据来得到分类的得分。
其中 xi 是(D,1)的向量,代表输入数据的一个样本,D是特征数,W是(K,D)的矩阵,代表权重其中K是分类数,b是偏置向量,输出y是一个(K,1)的向量,代表该样本在各个类上的得分。
对三个通道的颜色值进行加权求和,再加上偏置,返回一个向量,每个值表示各个标签的得分。
可以把一张图片中的3072(三通道乘上每个像素点)看成是3072维的数据,拟合了3条“直线”,对3个标签计算得分。
每一行的W都是一个分类器。