吴恩达Deeplearning.ai 知识点梳理(course 4,week 4)
本周是Special Application
Face Recognition
Face问题有两种,一种是Face Verification,另一种是Face Recognition。
问题定义如下
Verification
- 输入是Image+name/ID
- 输出是这个Image和name/ID是否匹配
Recoginition
- 有K个人的数据库
- 输入一个Image
- 输出一个ID,这个ID是和这个Image匹配的,但是也可能未找到。
Recognition比Verification难很多,因为对于Verification来说,99%比方说,就是一个很好的正确率了。但是对于Recognition来说,K=100,99%的正确率就急剧下降,事实上,商用的正确率需要99.99…%很多个9才行。
One Shot Learning
One-Shot Learning是Face Verification的重点和难点。有以下几个原因:
- 因为对于一般的神经网络来说,都是一个图片,塞进一个CNN,然后给一个softmax,比方说一共有5个员工,那么输出5维向量。
- 当来了一个组织人员之后,拍照,然后给出来结果。但是问题在于神经网络没法在数据很少的情况下work well。
- 而新组织人员来了,不可能提供一大堆的照片共训练。而且组织内人员也是有变动的,不可能每次都重新训练,所以一般性的CNN是不行的。
所以解决OneShot Learning的问题的方法是,学习一个similarity funciton,这个similarity function,可以告知两个照片是否相似,这样就可以解决OneShot Learning问题了。也就是:
反映Degree of difference between images
如何训练?使用Siamese network
一般的神经网络输出都有一个softmax之类的,在这里,我们直接把softmax去掉,然后用最后的FC层进行判断和计算。
假如对于
那么最后的learning goal就是,如果是same person,那么d就小,如果是different person,d就大。
Triplet Loss
那么如何定义损失函数呢?使用的是triplet loss。
首先有一个Anchor图片,是某一个人的照片记为A;
然后在用一个Positive样本,也是这个人的照片,但是是另一张,记为P;
然后有一个negative样本,是别人的一张,记为N。
然后我们希望
但是这样网络可能学习到的是
所以我们留有一定余量:
这样我们就有一定余量了。
所以最后的loss function就是:
这是因为如果max第一项如果是小于等于0,那么目的就达到了,如果大于0,就进行优化。
所以就训练而言,例如有10k个照片,里边有1k个人,平均每个人有10个照片。如果每个人只有一个照片,那这个就没法训练了。因为必须有AP组合。
而对于AN组合,如果是随机挑选负样本的话,那么神经网络很快就能达到目标,这样啥也没学到,所以还是得挑选一些相似的照片才行,称为Choose hard triplet。
商用系统一般都得用1 million数据库进行训练,有些是10 million,更有甚者是100 million,所以可以考虑开源的faceNet和DeepFace。
把face Verification做成一个Binary Classification
另外一些Loss function类型就是把需要对比的两个照片怼到sigmoid里边,这样就变成2分类问题。
或者还有一些其他形式,例如
这个称为
计算上的考虑
最后就是说因为最后比的都是那个FC输出的向量嘛,所以可以都预先计算好,不用每次都计算了。
Neural Style Transfer
什么是Neural Style Transfer?
Neural Style Transfer就是学习大师级艺术画作的风格,然后将一张普通的照片转化成大师级艺术的风格。
CNN每一层究竟学习什么?
[Zeiler and Fergus, 2013, Visualizing and understanding convolutional networks]
将Image丢进CNN,然后找到一些Image的部分小区域(Patches),然后找到使每一层的activation最大的patch,然后将其画出来,就可以了解这一层中的这个neuron是在看/检测什么。
可以看到layer1基本上是基本的边缘,或者是颜色区块,第二层就是一些基本的形状,例如圆形,或者是竖线pattern,或者是颜色区块,从第三层开始,就会检测一些更高层级的东西了,例如人、或者是轮子,或者是狗等等。但是仔细看,就会发现第四层会比第三层检测的更加复杂。第三层偏向于复杂一些的pattern,第4层则开始检测例如狗这样的复杂问题。然而第4层狗都长得差不多,而第五层的狗则是各种各样的。
Cost function
Neural sytle transfer的Cost Function是
那么具体的方法就是:
Step1 随机初始化G
Step2 使用梯度下降得到G
Content Cost Function
如何定义两个图像有相同的Content?
假定
所以:
Style Cost Function
Style Cost Function则是每一层activation中channel与channel之间的Gram Matrix,也就是协方差矩阵。
这两个地方需要用下面两张图来说明。
首先activation表达的是图像的特征,包括纹理、颜色、或者更高层级的特征,例如人像、内容等在空间上的分布(这个很好理解,就是右下角有个狼呗,然后狼检测器就在右下角activation比较大)
那么下面这个图中,表达的是内容一样,但是风格不一样,所以位置-特征这个关系保持不变
而对于下边这个图,表示的是内容不一样,但是风格一样。关键是如何理解“风格”,其实风格从这几个图片来讲,就是横的纹理是红色的,竖的或者斜的纹理是蓝色的……
所以其实就是,如果一个地方有横的纹理,那么颜色来讲一定是红色的,如果一个地方是竖的纹理,那么一定是蓝色的。所以横纹理的activation值比较大的地方,一定红色activation也比较大。这叫做位置相关性,所以Gram Matrix可以很好地反映这一点。
结尾
所以最后就用这个Cost function做就可以了。