文章目录
1. 什么是人脸识别
人脸识别问题比人脸验证问题难很多,前者需要识别的是K个图片,后者有对应的ID号,是1:1问题。
2. One-Shot学习
一次学习问题:只能通过一个样本进行学习,即,通过学习每个人的一张图片,来认出同一个人。
所面临的问题:如果按照以前的方法,用卷积神经网络训练, 最后加一层softmax输出类别,因为样本数量太小的缘故,效果肯定不稳定。而且如果有新人加入,难道要重新训练网络么?
解决办法:学习一个Similarity函数。
学习如上图所示的一个函数d,如果是同一个人的照片,希望其能输出一个很小的值,反之亦然。设定一个超参数,阈值,差异值大于阈值,预测其为不同的两个人。
通过与数据库中所有人脸的计算,能够确定这个人是否属于内部人员。
3. Siamese网络
之前在一篇CD+NRL的论文中看到过,这里终于明白了是个什么东西。用来学习两个人脸的相似度函数。
核心思想:对于两个不同的输入,运行相同的卷积神经网络,比较它们。
训练:神经网络的参数定义了一个编码函数
f
(
x
(
i
)
)
f\left(x^{(i)}\right)
f(x(i))
学习参数,两个图片如果是同一个人,两个编码的距离就小,反之亦然。使用反向传播来更新参数。
4. Triplet损失
这节主要是构建一个合适的损失函数,用于梯度下降学习参数。
上述不等式就是我们想要的。由于每一项都为0也能满足不等式,但是没有意义,所以加上一个margin,让与正负样本之间的相似至少相差margin大小。
这个损失函数的意思就是,如果前一项是≤0的,那么损失就为0,即达到了学习目标。
这里在选A,P,N的时候会出现一个问题:
解决方法:
选择两者差不多大的图片N,使得算法能更更快的学习。
最后应用梯度下降最小化代价函数J。
5. 人脸验证与二分类
上节讲的是用triplet loss学习卷积网络的参数,这节将其当成二分类问题来学习。
上图绿色中这块就是对输出向量128个元素分别取差值绝对值。也可以用其他相似度公式替代。如
χ
2
相
似
度
:
(
f
(
x
(
i
)
)
k
−
f
(
x
(
j
)
)
k
)
2
f
(
x
(
i
)
)
k
+
f
(
x
(
j
)
)
k
\chi^{2}相似度:\frac{\left(f\left(x^{(i)}\right)_{k}-f\left(x^{(j)}\right)_{k}\right)^{2}}{f\left(x^{(i)}\right)_{k}+f\left(x^{(j)}\right)_{k}}
χ2相似度:f(x(i))k+f(x(j))k(f(x(i))k−f(x(j))k)2
值得一提的是,这里用到的也是Siamese网络。并且通常先使用员工数据库预训练好,来个新的员工直接计算类别就行了。
6. 什么是神经风格迁移?
7.深度卷积网络学习什么?
8.代价函数
还是需要为生成的图像定义一个代价函数,通过梯度下降法最小化代价函数来获得生成图像。
J
(
G
)
=
a
J
content
(
C
,
G
)
+
β
J
style
(
S
,
G
)
J(G)=a J_{\text {content }}(C, G)+\beta J_{\text {style }}(S, G)
J(G)=aJcontent (C,G)+βJstyle (S,G)
算法运行步骤:
9. 内容代价函数
这里的隐藏层l的选择不要太深也不要太浅。
10. 风格代价函数
图片的风格定义:l层中各个通道之间激活项的相关系数。
如何计算不同通道之间的相关系数?
首先去两个通道同一位置的数字对。
假设红色通道是图中3神经元,黄色通道是图中4神经元。如果图片中出现垂直纹理(红色通道检测)的地方大概率是橙色(黄色通道检测),就是相关性较高。
简单来说,相关系数就是衡量不同特征在图片中各个位置同时出现或不同时出现的频率。
上图为计算在l层风格图像的矩阵。(两两相关系数矩阵)
其中元素被描述k通道和k’通道之间的相关系数。
上图G函数为一种非标准的互相关函数。(没减去平均数)如果两者相关,激活值都很大,乘积会很大。
生成的图片也进行G计算。
将计算的两个Gram矩阵,构建一个损失函数J。使用Frobenius范数,实际上就是计算两个矩阵对应元素相减的平方和。
刚说的是一层上的损失函数定义,l层乘以相应权重,(可以使用不同层,包括低级特征边缘和高级特征等)加在一起就得到最终的风格损失函数。
后面用梯度下降法,优化出合适的图像G。
11. 一维到三维的推广
2D:
1D:
3D: