计算机视觉综述
计算机视觉起源与MIT本科生的“”暑期视觉项目”
大卫马尔(David Marr)是计算机视觉先驱,被称为计算机视觉之父
马尔奖是ICCV颁发的计算机视觉领域最重要的奖项之一
深度学习三要素:数据、算法、算力
图像分类
图像分类任务是计算机视觉中的核心任务,其目标是根据图像信息中所反映的不同特征,把不同类别的图像区分开来。
分类的难点
语义鸿沟
视角
光照
尺度
遮挡
形变
背景杂波
类内形变
运动模糊
类别繁多
基于规则的分类方法很困难(这里指的是传统的方法)
数据驱动的图像分类
- 数据集构建
- 分类器设计与学习
- 分类器决策
对于图像表示的方法有:
- 像素表示;
- 全局特征表示(如GIST)
- 局部特征表示(如SIFT特征+词袋模型)
分类器:
- 近邻分类器
- 贝叶斯分类器
- 线性分类器
- 支持向量机分类器
- 神经网络分类器
- 随机森林
损失函数:
- 0-1损失
- 多类支持向量损失
- 交叉熵损失
- 等等
优化方法:
一阶优化方法:
- 梯度下降
- 随机梯度下降方法
- 小批量随机梯度下降方法
二阶优化方法:
- 牛顿法
- BFGS
- L-BFGS
训练过程:
- 数据集划分
- 数据预处理
- 数据增强
- 欠拟合与过拟合
– 减小算法复杂度
– 使用权重正则项
– 使用dropout正则化 - 超参数调整
- 模型集成
数据集介绍
CIFAR10数据集:
包含50000张训练样本、10000张测试样本分为飞机、汽车、鸟、猫、鹿、狗、蛙、马、船、卡车十个类别图像为彩色图像,其大小为32*32
图像表示:灰度图,彩色图,二进制图
大多数分类算法要求输入向量,所以需要将矩阵图变为列向量。
CIFAR10数据集的图片的变为向量为:32323=3072维。
线性分类器
线性分类器是一种线性映射,将输入的图像特征映射为类别分数
至此介绍了线性分类器的几个方面:
- 线性分类器的定义
- 线性分类器的决策
- 线性分类器的矩阵表示
- 线性分类器的权值向量
- 线性分类器的决策边界
损失函数
损失函数搭建了模型性能与模型参数之间的桥梁,指导模型参数优化。
- 损失函数是一个函数,用于度量给定分类器的预测值与真实值的不一致程度,其输出通常是一个非负实值。
- 其输出的非负实值可以作为反馈信号来对分类器参数进行调整,以降低当前示例对应的损失值,提升分类器的分类效果。
多类支持向量机损失
真实类别的预测分数依然是预测的结果。
第一问: 最大是无穷,最小值为0
第二问:w与b接近0,则L会是类别数减1
第三问:变大,大了1;
第四问:变大了n倍
第五问:变很大
正则项与超参数
优化
参数优化是机器学习的核心步骤之一,它利用损失函数的输出值作为反馈信号来调整分类器参数,以提升分类器对训练样本的预测性能。
梯度下降法
计算梯度的方法
看到这里才突然想明白很多问题
如果数据很少,那么可能验证集包含的样本就太少,从而无法在统计上代表数据。
可以采用K折交叉验证。
数据预处理
svm的演示视频:
http://vision.stanford.edu/teaching/cs231n-demos/linear-classify/
全连接神经网络
线性分类器中的 可看作模板,模板个数由类别个数决定;
全连接神经网络中:
也可看作模板;模板个数人为指定。 融合这多个模版的匹配结果来实现最终类别打分
N层全连接神经网络——除输入层之外其他层的数量为N的网络
总结
全连接神经网络组成:一个输入层、一个输出层及多个隐层;
- 输入层与输出层的神经元个数由任务决定,而隐层数量以及每个隐层的神经元个数需要人为指定;
- 激活函数是全连接神经网络中的一个重要部分,缺少了激活函数,全连接神经网络将退化为线性分类器。
SOFTMAX与交叉熵
softmax函数的定义:
这里的0.92是-log(0.21)得到的
计算图
计算图是一种有向图,它用来表达输入、输出以及中间变量之间的计算关系,图中的每个节点对应着一种数学运算。
任意复杂的函数,都可以用计算图的形式表示
- 在整个计算图中,每个门单元都会得到一些输入,然后,进行下面两个计算:
a) 这个门的输出值
b) 其输出值关于输入值的局部梯度。 - 利用链式法则,门单元应该将回传的梯度乘以它对其的输入的局部梯度,从
而得到整个网络的输出对该门单元的每个输入值的梯度。
再看激活函数
梯度消失是神经网络训练中非常致命的一个问题,其本质是由于链式法则的乘法特性导致的。
对于Relu函数来说,当输入大于0时,局部梯度永远不会为0,比较有利于梯度流的传递。
Leakly ReLU激活函数,基本没有“死区”, 也就是梯度永远不会为0。之所以说“基本”,是因为函数在0处没有导数。
对于sigmoid函数,当输入值大于10或者小于-10时局部梯度都是0;非常不利于网络的梯度流传递的。
梯度爆炸
梯度算法改进
梯度算法改进
- 梯度下降算法存在的问题
- 动量法
- 自适应梯度与RMSProp
- ADAM
梯度下降法存在的问题
损失函数特性:一个方向上变化迅速而在另一个方向上变化缓慢
梯度算法改进----动量法
梯度算法改进----自适应梯度法
梯度算法改进----adam
权值初始化
全零初始化:网络中不同的神经元有相同的输出,进行同样的参数更新;因此,这些神经元学到的参数都一样,等价于一个神经元。所以采用随机初始化,避免全零初始化!
随机初始化:权值采样自 ž(0,0.01) 的高斯分布
除了前两层,后续所有层的激活值为0;此时,输入信息传递不到输出层;最终,网络得不到训练。
随机初始化:权值采样自 (0,1) 的高斯分布
几乎所有的神经元都饱和了(不是-1就是1);此时,神经元局部梯度都是零,网络没有反向梯度流;最终,所有的参数得不到更新
好的初始化方法可以防止前向传播过程中的信息消失,也可以解决反向传递过程中的梯度消失。
- 激活函数选择双曲正切或者Sigmoid时,建议使用Xaizer初始化方法;
- 激活函数选择ReLU或Leakly ReLU时,推荐使用He初始化方法。
Xaizer初始化:权值采样自 (0,1/N) 的高斯分布,žN为输入神经元个数
He初始化: 权值采样自 (0,2/N) 的高斯分布,žN为输入神经元个数
批归一化
批归一化主要解决信号消失的问题。
过拟合与欠拟合
定义:出现过拟合,得到的模型在训练集上的准确率很高,但在真实的场景中识别率确很低。
欠拟合:模型描述能力太弱,以至于不能很好地学习到数据中的规律。产生欠拟合的原因通常是模型过于简单。
应对过拟合的方法:
神经网络中的超参数
超参数:
- 网络结构——隐层神经元个数,网络层数,非线性单元选择等
- 优化相关——学习率、dropout比率、正则项强度等
卷积神经网络
全连接神经网络的瓶颈
卷积核:
➢ 不仅具有宽和高, 还具有深度,常写成如下形式:
宽度 x 高度 x 深度
➢ 卷积核参数不仅包括核中存储的权值,还包括一个偏置值
特征响应图与卷积内核保持一致
卷积步长
边界填充
卷积神经网络中最常用的填充方式是零值填充。
池化操作
**池化的作用:**对每一个特征响应图独立进行, 降低特征响应图组中每个特征响应图的宽度和高度,减少后续卷积层的参数的数量, 降低计算资源耗费,进而控制过拟合。
**池化操作:**对特征响应图某个区域进行池化就是在该区域上指定一个值来代表整个区域。
常见的池化操作:
- 最大池化——使用区域内的最大值来代表这个区域;
- 平均池化——采用区域内所有值的均值作为代表。
池化层的超参数: 池化窗口和池化步长
损失函数&优化算法
损失函数:交叉熵损失
优化算法: SGD、带动量的SGD以及ADAM
图像增强
样本增强——翻转
样本增强——随机缩放&抠图
样本增强——色彩抖动
样本增强——其他方案(
➢ 平移
➢ 旋转
➢ 拉伸
➢ 径向畸变(相关描述见摄像机几何章节)
➢ 裁剪)
经典网络
➢ AlexNet
➢ ZFNet
➢ VGG
➢ GoogleNet
➢ ResNet
Imagenet
ImageNet Large Scale Visual Recognition Challenge (ILSVRC)
➢ 计算机视觉领域最具权威的学术竞赛之一
➢ ImageNet数据集——由斯坦福大学李飞飞教授主导制作,其包含了超过1400万张全尺寸的有标记图片。
ILSVRC从ImageNet数据集中抽出子集作为竞赛
AlexNet
AlexNet——2012年ImageNet大规模视觉识别挑战赛冠军,精度提升超过10个百分点!
该网络的贡献
ZFNet
VGG
感受野(Receptive Field)的定义是卷积神经网络每一层输出的特征图(feature map)上的像素点在输入图片上映射的区域大小
这里的第一个C是通道数(特征图数),第二个是输出通道数
GoogLeNet
串联结构(如VGG)存在的问题——后面的卷积层只能处理前层输出的特征图;前层因某些原因(比如感受野限制)丢失重要信息,后层无法找回。
解决方案——每一层尽量多的保留输入信号中的信息。
Inception V1里面的参数的计算方法:1*1*256*96+1*1*256*16+1*1*256*64+3*3*96*128+5*5*16*32=168448
ResNet
这个网络首创残差网络这个NB的东西,标志着终结了ImageNet这个训练集。
视觉识别
语义分割
给每个像素分配类别标签不区分实例, 只考虑像素类别
滑动窗口方法
分类与定位
R-CNN
Fast R-CNN
faster-rcnn