FRMN 是一个轻量级的人脸识别模型,专门应用与嵌入式设备,由 MobileNetV2 和 ArcFace Algorithm 结合成。
FRMN模型建立在MobileNetV2上。在训练中,使用ArcFace算法,而不是传统的Softmax函数和交叉熵损失函数。为了降低计算复杂性,在训练中使用了较小尺寸(56x56)的图像。
以下步骤是人脸识别的整个过程:
1.获取输入图像,类型为320x240分辨率。
2.启动人脸识别并获取面部 的landmark
关键信息坐标。
3.使用“landmark
关键信息坐标,对齐面部信息,并获得面部图像的规格。align_face
4.将对齐的面部图像输入到人脸识别算法,并生成Face IDget_face_id
和recogze_face
5.将新生成的 face id 和现有的 face ids进行比较,然后获取两个face id之间的距离(通常为欧几里德距离或余弦距离)
6.通过比较这两个face ID之间的距离和指定阈值,确定这两个 face ID是否来自同一个人。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-gyPi9oqp-1669881214820)(…/img/face-recognition-system.png)]
FACE_REC_THRESHOLD
: 人脸识别阈值,默认配置为“0.7”并以余弦距离测量。
NOSE_EYE_RATIO_THRES_MIN
: 鼻子与左眼距离和鼻子与右眼距离的 最小比率的阈值。
NOSE_EYE_RATIO_THRES_MAX
:鼻子与左眼距离和鼻子与右眼距离的 最大比率的阈值。
FLASH_INFO_FLAG
: ID数据标志。每当此标志打开时,ID数据存储在 flash中
FLASH_PARTITION_NAME
: 存储face ID的 flash 分区的名称,该名称与csv文件分区中使用的名称相同。
目前为止有五种可供选择的模型:
准确率: MFN56_4X > MFN56_3X > MFN56_2X > MFN56_1X > FRMN
Model | FRMN | MFN56_1X | MFN56_2X | MFN56_3X | MFN56_4X |
---|---|---|---|---|---|
Function | frmn_q | mfn56_42m | mfn56_72m | mfn56_112m | mfn56_156m |
Size | 1.2MB | 1.6MB | 2.0MB | 2.4MB | 3.7MB |
Time | 363ms | 455ms | 738ms | 1150ms | 1540ms |
使用 Face Recognition Lib 时的注意事项:
输入图像的格式必须为 56x56
的RGB 图像。使用其他尺寸的图像可能会降低正确识别率
调用align_face()
函数开始人脸对齐(face alignment),调用函数之后,使用对齐的图像进行人脸识别
若想使用 frmn_q()
函数生成 face ids
,请首先使用 transform_frmn_input()
函数使输入图像标准化并固定指向。
cos_distance()
和euclidean_distance()
这两个函数分别用于计算两个 face ids 的距离,分别以余弦距离和欧几里德距离表示。
若想在flash中存储 face id,而不是在 ram中,请先配置好 flash 分区的csv文件, partitions.csv文件
存储在 ram 中的数据采取 face_id_list
的格式,而存储在 flash 中的数据格式如下:
0-31B信息,检查flash中的内容
32-39B Len,用于指示flash中ID的数量
40-4095B预留
每个id需要2KB,从4096B开始