去年下半年我接了一个边缘端人脸识别的小项目,需求很直接:在低功耗设备上离线跑人脸检测,还要能输出人脸关键点,而且关键点不能像老方案那样只有5个或者68个,客户明确要求能支持更细的面部特征定位,最后定下来就是“瑞芯微 + EASY EAI + RV1126B + 人脸98关键点算法识别”这套组合。拿到板子之前我也纠结过要不要直接用RV1106或者RK3568,但对比一圈之后发现RV1126B的性价比和易用性最适合这个场景。这篇文章就是我从拿到开发板、搭SDK环境、转模型到最终在板子上跑通98点识别的完整记录,里面包含我踩过的坑、调过的参数和实测数据,希望对正在做同类项目的朋友有参考价值。
1. 项目背景与方案选型:为什么是RV1126B + 98点
1.1 芯片选型背后的逻辑
人脸关键点识别这个需求,听起来简单,但真正落到边缘端就牵扯到几个硬约束:算力够不够、内存够不够、摄像头接口好不好调、整机功耗能不能压住。我一开始看的是RV1106,这颗芯片便宜是真便宜,但NPU算力只有0.5 TOPS左右,跑一个人脸检测就吃掉大半算力,再叠加98关键点模型,帧率很难看。再看RK3568,算力是够,但芯片面积、外围成本、DDR配置都往上走,对一个做单目视觉的产品来说有点浪费。RV1126B属于中间态,NPU算力大约2 TOPS(INT8),虽然不及更高端的RK3588,但在2~3W这个功耗段里已经能扛住两个模型串行推理。它还带ISP,直接接MIPI摄像头做图像预处理很省事,这点在做人脸类应用时非常重要,因为人脸识别的效果好坏,光线好不好、图像清不清晰占了很大权重。
细看RV1126B这颗芯片,实际上它在RV1126的基础上做了DDR内置整合,部分型号直接片内集成128MB DDR,这样硬件设计的难度降了一截,不需要像RK3568那样外挂DDR颗粒,Layout和成本都友好很多。当然代价是内存有限,跑大模型容易OOM,所以模型必须严格控制参数量和输入分辨率。这个特性决定了我们在选算法模型时,不能用那种动辄上百MB的“大而全”网络,而是要走轻量化路线,用蒸馏出来的人脸检测网络加轻量关键点网络。
1.2 为什么关键点要选98点
行业里比较常见的方案是68点(dlib经典方案)、106点(部分商用SDK习惯)、468点(MediaPipe Face Mesh),以及98点。我这次选98点,主要是基于精度和算力的平衡。68点对眉毛、眼睛轮廓的描述比较粗,遇到大幅度侧脸或者夸张表情时,轮廓贴合度明显不够;468点虽然效果细腻,但参数数量和计算量都上来了,在RV1126B这种2T算力的芯片上,实时性会变得很紧张。98点这个粒度介于两者之间,能比较准确地描述眼睛、眉毛、鼻子、嘴唇和脸部轮廓,同时模型参数量可以控制在几MB级别,INT8量化之后基本不影响实时性。
实际项目中,我参考了公开的WFLW数据集标注习惯,这个数据集本身就是98点标注,训练资源也相对好找。如果你手头有自定义需求,比如要在特定点位(眼角、嘴角、鼻尖)做业务逻辑判断,98点也可以在这几个区域提供足够多的候选点,方便做局部坐标插值。
1.3 EASY EAI开发套件的价值
EASY EAI是围绕瑞芯微方案做开发套件的厂商,我拿到的是EASY EAI推出的RV1126B评估板。这类套件最大的价值不是板子硬件本身,而是它帮你把很多底层的“脏活”提前趟了一遍:DDR初始化配置、MIPI摄像头驱动、WIFI/BT模组适配、SDK版本对齐等等。如果你直接用瑞芯微原厂的公板或者自己画板,光Bring Up外设就要花不少时间。对算法工程师来说,EASY EAI这种套件可以让我们把精力集中在模型和业务代码上,而不是先花两周解决摄像头I2C读不到寄存器的问题。
倒不是说原厂SDK不好,而是原厂SDK默认面向方案商,U-Boot、内核、Buildroot里要改的
