作者:jliang
《深度学习工程师-吴恩达》03卷积神经网络—特殊应用:人脸识别和神经风格转换 总结
1.重点归纳
1)人脸识别
(1)人脸验证:输入图片以及某人ID/姓名,系统会验证输入图片是否这个人,1对1问题
(2)人脸识别:1对多问题,输入图片验证图片是否为已有用户。比验证问题复杂多了,准确率为99%的验证系统已经不错,但是识别问题上却要求99.9%甚至更高。如100个人识别系统中,一个人的识别错误也是不能接受的。
2)One-Shot学习
(1)人脸验证系统的困难之一在于要解决“一次学习”(One-Shot学习)问题,在绝大多数人脸识别应用中,你需要通过单单一张图片或人脸样例就能识别这个人。
(2)学习similarity函数:让神经网络学习一个用d表示的函数,输入两张图片,输出这两张图片的差异值。如果与数据库中某个人的照片的差异值小于等于阈值时,则验证通过。
3)Siamese网络:计算两张照片差异值/相似度的一种算法
(1)传统CNN图像分类网络最后一层接了一个softmax层作输出,在这里我们把最后一层softmax层删除,以FC层作为输出。
(2)假设输入x,FC输出为f(x),两张照片的差异值等于dx1,x2=fx1-f(x2)22。
(3)Siamese网络训练:编码函数f(xi),学习参数使得如果两个照片xi和xj是同一个人,得到两个编码距离就小;相反,如果xi和xj不是同一个人,就像让它们之间的编码距离大一点。
4)使用Triplet损失(三元组损失)学习卷积网络参数
(1)学习神经网络的参数来得到优质的人脸图片编码方法之一就是定义三元组损失函数,然后使用梯度下降法求解。
- 三元组APN:当比较anchor图片和positive(同一个人)图片时很相似;当比较anchor图片核Negative图片时差异值更大点。
- 公式推导
- fA-f(P)2≤fA-f(N)2
- 增加类似SVM间隔作用的间隔α,拉大了AP与AN的差距
- fA-f(P)2-fA-fN2+α≤0
- 目标函数:LA,P,N=max(fA-fP2-fA-fN2+α,0)
- 损失函数:J=i=1mLA(i),P(i),N(i)
(2)训练集:为了定义三元组的数据集,需要成对的A和P(同一个人的不同图片)。为了训练系统,需要一个里面有同一个人的多个照片的数据集,如1k个人的共10k张不同的照片的训练集。只有一个人的照片无法训练这个系统。
(3)A, P和N的挑选:应该尽可能选择难训练的三元组,这样选择还可以增加学习算法的计算效率。如果随机选取三元组,会很容易满足条件,梯度下降法学习到的东西比较少。
5) 使用二分类学习卷积网络参数
(1)选取一组siamese网络,同时计算两个图片的输出值,然后再把其输出值输入到逻辑回归单元进行二分类学习。相同的人则输出1,否则输出0。
(2)目标函数:,此处的128是siamese输出层FC的神经元数量。
另一种目标函数,χ平方公式:
(3)部署优化:把识别系统已经录入的照片计算好siamese输出,并保存这部分输出值。当有人需要被识别时,先计算siamese输出,然后再把待识别人的embedding输出与数据库中存储的所有人员的embedding输入逻辑回归模型中进行识别是否为同一个人。
6)神经风格转换
C代表内容图像,S代表风格图像,G代表生成的图像
7)深度卷积神经网络学习的内容
(1)神经网络的浅层学习到图片的边缘或线,不同的过滤器学习到不同的边缘/线。
(2)深层部分的隐藏单元学习到图片更大的部分,检测到更复杂的形状和模式。
(3)从检测简单的事物(第一层的边缘,第二层的质地),到深层的复杂物体。
8)代价函数
(1)代价函数公式: