人脸比对CNN设计

一、DeepID学习

  1. 基于Caffe的DeepID2实现 喵耳朵博客2016.10,让你的Caffe支持python层,屏蔽下面配置,然后重新编译。不过最好直接修改Caffe。
    这里写图片描述
    修改的目的主要是适应两个图片的输入。自己实现了ContrastiveLossLayer,LocalNormalization两个层,似乎新版Caffe有这两个层。实现了FaceVerification部分。
  2. DeepFace–Facebook的人脸识别 雨石博客 2015.7
  3. FaceNet–Google的人脸识别 雨石博客2015.6
  4. DeepID人脸识别算法之三代 雨石博客2014.12
  5. 使用Caffe复现DeepID实验 ,DeepID网络配置文件,训练验证数据组织,本实验单模型只有95.45%的准确率,没有到97%左右。主要是人脸分类,不是人脸识别。
  6. 《Deep Learning Face Representaion from Predicting 10000 Classes》读书报告,包括两个阶段,一是对输入的人脸块(face patch)用多层卷积网络进行特征提取。一是人脸比对(FaceVerification)输入两张人脸图片,应用多层神经网络或者联合贝叶斯来判定,来判定这两张人脸图片是不是来自同一个人。
  7. 基于Caffe的DeepID人脸识别实现 爱程序网,精度有点低,只有82%。但是博客提供了人脸识别的python程序。训练模型未实现FaceVerification部分。
    out = net.forward_all(data_1 = X)
    feature1=np.reshape(feature1,(test_num,160))
    out = net.forward_all(data_1=X)
    feature2 = np.float64(out[‘deepid_1’])
    mt=pw.pairwise_distances(feature1, feature2, metric=metric)。
    上述代码的关键是从deepid层读取人脸的特征值(feature)。作者提供了人脸检测、特征点检测、对齐快捷工具FaceTools
  8. DeepID3: Face Recognition with Very Deep Neural Networks 2016.2.3
  9. 大裕量Softmax 损失函数,ICML2016 ,Large-Margin Softmax Loss for Convolutional Neural Networks。
  10. 人脸识别之caffe-face,也是watersink的博文,该论文为2016年的一篇ECCV,ADiscriminative Feature Learning Approach for Deep Face Recognition。还是深圳先进院乔宇老师组的一篇。不管是思想还是效果都非常的棒。整体流程就是读取输入的图像,然后做个前向传播,应用softmax loss+center loss学习到DiscriminativeFeatures,然后进行标签的预测。
    softmaxloss可以实现将2个类别分开,center loss可以实现减少类类距离,增加类间距离的效果,有点类似,线性判别分析LDA(Linear Discriminant Analysis)的思想。在效果上优于contrastiveloss和triplet loss,解决了这2个方法在采样问题中的trick。关键点是centerloss的思想
    看了deploy.prototxt和fac_train_test.prototxt的结构才发现用的是ResNet。作者温研东主页 github

二、人脸检测对齐工具

  1. 上述代码的关键是从deepid层读取人脸的特征值(feature)。作者提供了[人脸检测、特征点检测、对齐快捷工具FaceTools]
  2. kpzhang93/MTCNN_face_detection_alignment,对应的python&caffe版本DuinoDu/mtcnn,相关介绍博文人脸检测:MTCNN,tinyZhao博客MTCNN, WaterSink的博客,作者换了源码的缩放函数bilinear变成bicubic,增加耗时,能够识别第二批右边第二个小人脸。
  3. MTCNN python版本代码有点小问题,在demo.py中一个人脸的Box被画了两次,而且第一次画时坐标顺序错误。
  4. MTCNN python版本代码中的pad函数没有将boxes中的浮点数转换为整型,会报出警告。如下修改:boxes = np.array(boxesA.copy(),dtype = int) ,dx = np.ones(numbox,dtype=int)即可。
  5. 人脸数据集百度云,包括Celeb的人脸数据Cross Age人脸识别,包括一部分数据Cross-Age Celebrity Dataset (CACD)
  6. 人脸的姿势估计与各种姿势下的对齐,上海交通大学博士论文
  7. 基于Landmark的人脸对齐以及裁剪方法,人生若只如初见博客
  8. opencv 仿射变换 根据眼睛坐标进行人脸对齐 计算变换后对应坐标
  9. 人脸旋转剪裁的python代码 Skimage图像选择,缩放
  10. skimage api文档
  11. MatLab中cp2tform帮助文档,比较详细地介绍了各种transform的算法。比如similarity,affine,polynomial。
  12. Matlab cp2tform函数研究,在caff-face的extractDeepFeature.m代码中用到了cp2tfrom和intransform两个函数将人脸进行对齐。cp2tform函数是根据人脸的5个标记点与标准的5个点作为输入来计算(similarity)转换矩阵。该矩阵的转换公式为:
    [u v]=[x y 1]scsctxassassty

    该矩阵共有5个参数需要确定,因此至少需要两对以上原始点和目标点(将产生至少4个方程),a参数为1或-1,表示是否镜像,如果镜像后坐标与目标坐标的误差范数小则为-1。cp2tform求解过程为:
    U=Xrr=inv(X)U
  13. skimage的Transform包括测试代码,很好学习,还有programtalk网站中的例子,来自kaggle diabetic,最终编程代码包括wrap应用tform进行变换在skimage Similarity应用例子博客中。
  14. YOLO论文记之概述与实践 ,偶然发现的目标检测最新最顶级论文,比R-CNN新。提出一种叫YOLO新的目标检测方法。以前的目标检测的研究大多是改进分离器来进行检测。我们将目标检测的当做一种回归的问题来解决,通过空间的分割成边界框和相应类别的概率。我们采用单独的网络直接从整副图像来预测边界框和类别的概率。因为整个检测在一个网络内,所以它可以直接优化端到端的检测性能。关键点两个,将检测当作回归问题,直接优化端端性能。
  15. camel007/caffe-yolo-face-detectionYOLO系列博客,小杨_

三、人脸比对实现的思路

  1. 分两个模型,一个是人脸特征识别模型,一个是人脸特征比对模型。首先用人脸特征识别模型来学习抽取人脸的特征feature模型,比如DeepID;其次,用人脸特征比对模型来学习根据两张人脸特征进行比对,最简单的比对可用Cos距离比对。其实《Deep Learning Face Representaion from Predicting 10000 Classes》读书报告已经说了这个方法,可是当时竟然没有理解!
  2. 深度学习与人脸识别系列(3)基于VGGNet的人脸识别系统 ,wjmishuai博客,直接给出训练好的人脸识别模型,好象有500多M。vgg face网络参数说明博客。wjmishuai的另一篇实时摄像头人脸识别博客,有详细的python代码, 深度学习与人脸识别系列(6)利用训练好的vgg模型进行人脸识别(利用摄像头) VggFace python实现问题解答,cv2.cvtColor(img, cv2.COLOR_RGB2BGR), img = img[:,:,::-1]*255.0 # convert RGB->BGR
  • 2
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值