前言
Facenet
是一个经典的人脸识别模型,训练采用了triplet_loss
。但是使用triplet_loss
有一些问题,比如模型难收敛,三元组组合爆炸等。之后ArcFace
的出现,使得模型能够快速收敛,不同人的人脸能够得到较好的区分。但是,上述两种模型/方法本质上都是在做分类,而实际人脸识别/比对应该是openset的,两者之间有出入。对比学习是一种应对该问题的方式,部分出现类别限制。
因此,本篇基于bubbliiiing的facenet做了一些拓展:除了原始的triplet_loss
,还加入了arcface
和contrastive_loss
。
一、项目
repo:https://github.com/DaiHaoguang3151/facenet_with_contrastive_learning
二、心得
- 使用
arcface
和contrastive_loss
训练,收敛速度远快于triplet_loss
; - 条件允许的情况下,尽可能调大batch,模型会更快的收敛;
- 对比学习真的香,但是理论上训练一个好的模型也很吃数据量。
三、onnxruntime-web推理
需要将facenet
作为人脸识别模型放到web段推理的朋友,可以参考web端实现基于face-api.js + facenet的人脸识别
总结
本篇对Facenet
做了一些拓展和对比,供大家参考。