历史项目

记录过往的机器学习与软件工程实践,以及其中的技术选择和实现过程。

返回精选项目
2025

2025.03 - 2025.05机器学习工程师

基于 Transformer 的人脸活体检测

面向打印照片、屏幕展示静态照片和屏幕回放视频三类人脸展示攻击,构建 CNN + Transformer 活体检测模型。输入连续摄像头画面,用 CNN 提取逐帧视觉特征,再用 Transformer 建模帧间关系。完成从视频采样、模型训练到人脸分析推理整合的开发流程。

  • CNN
  • Transformer
  • YOLO
  • PyTorch

覆盖的展示攻击

  • 打印照片
  • 屏幕展示静态照片
  • 屏幕回放视频

从逐帧特征,到整段视频的判断

  1. 视频采样

    可配置视频序列长度与抽帧间隔

  2. CNN 特征提取

    提取每一帧的视觉特征

  3. Transformer 时序建模

    结合位置编码与 CLS Token,建模帧序列

  4. 活体判断

    基于序列表示,完成视频级判断

模型流程示意,展示实现思路,不代表实时预测结果。

我负责的工作

开发时序模型与视频训练流程,并将活体检测与 YOLO 检测、人脸特征及表情识别整合到同一套推理流程中。

自采样本评估

使用自行拍摄的真人画面,以及照片与视频展示攻击进行测试。在开发阶段的小规模演示中,加入 Transformer 的时序模型相比当时使用的基线模型,出现的误判更少。

上述表现为开发演示中的定性观察,不作为标准测试集准确率。

技术记录

要解决的问题

只看单帧画面,很难稳定地区分真人、打印照片、屏幕中的静态照片和回放视频。视频中连续的动作变化能为活体判断提供更多依据。

我的做法

我用 CNN 提取每一帧的特征,再由 Transformer 学习帧与帧之间的变化,利用时间信息判断是否为真人。

具体实现

完成训练和视频推理流程,并把 YOLO 人脸检测、人脸特征、表情识别和活体检测整合到同一套流程中。

技术栈

使用 PyTorch;模型采用 CNN + Transformer,目标检测由 YOLO 完成。

  • 开发 CNN + Transformer 模型,输入连续视频帧,而不是单张图片。
  • 搭建视频训练流程,序列长度和抽帧间隔均可配置。
  • 使用 CLS Token 和位置编码,学习整段视频的信息及帧顺序。
  • 把 YOLO 人脸检测、人脸特征、表情识别和活体检测整合到同一套推理流程中。