为什么物体识别很困难?
- 图像分割(Segmentation):实际场景中总是掺杂着其他物体。
- 物体光照(Lighting):像素的值被物体光照所显著影响。
- 图像变形(Deformation):物体有时会变形成非仿射(non-affine)的形式。
- 情景支持(Affordances):物体所属类别常常由他们的使用方式而定义。如各种能坐的物体都可以是算是椅子。
- 维度跳变(dimension-hopping):
具体表现是:改变视角(viewpoint)可能导致机器学习方法失效, 如图1。
图1
形象的比喻是:网络用来学习病人的各种体征,之前用来学习身高的神经元,现在忽然用来学习病人的年龄。
获得视角不变性的方法
- 使用充足冗余的不变性特征(redundant invariant features)。
- 在物体外侧画一个边框,然后对其进行归一化(Normalization)。
- 使用复制特征(replicated features)以及池化(pooling)技巧。
不变特征方法(The invariant feature approach)
提取一个巨大、冗余的特征集合,这个集合对于变换具有不变性。
例如:在红点周围的两根粗平行线。如图2。
![]()
图2
当时对于识别任务而言,应当尽量避免不属于物体的部分的特征。
合理归一化方法(The judicious normalization approach)
- 在物体周围放置一个边框,并定位方向,从而进行归一化。如图3。
- 边框对相当多的变形具有不变性:如平移、旋转、放大、剪切以及拉伸。
图3
然而选取边框非常困难,因为:
- 分割错误、遮挡、反常定位。
- 因此我们需要识别出物体才能更好对边框进行定位——这变成了鸡与蛋的问题。
强制归一化方法(The brute force normalization approach)
- 训练识别器的时候用良好裁切,方向竖直向上、贴合边框的图片。
- 测试识别器的时候用各种位置和朝向的边框。
- 这种方法对检测未经裁切的竖直物体如脸部、门牌号码这些任务很有效。
用以手写体识别的卷积神经网络
复制特征方法(The replicated feature approach)
- 在不同的位置使用相同的特征提取器,如图4。
- 复制特征的方法显著降低了自由参数的数量。
图4
复制特征方法学习到了什么?
激活值等变化量
复制特征的方法并不能使神经元激活值不变,但是能够使激活值改变量相同,如图5。
图5
知识不变量
如果在训练中某个特征在一些位置有效,那么在测试中,特征提取器应该在各个位置生效。
复制特征提取器的池化(Pooling)
池化就是把相邻的像素值均值化,作为下一层网络的单一输入。
这会降低输入到下一层的输入特征数,从而使得下一层实际能学到特征变多了。
存在的问题:经过若干层的池化,我们损失了 物体的精确位置信息。
这使得利用物体之间的精确空间位置关系来进行识别变得不可行。
LeNet5 模型
Yann LeCun 开发了一个多层卷积神经网络用于手写体识别,如图6:
![]()
图6
如何评价两个模型的优劣?
McNemar 测试比单纯地比较两个模型的错误率要更加可观。
type model 1 wrong model 1 right model 2 wrong 29 1 model 2 right 11 9959
说明模型2要显著好于模型1。
type model 1 wrong model 1 right model 2 wrong 15 15 model 2 right 25 9949
并不能说明模型2要好于模型1。
Alex’s Net 的诸多设计
Krizhevsky, Alex, Ilya Sutskever, and Geoffrey E. Hinton. “Imagenet classification with deep convolutional neural networks.” Advances in neural information processing systems. 2012.
- 7层隐含层(不包括池化层)。
- 前面5层是卷积层,后面2层是全连接层。
- 激活函数使用的是ReLU函数。
- 归一化层用以抑制近邻神经元的强激活值。
- 随机裁切和水平镜像以扩大训练数据集。
- 丢弃层(Dropout)随机丢弃一半权重以防止过拟合。
- 双GPU(GTX 580)矩阵运算。
![]()
图7