李飞飞计算机视觉-自用笔记(一)
1 课程介绍-计算机视觉概述1.1 课程介绍-历史背景 2 图像分类2.1 数据-驱动方法(机器学习)2.2 K最近邻算法2.3 线性分类I 3 损失函数和优化介绍3.1 线性分类II1 课程介绍-计算机视觉概述
互联网上传播的数据绝大多数是视觉数据
1.1 课程介绍-历史背景
计算机视觉简史
David Marr:
1.输入图像
2.原始草图:用其他元素表示边缘、端点、虚拟线条、曲线、边界
3.2.5D草图:将表面、深度信息、视觉场景等不连续的拼凑在一起
4.3D模型的形成
========================================================================
.9.2补充
知识包含关系:
发展历程:
========================================================================
图像识别->图像分割->人脸检测->特征检测->目标识别
ImageNet大规模视觉识别竞赛
卷积神经网络脱颖而出
上述技术高速发展的原因
1.计算能力(硬件的发展)
2.数据量与日俱增
基础知识:
Python、C/C++、高等数学、线性代数、计算机图像、机器学习
2 图像分类
图像分类中算法应考虑的因素:相机的位置、光照强度、物体的形变、遮挡情况、背景混乱、类内差异
2.1 数据-驱动方法(机器学习)
收集图像和标签的数据集使用机器学习训练分类器用新图像评估分类器========================================================================
.9.3更新
常用数据集:MNIST(10类手写数字);CIFAR10(10类);ImageNet(1000类)
========================================================================
2.2 K最近邻算法
首先学习最近邻算法的思想:
比较两幅图像的方法:L1表示曼哈顿距离
用测试集数据减去训练集数据,得到所有点的像素再进行加和,该结果作为衡量图像间差异大小的指标。
K近邻算法:不只是寻找距离最近(差异最小)的点,而是根据一些特殊操作,根据距离度量找到最近的K个点,然后进行多数投票,将票数最多的K个近邻点预测出结果
KNN:L2表示欧氏距离作为度量指标
L1和L2的区别:
超参数(K的选择):
注:训练集、验证集、测试集
========================================================================
.9.3更新
交叉验证法:
========================================================================
图像领域极少使用KNN的原因:
速度极慢欧氏距离不适合度量视觉差异维度灾难
========================================================================
.9.3更新
NearestNeighbor:
import numpy as npclass NearestNeighbor:def __init(self):passdef train(self, X, y)# X is N x D where each row is an examle. Y is 1-d of size Nself.Xtr = Xself.ytr = ydef predict(self, X):# X is N x D where each row is an example we wish to predict laber fornum_test = X.shape[0]# lets make sure that the output type matches the input typeYpred = np.zeros(num_test, dtype = self.ytr.dtype)# loop over all test rowsfor i in xrange(num_test)# find the nearest training image to the i'th test image# using the L1distance(sum of absolute value defferences)distances = np.sum(np.abs(self.Xtr - X[i,:]), axis = 1)min_index = np.argmin(distances) # get the index whth smallest distaceYpred[i] = self.ytr[min_index] # predict the label of the nearest exaplereturn Ypred
========================================================================
2.3 线性分类I
x:输入数据
W:权重
b:偏置项
例子:
缺点:线性分类器的每个类别只能学习一个模板,如果这个类别出现了某种类型的变体,它将尝试求取所有不同的变体,在使用一个单独模板的情况下试图识别其中每一个类别
线性分类无法解决的问题如下
3 损失函数和优化介绍
========================================================================
.9.4
e.g.多元SVM损失:
========================================================================
3.1 线性分类II
用损失函数(loss function)衡量任意一个W的好坏,即当前分类器是否有效
注:损失函数和代价函数的区别
损失函数(Loss function)是定义在单个训练样本上的,也就是只计算一个样本的误差,比如我们想要分类,就是预测的类别和实际类别的区别,用L表示。代价函数(Cost function)是定义在整个训练集上面的,也就是所有样本的误差的总和的平均,也就是损失函数的总和的平均,有没有这个平均其实不会影响最后的参数的求解结果。
过拟合问题:正则化(可见吴恩达机器学习第二周)
多项逻辑斯蒂回归损失函数(softmax loss)
优化:
梯度下降法
数值梯度:相似值,计算缓慢,容易书写,可作为debug工具
解析梯度:精确,快速,容易出错
所以在实践中经常使用解析梯度,并用数值梯度来保证解析梯度是正确的,此方法成为梯度检查
梯度下降
while True:weights_grad = evaluate_tradient(loss_fun, data, weights)weightw += -step_size * weights_grad
step_size:α(学习率)
随机梯度下降
while True:data_batch = sample_training_data(data, 256)weights_grad = evaluate_gradient(loss_fun, data_batch, weigths)weights += -step_size * weights_grad
常规步骤:
拿到图像后计算图像特征将不同的特征向量合到一起,得到图像的特征表述将特征表述输入线性分类器
常用特征表示方法:方向梯度直方图颜色直方图bag of words:建立字典;对图像进行编码;聚合成簇
如果觉得《李飞飞计算机视觉-自用笔记(第一周)》对你有帮助,请点赞、收藏,并留下你的观点哦!