基于FaceNet的实时人脸识别系统搭建指南
1. 三元组选择
在理想情况下,我们选择三元组时应使 $||f(x_i^a) - f(x_i^p)||_2^2$ 最小,同时使 $||f(x_i^a) - f(x_i^n)||_2^2$ 最大。不过,要在所有数据集上计算这两个最值可能并不可行。所以,我们需要一种能高效计算距离最值的方法。这种计算可以离线完成后再输入到算法中,也可以通过某些算法在线确定。
在线方法中,我们将嵌入向量划分为小批量。每个小批量包含一小部分正样本和一些随机选择的负样本。FaceNet的发明者使用的小批量包含40个正样本嵌入和随机选择的负样本嵌入。针对每个小批量计算最小和最大距离,以此创建三元组。
2. 训练人脸识别模型
我们将基于FaceNet训练自己的模型,并构建一个实时人脸识别系统。最流行的基于TensorFlow实现的FaceNet版本之一是David Sandberg的开源版本,可在GitHub(https://github.com/davidsandberg/facenet )上根据MIT许可证免费获取。本文使用的是从原GitHub仓库分叉而来并稍作修改的版本(https://github.com/ansarisam/facenet ),核心神经网络和三元组损失函数的实现未作修改,该版本使用OpenCV来读取和处理图像,同时对一些TensorFlow库函数进行了升级。
为了训练人脸检测模型,我们将使用Google Colab。但要注意,人脸检测模型计算量很大,即使在GPU上训练也可能需要数天时间。而且,Colab会话过期后会丢失所有数据和设置,并非训练长时间运行模型的理想平台。若要训练生产级别的人脸识别模型
超级会员免费看
订阅专栏 解锁全文
361

被折叠的 条评论
为什么被折叠?



