cs231n-lecture2&3

CS231N–图像分类管道

一、cs231n课程指引

二、图像分类–CV核心问题

  • 分类识别,种类太多,{狗,猫,飞机……}
  • 数据量太庞大,1080p = 1920 * 1080 * 3 *(255,8bit)
  • 挑战:观测点变化;光照&明暗;变形和姿势;隐藏&遮挡;背景&分辨;种类种族。
    这里写图片描述
  • 图像分类器,没有图示的分类器能够解决这个问题。
  • 特征提取,通过提取猫耳朵的形状特征来分类
  • 数据驱动方法:(1)收集数据和标签;(2)使用ML训练分类器;(3)在新图像上进行测试评估性能
    这里写图片描述

这里写图片描述

三、分类器1:最近邻算法–KNN

  • 1.算法的流程:train function 用来记录所有数据及标签;predict寻找最相似训练图片的标签
  • 2.数据集:采用CIFAR10,10类问题,50000张带标签训练图片,10000张带标签测试图片
  • 3.使用距离度量来衡量图片相似度
    • 曼哈特距离,L1范数

d 1 ( I 1 , I 2 ) = p | I 1 p I 2 p |

  • 欧式距离,L2范数

d 2 ( I 1 , I 2 ) = p ( I 1 p I 2 p ) 2

- L1与L2的比较:http://vision.stanford.edu/teaching/cs231n-demos/knn/    
  • 4.存在的问题1,训练时间O(1),预测时间O(n)。训练数据集越大,预测时间越长。
  • 5.存在的问题2:容易出现过拟合情况,如下图:
    这里写图片描述
  • 6.优化的NN算法–KNN:预测时选择距离最近的K个标签,选择出现最多的标签。在作业中使用np.bicount快速查找。
    这里写图片描述
  • 7.hyperparameters 超参数调试

    (1). 遍历k值和距离度量——选择合适的超参数

    (2). 合理划分数据集进行超参数调试:交叉验证,将数据集划分N段,选择一段作为验证,其他作为训练集,取多段均值及均方根,寻找最合适参数

    可能的想法:
    这里写图片描述

    交叉验证法:
    这里写图片描述

  • 8.KNN的缺陷:

    • 测试速度太慢,尤其是训练集比较大的时候
    • 像素距离度量不是有益的:加BOX;平移;改变色彩还能保持距离一样
    • 维数灾难,多维距离受多参数影响,距离结果易混淆,准确率下降。

KNN总结:

  • 图像分类使用带标签的训练集开始,在测试集中预测可能的标签
  • KNN算法预测标签依赖最近的K个训练样本
  • K值和距离度量方法属于超参数-hyperparameters
  • 使用交叉验证分段式来调试超参数,测试集只用来最后的评估
  • KNN的使用需要选择合适的环境,限制较大

四、分类器2:线性分类器

  • 1.神经网络就像搭积木,线性分类器就是积木的每一层

  • 2.图像的内容识别及描述使用的结构是CNN+RNN,如下图:
    这里写图片描述

  • 3.线性分类器通过对图像与标签进行映射 f ( x , W ) = W x + b ,通过训练使得参数逼近真实模型,如下图讲解
    这里写图片描述

    实际上对于N张图片,C类分类,矩阵的维数为 W [ C × M ] x [ M × N ] b [ C × 1 ] f [ C × N ] , 作业中矩阵乘法的顺序为x*W

  • 4.线性分类器的最终训练参数W,显示为图片格式如下,隐约可以看出图像的轮廓,个人理解:滤波作用:
    这里写图片描述

  • 5.线性分类器相当于在M唯空间中使用超平面来分割不同的类

  • 6.当出现以下情况时,线性分类器将降低效果:类处于相同空间;类所有空间都存在,不具备线性。
    这里写图片描述

  • 7.线性分类器 f ( x , W ) = W x + b 的工作原理:

    (1)相当于在每一个图像的每一个类都给了一个得分系统,计算出对应的值,但是值得准确率与实际可能存在偏差,衡量不准确

    (2)根据平分系统计算损失函数,通过损失函数下降的梯度计算参数的偏导,更新W和b参数

    (3)重复计算更新,不断降低损失函数,逼近最佳模型,使用最佳模型进行计算,提高准确率

  • 8.损失函数模型:

    (1)对于N张图片的数据集: { ( x i , y i ) } i = 1 N ,其中 x i 是第i个图像, y i 是对应的第i个标签。

    (2)损失函数应该是每一张图片的损失函数之和,可以用下面的公式来表示:

    L = 1 N L i ( f ( x i , W ) , y i )

