图像分类是视觉领域的核心问题(基础问题)之一:已有一些有标签的多类图片数据集,输入图片给出分类标签。
训练模型最终的目的是得到一个泛化能力强,测试集准确率高的模型,而不是说训练时拟合效果最好,但验证集和测试集变差。
实际应用中我们需要是测试的时候快速高效,训练的时候慢一点无所谓。(CNN恰好满足这一点)
验证集是为了选出一个最好的算法模型,测试集是为检验模型的泛化能力。
数据驱动(已经有很多有标签的图片),机器对于图片有语义鸿沟。
线性分类:首先将图片拉伸成向量,损失函数就是像素的欧几里得范数。
损失函数的意义在于量化不同错误分类到底有多坏。
SVM对应折页损失函数(有一个安全边界)
softmax:得到score function值→exp(指数化处理)→归一化处理得到P→取负对数-log(P)对应分类的概率分布。(交叉熵?)
用解析法求梯度(导数)更新训练网络,用数值梯度(差分)去check网络正确与否。
无补0时,卷积后输出维度:(N-F)/stride +1 ;N:输入维度,F滤波器维度,stride滑动步长
补0:pad with p pixel(指的是像素各边界加p层0):之后输出层维度变为(2p+N-F)/stride +1
为何填充:填充后可保证输出图片的尺寸与输入一致,而且边角也可以卷积处理到,尽可能多的 保留信息。
输出层的深度等于滤波器的深度(层数)相关。
输入的图片如何作为输入变量与神经网络连接:输入图片不管是几通道的统统拉伸成一维向量(向量是一列),然后直接作为x.
关于参数数目计算:输入32*32*3,滤波器10, 5*5*3,则参数为(5*5*3+1)*10,1是偏置变量。
一般来说NN结构是卷积-Relu非线性激活层-卷积-Relu非线性激活层(重复n次)+一个pooling层,如此重复,最后加上数个全连接层。池化不能太多次,会失去一些信息。
训练模型时,真正的变量(参数)是权重(包括偏置),梯度下降法前向得到损失函数和预测值,反向得到梯度dL/dw.
图像分类架构(最实用):Alexnet(配合模型集成),googlenet。(resnet-残差网络:错误率最低。,但是计算等要求高)
定位:在分类的基础上画出包括目标的框。(加一个输出(x,y,w,h))。定位较好的实现方法有 faster-Rcnn, yolo, SSD.
leaky ReLU: f(x)=max(0.01x , x ) 优点:无饱和(梯度消失区),计算高效(线性),收敛快,无死区(梯度消失导致某些神经元无法继续训练参数)
P-ReLU(parametric ...): f(x)=max(x , x ),作为训练参数。
ELU:f(x)=x,if x>0 ; f(x)= (-1).
激活函数以0为中心优点:输出均值为0,有类似归一化的效果。
激活函数的选择:
优先ReLU(要注意调学习率)
其次 leaky ReLU / ELU. (Rectified linear unit 矫正线性单元,Exponential linear unit指数线性单元)
对tanh不要期待太好
不用sigmoid。
Alexnet:krizhevsky,2012 ※※※※
googlenet: szegedy,2014 ※※※※
resnet: identity mapping in deep residual networks ,He,2016 ※※※
Xavier initialization,Glort,2010
VGG16:simonyan and zisserman,2014
mask -RCNN:图像分割,物体识别,姿势估计。※※※※
csdn上搜论文详解!!!