基于Triplet loss函数训练人脸识别深度网络(Open Face)

Git:  http://cmusatyalab.github.io/openface/

FaceNet’s innovation comes from four distinct factors: (a) thetriplet loss, (b) their triplet selection procedure, (c) training with 100 million to 200 million labeled images, and (d) (not discussed here) large-scale experimentation to find an network architecture.

首先resize为如下尺寸: 96*96

输入Image(需要100M-200M张图片)

Face detection(检测人脸)、Preprocessing(尺度归一、灰度校正、每一张脸都进行一次仿射变换)

输入神经网络(进行特征提取)最终实现面部表示

再进行分类sklearn’s SVM(python中的一个库)

图1 模型训练结构

Triplet loss结构:一组三个图像:一个标准图像,一个正样本(与标准同一人),一个负样本(不同的人)

通过损失公式来调节整个网络,公式如下,思想将在文末介绍:

图2 Triplet loss公式

Resize(96*96)预处理采用简单2D仿射变换可规格化脸部、训练神经网络-低维面部表示(神经网络提取特征)

OpenFaceis trained with 500k images from combining the two largest labeled face recognition datasets forresearch.

e network provides an embedding on the unit

hypersphere and Euclidean distance represents similarity.

网络提供了一种嵌入式的超平面和欧氏距离来表示相似性。

逻辑流:

图3 模型逻辑流

最后神经网络提取特征形成初始模型面部表示。如下图所示:

图4 Torch与Python结合

误差函数Triplet loss

最后,说一说基于度量学习的误差函数Triplet loss,其思想来源如下:

其中xai表示参考样本,xpi表示同类样本,xni表示异类样本,threshold表示特定阈值。该不等式可表示成下列形式:

该不等式本质上定义了同类样本和异类样本之间的距离关系,即:所有同类样本之间的距离+阈值threshold,要小于异类样本之间的距离。当距离关系不满足上述不等式时,我们可通过求解下列误差函数,通过反向传播算法来调节整个网络:

只有括号内公式的值大于0时,才计算误差。利用该公式可分别计算出xai,xpi和xni的梯度方向,并根据反向传播算法调节前面的网络。

在FaceNet中,作者利用该方法与Zeiler&Fergus以及GoogLeNet中提出的网络结构相结合,实现人脸识别,达到了很高的精度。

为了验证TripletLoss的有效性,我们在WebFace数据库上利用TripletLoss训练了另一种深度卷积网来实现人脸验证,WebFace中有该网络的结构描述。与FaceNet不同,我们并没有采用作者使用的semi-hard样本选取策略,而是直接扩大batch中样本的数量。得益于双Titan X显卡,BatchSize达到了540,较大的BatchSize能够保证求得的梯度方向与semi-hard策略所求得的梯度方向相类似。

在得到TripletLoss训练好的网络后,我们利用Joint-Bayesian方法对网络最后一层提取的特征进行学习,得到相似度估计模型。最终模型与DeepID在LFW测试集上的对比ROC曲线如下图所示:

Openface nn4,small2 network改进于Facenet

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏林欣哲

图像扩张

机器视觉中的图像识别问题,常常需要大量的数据,而带标签的数据需要人工标注,很难得到较多的数据。因此,我们需要使用图像扩张的方法,人工生成各种变换后的数据,扩大我...

37510
来自专栏张俊红

机器学习中非平衡数据处理

总第97篇 这一篇主要说一下机器学习中非平衡数据的处理方式以及用python如何实现. 在前面的一篇推文中我们提到过,非平衡数据会影响最后的评判效果,严重的会...

4235
来自专栏人工智能LeadAI

TensorFlow从1到2 | 第四章: 拆解CNN架构

上一篇 《TensorFlow从1到2 | 第三章: 深度学习革命的开端:卷积神经网络》 快速回顾了CNN的前世今生。 本篇将拆开CNN架构,一探究竟。 ? 基...

3747
来自专栏WD学习记录

机器学习 学习笔记(21)深度学习中的正则化

在机器学习中,许多策略被显式的设计来减少测试误差(可能会以增大训练误差为代价)。这些策略统称为正则化。

4042
来自专栏瓜大三哥

CNN-3DMM extimation(0.9235)

当在真实场景中应用3d模拟来增加人脸识别精度,存在两类问题:要么3d模拟不稳定,导致同一个个体的3d模拟差异较大;要么过于泛化,导致大部分合成的图片都累死。因此...

38610
来自专栏智能算法

机器学习三人行(系列五)----你不了解的线性模型(附代码)

到目前为止,我们已经将机器学习模型和他们的训练算法大部分视为黑盒子。 如果你经历了前面系列的一些操作,如回归系统、数字图像分类器,甚至从头开始建立一个垃圾邮件分...

38416
来自专栏机器之心

教程 | 经得住考验的「假图片」:用TensorFlow为神经网络生成对抗样本

选自arXiv 作者:Anish Athalye 机器之心编译 参与:李泽南 用于识别图片中物体的神经网络可以被精心设计的对抗样本欺骗,而这些在人类看起来没有什...

9669
来自专栏AI研习社

从编程实现角度学习 Faster R-CNN(附极简实现)

Faster R-CNN 的极简实现: github: simple-faster-rcnn-pytorch(http://t.cn/RHCDoPv ) 本文插...

1.1K5
来自专栏刘琦的专栏

InceptionV3 网络模型

GoogLeNet inceptionV1 到 V4,一直都在逐步改进,本文主要是阅读 V3 的论文学习总结。

9590
来自专栏机器之心

从传统方法到深度学习,人脸关键点检测方法综述

5595

扫码关注云+社区

领取腾讯云代金券