五、损失函数–Loss Function– SVM

  • 1.在得到socre之后,可以使用多分类线性SVM

    (1)对于 x i y i ,令 s = f ( x i , W ) ,那么SVM可以表示为:

    L i = j y i { 0 i f s y i s j + 1 s j s y i o t h e r w i s e = j y max ( 0 , s j s y i + 1 )

    其中 s y i 代表的是第i张图像正确标签分类所在的scores对应的列, y i 对应的值在scores列中对应的C类相同

    s y i s j + 1 的含义是正确的分类要比错误分类的score大1,该项贡献的损失函数为0;反之损失函数正值

    (2)详细的一列的计算过程如下,在作业中使用循环和向量化(vectorization)两种,计算方法很巧妙,这里使用循环的理解方式:
    这里写图片描述

    对于将猫和青蛙分类错误的情况下,得分较低的损失函数较大;在车的分类中,得分越高的损失函数值较小;而对于一种最理想的情况,正确分类为1,而其他的分类为0,那么损失函数将为0

    (3)而最后的损失函数由以下公式得到:

L = 1 N i = 1 N L i

Q1:而对于car分类的值如果有微小改变,在正确的值始终比错误的值大1的情况,损失函数不变;但当差值小于1的时候,损失函数值增大。因此微小改变一般不会对损失函数值产生影响。   
Q2:最小的损失函数值为0,最大的损失函数值为无穷大    
Q3:当W初始值很小,所有的s都近似为0的时候,损失函数的值最终为1    
Q4:当算上正确分类的一行时,那么最终的损失函数趋近1,对于整个训练过程没有影响。
Q5:使用平均和使用和没有太大区别,只是比例不同    
Q6: 如果使用以下军方函数,不会对结果产生太大的影响。

L i = j y max ( 0 , s j s y i + 1 ) 2

  • 2.正则化(regularization)——防止过拟合,引入W的作用

    (1)正则化的概念:在特征参数维度较大、训练样本较少情况下,会导致模型过拟合。一方面可以通过丢掉某些参数(dropout等);另一方法需要加入正则项对特征参数进行惩罚,降低特征参数的影响,通常如下:

    L = 1 N L i ( f ( x i , W ) , y i ) + λ R ( W )

    其中公式中 λ 为平衡两者之间的影响,但通常值较大,数量级在 10 4 以上。

    正则化详细地讲解参照网页:https://www.cnblogs.com/jianxinzhou/p/4083921.html

    (2)欧卡姆剃刀:“Among competing hypotheses,the simplest is the best”     William of Ockham, 1285 - 1347

    (3)正则化的方法(直接贴图):
    这里写图片描述

    (4)L2正则化(权重衰减):对于使得损失函数相同的特征参数矩阵,优选特征参数矩阵均匀的,[0.25, 0.25, 0.25, 0.25]优于[1, 0, 0, 0]

    (5)L1正则化(稀疏特性):具体还未讲到。

损失函数–Loss Function– Softmax(Multinomial Logistic Regression)

  • 1.函数公式很简单,参照以下公式:
    这里写图片描述
    EXP和normalize的作用将score归一化到[0,1]之间。

  • 2.计算方式:
    这里写图片描述

损失函数总结

  • 1.Softmax对于scores值变化较为敏感,而SVM对于Scores值微小变化不敏感,意味着SVM具有较大鲁棒性,Softmax具有较强灵敏性。

  • 2.通过数据集和标签(x,y)——>乘以特征参数W和偏置b,计算scores——>通过损失函数计算Loss

  • 3.如何优化参数,最佳的W—->Optimization

六、最优化-Optimization

1.最优化问题就像在一个山谷中寻找最低点

  • 不理智的策略:采用随机的方式去寻找最佳W矩阵,能够寻找到合适的点,但是准确率不高

2.跟随斜率/梯度

  • 数值计算斜率的方法如下:

    d f ( x ) d x = lim h 0 f ( x + h ) f ( x ) h

    (1)多维的情况下,梯度等同于偏导数,独立对每一维度进行计算
    (2)但是对于一个损失函数和W,步长是不确定,同时对于上面的损失函数,是一个W的函数
    (3)对于求梯度,可以转换为使用微积分(calculus)求取解析解,(反向传播),再使用学习率进行更新

    W n e x t = W c u r r e n t α d W

    (4)数值法优缺点:估算;速度慢;易于coding
    (5)解析法优缺点:准确;速度快;易出错(特别是在某些函数不可导点)

  • 梯度检验:

    (1)如何证明更新后的参数是正确的,可以使用数值解的逼近计算方式来验证求取的梯度是否正确

3.梯度下降法–随机梯度下降法(SGD-stochastic)

  • 当数据集比较大的时候,计算代价非常大(占用内存);计算会非常慢(图像越多,需要优化的参数成倍增长)

  • 使用mini-batch进行训练,通常一组为32/64/128,大小与内存大小成比例,使用这种方法损失函数会在波动中下降。

  • 学习率不同优化速度不同:太高跨度大无法收敛;太小收敛速度慢;较高无法收敛到最佳点,会找到局部最优;合适的值才能有快又好。

  • 其他的梯度下降法还有:Momentum(冲量法)、NAG(牛顿法)、Adagrad、Adadelta、RMSprop等

图像特征提取

1.特征提取

这里写图片描述

  • 特征提取作为某些统计特征来进行分类

2.推动力

这里写图片描述

  • 特征提取的推动力在于将以前不能区分的类别,通过函数映射变化成为直观可区分的类

3.实例

(1)Color Histogram:通过提取不同颜色通道的值作为特征
(2)Histogram of Oriented Gradients (HoG):通过提取图像的不同旋转方向的梯度统计直方图来作为特征
(3)Bag of Words:通过提取某些分类的特征作为编码,比如猫的耳朵、青蛙的脚;再通过这些特征作为解码去恢复图片

5.特征提取VS神经网络

这里写图片描述

  • 2012年前图片分类广泛采用特征提取+线性分类(特别是SVM),在特定领域方向具有价值,具有专用性,但缺乏通用性与广泛性。

  • 2012年后imagenet的Alexnet网络已极高的准确率打败传统方法后,随着算力和数据爆炸式增长而崛起。

猜你喜欢

转载自blog.csdn.net/sun1398/article/details/80861490