Image Classification pipeline
目录
Numpy
Numpy相当于Python中的Matlab
识别流程
二维数组(三个通道三个数)表示一个像素点的颜色信息
就是计算机看到图片是能够接收到的数据信息
但是拍摄角度,不同环境都会影响二维数组中的数据,因此计算机视觉对图像做出分类无法从像素矩阵中直接获取有效信息
图像识别虽然也可以看作定义的一个函数
但是其脱离传统函数算法的定义,并不能像排序搜索等方法给出显式的代码语句描述解决它
所以要把编写算法的任务交给机器,通过数据灌输的方法
学习流程做概括就是首先收同类型的图片,之后用这些图片中的一部分作为训练集去做训练,最后再用测试集中的图片去做测试
最近邻算法
算法介绍
不用去抽取特征来计算,在预测图片时只要去抽取附近的数据来判断,附近的数据属于什么类型,它就是什么类型,所以被称为惰性算法
CIFAR10数据集
包含了十个类别,用50000张图片做训练
其识别方法:在获取到测试集数据后,从训练集中找到最相似的图片,看在训练集里是什么标签,就判断图片的类别
那么是用什么方法来判断两张图片的相似性呢,就要引入L1和L2距离
L1距离(曼哈顿距离)
很容易看出来,对应位置的像素数据相减,最后加和,通过判断差的大小判断相似性
为什么叫曼哈顿距离?
把曼哈顿市的街道拟合成如上图,可以看到无论怎么走(当然是无法穿楼而过)
只要将两个位置的坐标之差加和就可以得到路径距离———L1距离
但是这种学习快但是识别慢的算法肯定不是我们想要的
计算结果
可以认为初始的画面点上只存在这些颜色点(被捕捉的颜色点)
而色块是在进行惰性算法之后计算机所认为的图像颜色分布
最中心的橙色点,实际上可以看出是噪点(错误点),这个橙色色块不是我们所想要的
而且边界不够平滑,有很多锐利的角
因此引入了K最近邻算法
K最近邻算法
判断某个点时,会让周围的K个点给他投票来判断其所在色块应该拥有的颜色
可以显著减少噪点,并且比较泛化,平滑
但是这个K又不是越大越好,又会造成一些离得很远点因为K大而被拟合进来参与投票
L2距离
如图,取两点直线距离就是L2距离
学习设置方式
探索出使用学习集+模拟集(验证集)+测试集的方式
做到学有反馈
交叉验证:在前四训练,第五个作为验证,最后测试,得到一个正确率
以此类推。。。五个正确率平均就能判断出大概的学习效果
实验验证,K=7时能够得到相对准确率高的学习效果
总结
基于相似图片来识别图片进行图片分类,需要定义超参数K,K利用上面的交叉拟合方法可以求出
在比较传统的搜索算法中,通过找到相似用户的喜爱来做为该用户做推荐也是K最近邻算法的一个变种,但是对于新用户无法进行相似搜索,所以软件最开始的用户自选择感兴趣内容就能正确的启动相似搜索算法
线性分类集
用一根直线去做分类(二维) 用平面线性分类(三维)
线形分类是神经网络算法的第一个步骤
算法核心
(二维)使用矩阵的乘法和一元函数来拟合最后图片的权重分数
假如读取到图片一共有四个数据,首先将他转化成列向量
橙色区域代表的是猫的权重分(斜率)和截距,在完成矩阵计算后,得到一个猫拟合后的分数(-96.8)
同样,利用紫色区块计算后得到以狗为模型拟合的数据(437.9),在进行很多分类的拟合后,找到最合适的权重和B,这就是训练的效果
之后拟合出各种类别的权重表,通过这个权重表可以看出不同类别中哪种颜色或特征出现的次数更多
计算出权重模型后
打分高者就被归于这一分类
弊端
很容易看出,像交叉区块,圆环形分布,多峰值分布,都无法说通过一个准确的直线来分割数据