4.1 什么是人脸识别?
人脸识别的一些术语:人脸验证和人脸识别。
人脸验证问题:只需要弄明白这个人和他声称的身份是否相符。
而人脸识别比人脸验证要难很多。
如果人脸验证的准确率足够高,那么就可以将其应用在人脸识别系统上。
4.2 One-shot学习
主要讲如何构造人脸验证系统?
人脸验证之所以难,是因为要解决“一次学习”,即one-shot learning的问题。这意味着在绝大多数人脸识别应用中,you need to recognize a person given just one single image or given just one example of that person’s face.
在一次学习问题中,只能通过一个样本进行学习 to recognize the person again.
其实,这么少的数据是训练不起CNN网络的,难道增加了人之后,还要再重新训练神经网络么?这听起来不像是个好方法呢。(分类问题–不太合适)
所以,要让人脸识别能够做到one-shot learning,为了能有更好的效果,要做的就是学习similarity function。
解决人脸验证问题的一种可行方法,学习相似性函数。
人脸识别时,将照片进行两两比较,
解决One-shot learning
学习similarity function,通过输入一对图片,将会告诉这两张图片是否是同一个人。有利于系统的工作。
4.3 Siamese网络
如何训练神经网络学会这个similarity function?
similarity function 的作用就是输入两张人脸,然后告诉他们的相似度。
经常看到的网络,经过一系列卷积,池化,FC,最终得到a feature vector。有时候,这个vector会送进softmax单元来做分类,但这里不这样做。
用相同参数的网络,对两张图片进行encode,这编码结果很好的代表了这两张图片,要做的就是
Siamese network核心思想就是,对于两个不同的输入,运行相同的卷积神经网络,然后比较。
怎样训练这个网络呢?
改变网络的参数,会得到不同的编码结果。要做的就是用反向传播来改变所有的参数,来满足
满足以上的编码才能是一种好的编码。
4.4 Triplet损失
如何定义实际的目标函数,能够让神经网络学习并且实现刚才的目标?用三元组损失函数triplet loss function可以达到这个目的。
要想通过学习神经网络的参数来得到优质的编码,方法之一就是定义the triplet loss function,然后应用梯度下降。
为了应用 the triplet loss,需要比较pairs of images,为了学习网络参数,要同时看几幅图片。
the triplet loss function中“三”的体现。:同时看三张图片
为了防止网络输出无用的东西,要修改目标,引入超参数。习惯上写,而不是把写在后面,and this is also called a margin。So,the 也叫做间隔参数(margin parameter)。
的作用:
拉大了anchor positive pair和anchor negative pair的距离。
The triplet loss function的定义基于三张图片,
注意:为了定义三元组的数据集,需要成对的A和P,即同一个人成对的图片。为了训练系统,需要一个数据集,里面有同一个人的多个图片。在本例中,基本上每个人10张照片,组成了整个数据集。如果,每个人一张照片,根本没法训练这个系统。当训练完这个系统之后,可以用到one-shot learning问题上。
对于人脸识别系统而言,可能只有想要识别的某个人的一张照片,但对于训练集而言,要确保有同一个人的多个图片,
如果随机的话,条件很容易满足,网络并不能学到什么。
选择”hard”的三元组可以增加学习算法的计算效率。同时,选择“hard”的三元组,梯度下降法才能发挥作用。
若想要了解更多关于通过选择最有用的三元组训练来加速算法的细节,请看paper:2015,FaceNet:A unified embedding for face recognition nd clustering.
按照上述方法定义数据集后,用梯度下降最小化之前定义的cost function J.
4.5 面部特征与二分类
Siamese的一些变体,以及如何进行train。
Triplet loss是一个学习人脸识别卷积网络参数的好方法,还有其他学习参数的方法。
如何把人脸识别当成一种二分类问题?
另一个训练神经网络的方法是选取一对神经网络(Siamese network),同时计算编码,然后把结果送入a logistic regression unit,然后进行预测。同一个人,y=1.
这样就把人脸识别问题传唤成为了二分类问题了。
训练这种系统时,可以替换triplet loss的方法。最后的logistic regression unit是怎么处理的?
放入编码的不同,
还有一些其他的方法来计算上述绿色标记的部分,如卡方相似度。
用预计算的方法可以节省大量计算。
人脸验证
这是一个监督学习,创建一个只有成对图片的训练集。不是三个一组,而是成对的图片。利用不同的成对图片,使用反向传播算法,去训练Siamese神经网络。
4.6 什么是神经风格转换?
C+S=G
为实现神经风格迁移,需要知道卷积网络提取的特征,不论是shallow还是deep。
4.7深度卷积网络在学什么?
2013,Visualizing and understanding convolutional networks.
第一层的隐藏单元通常会找一些简单的特征,比如边缘或者颜色阴影。
In deep layers,一个隐藏单元会看到一张图片更大的部分。
4.8代价函数
为了实现神经风格迁移,需要定义一个关于G的代价函数J,用来评判某个生成图像的好坏。定义好代价函数之后,将要使用梯度下降法最小化 J(G)。
考察生成图片内容相似度和风格相似度。内容代价+风格代价。用和确定两者之间的权重。
算法:
实际上更新的是图像G的像素值。从白噪声图生成了最终的图像。
风格迁移网络的代价函数包括:内容代价函数+风格代价函数。
4.9内容代价函数
如果层浅,将会在像素上接近内容图片。如果层深,则会问图片的具体内容。So,层不深不浅。
注意,这里的符号都是展成向量形式的。展成向量后,这就是两个**值间的差值平方和。层**值的插值平方和。
4.10 风格损失函数
图像的风格是什么样的?
选择某一层to define deep measure of the style of an image。现在要做的就是将图片的风格定义为层中,各个通道间**项的相关系数。
红色的channel对应可视化最上方中间的那个神经元,能够找出图片中的特定位置是否含有竖直纹理。
什么时候两个通道拥有高度相关性呢?
如果他们具有高度相关性,那么这幅图像中出现竖直纹理的地方,有很大的概率是橙色的。
不相关的话,意味着图片中有竖直纹理的地方,很大概率不是橙色的。
So,相关系数描述的就是当图片某处出现这种竖直纹理时,该处又同时是橙色的可能性。
相关系数提供了测量不同特征的方法。
如果在通道之间使用相关系数来描述通道的风格,则需要测量生成图像中第一个通道和第二个通道是否相关。通过测量,可以知道在生成图像中竖直纹理和橙色同时出现或者不同时出现的概率,这样就能测量生成的图像的风格与输入的风格图像的相似度。
需要计算风格矩阵,说的更具体一点,就是用层测量风格,分别代表该位置的高度、宽度、以及对应的通道数。现在要做的就是to compute a style matrix for layer and for the style image .
同样的,对生成的图像也进行这个操作。
现在来定义G,高与宽是层的通道数,在这个矩阵中k , k‘被用来描述k通道和 k’ 通道之间的相关系数。
非标准的互协方差cross-covariance函数,因为没有减去平均数,而是将这些元素直接相乘。
上图就是输入的风格图像所构成的风格矩阵。
然后,再对生成图像做同样的操作,
S代表风格图片,G代表生成图片。k and k’会在1-nc之间取值。nc是l层中的通道总数。
如果两个通道的**值很大,那么风格矩阵的数值会很大,相关的,如果不相关,那么G(KK’)就会很小。G在数学上gram matrix,but here style matrix.
要做的就是计算这张图像的风格矩阵,以便可以测量出相关系数,
对应元素相减的平方的和,F,因为是矩阵。
这个style cost function是两个矩阵之间的一个基本的Frobenius范数。也就是S图像和G图像之间的范数。再乘以一个归一化常数(该常数不是很重要,因为)
如果对各层都使用风格代价函数,会让结果变得更好。那需要把各层的结果加起来,每层定义权重,也就是一些额外的超参数。这样可以使得网络在计算风格时,能够同时考虑到这些低级和高级特征的相关系数。
4.11 一维到三维推广
2D to 1D
同样的经验可以被用于1D data,1D data实际是用一个RNN在处理的。
2D to 3D
3D卷积
对象是3D的
以CT为例,在3D扫描或CT扫描中,建立特征识别。
长宽高14 * 14 * 14
这也可以用于检测动物和人的行为。
confidence:更像是在确定各步size。
10 * 10 * 10 * 16
this could be one layer your confidence over 3d data