经典的深度学习模型
- AlexNet(Error: 16%)
- VGGNet(Error: 7%)
- VGG-16: conv3-64->conv3-64->maxpool -> conv3-128->conv3->128->maxpool -> conv3-256->conv3-256->conv3-256->maxpool -> conv3-512->conv3-512->conv3->512->maxpool -> conv3-512->conv3-512->conv3->512->maxpool -> fc4096->fc4096->fc1000->softmax
- GoogLeNet(Error: 6%)
- ResNet(Error: 3.57%)
目标检测
- R-CNN
- SPPNet
- 多个卷积层(框可以是任意大小)->ROI池化层(将任意大小的框转为统一大小的框)-> SVM分类
- Fast-R-CNN
- 多个卷积层(框可以是任意大小)->ROI池化层(将任意大小的框转为统一大小的框)->两个全连接神经网络(一个softmax用于分类, 另外一个用于框回归)
MTCNN(Multi-task CNN)
GAN
人脸识别(Face Recognition)
- 案例
- 现在有一个公司员工进入公司内部的身份验证系统, 与百度的类似, 但是是简化的版本, 现在有两种方案
- 每一个员工进入之前要初始自己的ID卡, 该卡上的磁条上有自己名字的信息, 同时员工还有对准相机进行脸部图像的获取, 在后台服务器的数据库中有一个name到encoding vector的映射, name就是公司中所有员工的姓名, encoding vector就是员工一开始录用拍摄的照片放入到神经网络中得到的编码; 输入name和图像, 将图像转为encoding vector, 根据name到dictionary中找到数据库中对应的encoding vector, 计算两个向量的L2范式距离, 如果小于一个阈值(比如0.7)表示为同一个人, 允许进入
- 与方案1不同的是, 现在不需要ID卡, 而是直接采用相机捕捉脸部图像的方法, 在服务器上的数据库还是那个字典, 当员工靠近时, 对准相机, 算法会将当前的人脸转为encoding vector, 接着去遍历dictionary中的encoding vector计算他们的L2范式距离, 得到对接近的dist, 在将该dist与阈值(如0.7)进行比较, 如果小于0.7则表示是同一个人, 允许进入; 此方法的好处是员工丢失了ID卡也没有关系
- 模型
- 采用DeepFace模型
- 每一个样本为\((A^{(i)},P^{(i)},N^{(i)})\), 其中A表示anchor(新的图片), positive(与anchor是同一个人的图片), negative(与anchor不是同一个人的图片), 这与我们之前遇到的样本长得不一样, 称之为triplet(三元组)
- L2计算公式\(||f(A^{(i)})-f(P^{(i)})||^2+\alpha \le ||f(A^{(i)})-f(N^{(i)})||^2\), 其中\(\alpha\)与SVM中的功能一样, 是一个软间隔; 变换一下为求最小化\(J=\sum_{i}^mmax({||f(A^{(i)})-f(P^{(i)})||^2}-||f(A^{(i)})-f(N^{(i)})||^2+\alpha)\), 成为triplet loss(三元组损失)