资讯动态

InsightFace gaze 模块:160×160 输入一次前向回归 3D 视线向量

发布时间:2026/10/14 20:47:33 来源:尧图企业网站定制
InsightFace gaze 模块160×160 输入一次前向回归 3D 视线向量【免费下载链接】insightfaceState-of-the-art 2D and 3D Face Analysis Project项目地址: https://gitcode.com/GitHub_Trending/in/insightfaceInsightFace 的 gaze 模块负责视线估计给一张人脸图回归左右眼共 962 个 3D 眼部关键点再换算成注视向量。全程只需一次 160×160 的前向推理不单独裁剪眼睛区域。最短路径跑起来gaze 模块在reconstruction/gaze/下。克隆仓库后装依赖版本必须照 README.md 钉住git clone https://gitcode.com/GitHub_Trending/in/insightface pip install timm pytorch-lightning1.8.1 albumentations1.3.0按 README 把 481 点眼部模板eyes3d.pkl和预训练 ckpt 放进assets/然后把待测图片放进assets/images/一条命令完成推理python test_gaze.py assets/latest_a.ckpt跑完后outputs/下为每张图生成左右拼接对比图左为原图右在原图上叠加眼部 481 点网格红色线条和虹膜轮廓绿色圆圈并从双眼各画出一条黄绿色直线线的指向就是估计出的视线方向。从仿射对齐到角度输出的设计逻辑为什么输入固定 160×160 而不是原图链路第一步用 insightface 自带的检测器拿人脸框和 5 个关键点以两眼中心做仿射变换把眼部区域标准化到 160×160_size max(width/1.5, np.abs(kps[1][0] - kps[0][0])) * 1.5 # 按眼睛间距估尺度 aimg, M face_align.transform(img, center, 160, _scale, rotate) # 对齐到 160x160无论目标离镜头多远、脸偏多少网络看到的视野位置都一致保存下来的变换矩阵 M 取逆后还能把预测点云映射回原图坐标画线不偏移。见 test_gaze.py。如果不做这层对齐网络就得自己消化眼睛尺度和位置的巨大变化弱监督数据很难覆盖这种分布偏移。为什么输出头直接回归 962 个 3D 点模型侧的改造非常克制backbone 用 timm 预训练默认resnet101d分类头换成481*2*3的回归头一次吐出左右眼各 481 个点的 xyz 坐标self.backbone timm.create_model(backbone, num_classes481*2*3) # 962 个点的 3D 坐标 loss torch.abs(y_hat - y) loss[:, :, 2] * 0.5 # z 轴深度权重减半 loss torch.mean(loss) * 20.0 # 整体 L1 放大 20 倍网络不区分虹膜、瞳孔、眼睑只输出点云视线方向从点云的几何关系里反推——相当于从虹膜在眼内的相对位置反推出注视点。训练管线还配了颜色抖动、ISO 噪声、运动模糊、压缩伪影一串增强见 dataset_gaze.py模拟光照变化和拍摄抖动。见 models.py。如果不回归 3D 点云而是直接回归角度网络就失去了深度信息的约束左右眼也无法共享同一套几何。3D 点云如何换算成注视向量推理阶段取点云里的虹膜子集用虹膜中心减去眼角点均值得到注视向量再转成俯仰和偏航角p_iris eye[iris_lms_idx] - eye[:32].mean(axis0) # 虹膜相对眼角点均值 vec p_iris.mean(axis0) / np.linalg.norm(vec) # 归一化即注视方向angles_from_vec把这个向量解出 theta_x、theta_y 两个角渲染时从虹膜中心沿 sin 分量画线。注意最后一条预测用的是单眼输出而非左右眼均值单眼向量已经包含俯仰角丢掉这个分量注视向量就无法表示上下看的方向。完整逻辑在 test_gaze.py。链路时延检测有基准回归未公布gaze 模块本身没有公布定量基准耗时取决于 GPU 与输入批量仓库只以定性结果图展示。链路前半段的人脸检测倒是有明确记录指标设备 / 后端单次耗时人脸检测 160Mac mini M2CoreML/ANE0.53 ms人脸检测 320iPhone 13 A15CoreML/ANE1.32 ms人脸检测 320RTX 3060TensorRTFP162.37 ms视线估计回归未公布基准取决于 GPU 与批量数据来源Benchmark-Remark(Updating).md.md)。gaze 前向是 resnet101d 级别的网络量级上会比上表检测部分高一到两个数量级做预算时别漏掉。生产部署注意timm 版本漂移依赖清单里 pytorch-lightning 钉在 1.8.1、albumentations 钉在 1.3.0唯独 timm 没写版本。timm 跨版本会调整模型命名升级后可能找不到resnet101d或者 ckpt 加载报形状错误。处理方式是先固定一个能成功加载官方权重的 timm 版本组合跑通再动其他依赖。两个非代码文件常被漏推理依赖assets/eyes3d.pkl481 点眼部模板和预训练 ckpt两者都要按 README.md 放进assets/缺任何一个GazeHandler初始化就会挂。另外测试脚本遍历的是assets/images/目录输入图必须放在这里命令行只接受 ckpt 路径一个参数。训练数据则是 MXNet recordio 格式train.rec / train.idx想自行重训得先准备同格式数据包直接喂普通图片目录会报错。推理路径硬绑 GPUtest_gaze.py里模型和输入都写死了.cuda()纯 CPU 机器会直接报设备错误必须准备带 GPU 的环境跑。输入分辨率默认 160是代码里速度精度的平衡点调大能让远距离人脸的注视向量更准但前向耗时按比例上升。建议在目标硬件上先按默认分辨率量一遍检测加 gaze 回归的端到端时延再决定要不要上调。gaze 模块把驾驶员在看哪里从经验判断变成可复现的 3D 向量。下一步用assets/images里的样例图验证输出再量目标设备的端到端延迟。【免费下载链接】insightfaceState-of-the-art 2D and 3D Face Analysis Project项目地址: https://gitcode.com/GitHub_Trending/in/insightface创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价 →
↑