MTMN 是一个人脸检测的轻量级模型,专门应用于嵌入式设备。它是由 MTCCN 和 MobileNets 结合而成。
MTMN由三个主要部分组成:
下图显示了MTNM的工作流程
box_array_t *face_detect(dl_matrix3du_t *image_matrix, mtmn_config_t *config);
face_detect()
函数处理整个人脸检测的任务。
函数参数—输入:
dl_matrix3du_t
类型的图像函数输出:
box_array_t
类型的值,包括 face boxes,以及每个框的 score and landmark,其中 len 表示每帧图像中人脸的数量typedef struct tag_box_list
{
fptp_t *score;
box_t *box;
landmark_t *landmark;
int len;
} box_array_t;
MTMN 的配置信息: mtmn_config_t
结构体详解,结构体中相关参数可以供用户自己修改
typedef struct
{
float min_face; /// 检测到人脸的最小尺寸
float pyramid; /// 输入图像的梯度缩放比例
int pyramid_times; /// 金字塔调整大小的时间
threshold_config_t p_threshold; /// P-Net 的阈值
threshold_config_t r_threshold; /// N-Net 的阈值
threshold_config_t o_threshold; /// O-Net 的阈值
mtmn_resize_type type; /// 图像调整大小类型. 当 'type'==FAST时,'pyramid'将失效
} mtmn_config_t;
typedef struct
{
float score; /// 置信系数的阈值。置信系数低于阈值的候选边界框将被过滤掉。
float nms; /// NMS的阈值。在非最大抑制期间,重叠比率高于阈值的候选边界框将被过滤掉。
int candidate_number; /// 允许的候选边界框的最大数量。仅保留所有候选边界框的第一个“candidate_number”。
} threshold_config_t;
min_face
的值越小,则表示以下三点,反之亦然
minpyramid_face
的值越大,则表示以下三点,反之亦然
FAST
or NORMAL
FAST
: 默认 pyramid = 0.707106781
. pyramid 值相同情况下吗,fast 类型速度更快NORMAL
:自定义pyramid 的值score
的值越大,则表示以下2点,反之亦然
score
的值越大,则表示以下2点,反之亦然
candidate_number
越大,处理时间越长candidate_number
值越大,检测到的人脸数量越多,用户可自定义以下参数:
mtmn_config.type = FAST;
mtmn_config.min_face = 80;
mtmn_config.pyramid = 0.707;
mtmn_config.pyramid_times = 4;
mtmn_config.p_threshold.score = 0.6;
mtmn_config.p_threshold.nms = 0.7;
mtmn_config.p_threshold.candidate_number = 20;
mtmn_config.r_threshold.score = 0.7;
mtmn_config.r_threshold.nms = 0.7;
mtmn_config.r_threshold.candidate_number = 10;
mtmn_config.o_threshold.score = 0.7;
mtmn_config.o_threshold.nms = 0.7;
mtmn_config.o_threshold.candidate_number = 1;
MTMN 目前为止有以下版本:
我们使用相同的配置和我们自己的测试集评估所有型号。结果如下所示。
mtmn_config.type = FAST;
mtmn_config.pyramid = 0.707;
mtmn_config.min_face = 80;
mtmn_config.pyramid_times = 4;
mtmn_config.p_threshold.score = 0.6;
mtmn_config.p_threshold.nms = 0.7;
mtmn_config.p_threshold.candidate_number = 100;
mtmn_config.r_threshold.score = 0.7;
mtmn_config.r_threshold.nms = 0.7;
mtmn_config.r_threshold.candidate_number = 100;
mtmn_config.o_threshold.score = 0.7;
mtmn_config.o_threshold.nms = 0.7;
mtmn_config.o_threshold.candidate_number = 1;
Average Time Consumption (ms) | |
---|---|
MTMN lite in quantization | 143.19 |
MTMN lite in float | 178.45 |
MTMN heavy in quantization | 242.84 |