---
title: MPIIGaze
canonical_url: "https://www.modelscope.cn/models/AIBS/MPIIGaze"
md_url: "https://www.modelscope.cn/models/AIBS/MPIIGaze.md"
repository: AIBS/MPIIGaze
last_updated: 2026-03-13
library_name:
  - pytorch
frameworks:
  - Pytorch
downloads: 2
stars: 0
---

# MPIIGaze

> MPIIGaze - AIBS 在 ModelScope 开源的模型。本分支上的模型库文件与 icraft3.31.0 版本适配，部署时对应使用 25060601 版本位流，硬件后端 仅 支持 BUYI，即：

- **Repository**: AIBS/MPIIGaze
- **Downloads**: 2
- **Stars**: 0
- **Last updated**: 2026-03-13

Source: https://www.modelscope.cn/models/AIBS/MPIIGaze

---

# MPIIGaze
![version](https://img.shields.io/badge/icraft_ver-3.31.0-gold?style=flat&logo=data:image/png;base64,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)  ![author](https://img.shields.io/badge/author-ylm-blue)<br>![metrics](https://img.shields.io/badge/metrics-OK-green?style=flat&logo=data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADwAAAA8CAYAAAA6/NlyAAAAAXNSR0IArs4c6QAAAAlwSFlzAAAPYQAAD2EBqD+naQAABLZJREFUaEPtmmnIpWMYx39/+75lyy6ELGNohA8GIUvEB6RBtomYmhhDIlskkmUSWcLIyDKU9QOy88FSjCIylmSZsoxl7OPSf7pOPY7zvs8573Oa55x3nqveOr33fT/P/buv5f7f9zliGTMtY7w0wOPd442HGw+PsxVoQrrdoRGxOrBN4f8LJC0YVseXejgidgXeLQBeJ2lmAzwkK9B4uEMONyFdlsMRsTywPrAKsFDSj4MS8X0P6YjYCJgK7A2sCnwPvAA8IOm7usH7ChwRWwNP5DZm79oC+BV4EjhT0sI6ofsGHBGbA48Du40C9DRwvKSf6oLuC3BErAlcDpwNrJQw3wBfALtkLrcY7wBmSPq5Duh+Ae8P3AVslRBfA1cCLwJHARcAa2WbvTvD/SX9s7ShKwNHhHP1UuB8YDngb8BenClpUUpTA18IrJA5/TpwmqQPhxF4U+Clgt52KB8p6c0WTETY83cCB8CSWxYvihdhliR/7tkiwou3WJKLYtfWDw87ZB9J7/rFDwJTJC0uziIipgC3FELb+vxQSQ7/ri33+B2BycDcXg8y/QA24LGFGR8s6dl2gohYA3gUOCjbvCAO69nd0kbE2sAprvTAzsCNki7qdrz7VQLO1bawaBWkz4HtJP3VaRIR4eL2fKFtnqQJZROOCM/THr0W2AlYLcf8Buwj6Z2yZ7TaqwLvAbxVeNlsSSeP9vKIeAOYVOgzWdLLIyyQ89Q14hzgdMBn83bzTuDU+L0b6KrAnsj1hRcdJ+mhEuCTgLsLOX8PcGqn4hMRvni4DDgEWK8wpviKX4Bzc5v7T93oNI+qwI+5IueDvb9OkvRRCbAVmbV16xblE2BfSV92yHunypb5t316eYe2fq7Sr7mtm22uKrDDbU9gIrAucImkH0qArcpmAa3Qt+KaJuneknEOb4e+DyW2RYAXy0ruT+Bi4CZJ/jyiVQLuJmc6eM3vPCHFycrZPicr9h8jPTMivLjO/02yj/f5w1PIuPLb8zeUHU6WOrAnGxG7A85de8f2nrcbSW+PAnwE4ChYJ/vclprcnu7a6gL2nmwRYjFiOeoKa319eyflFRHuc1X2WTFDeLqjpF3glJHXApxePibD2mLC9ipwtKRvO6TBZnk4aYmW+RkRr5QBtrfXCezi5SJUPD+fKOm+4iRTdByWWnzjbPO52irNur0nqw04vWxJej/gOzDbp8CBklx9l1ietq4Bzkpl6PD30fPqsRwv6wb20XJuVtsWo/X2VEmWrAbeLw8kG2aHr6zHJb3fk2uzc63ACWRt/Exhu/HWdGsqLIew78K2LcDdDEwfi3f9jEEA9pXQtAxT33IuWYcM7w0A53rLHPITq1z71g6cXjbYFdbUhTux9oj9LBXZU2MJ5daYgQBO6C3ymuiMvAoqcn2cIf5wmXQsW4yBAU5oC5K9gPPyCGld/lyKlA9GOmeXQRbbBwq4l4mPtW8D3L5yzRfi0PwCYKz5VMe4JoebHP7/r3h8teKvVgbRXF9G/UnVWEJ6EEFbc5ogad5oE2yAu8jhce9hX6X6EnwYbL6/k64U0sNA2cscS3O4l4cNQ98GeBi8VGWOjYerrN4wjG08PAxeqjLHfwG92SNbyY+y8QAAAABJRU5ErkJggg==)  ![speed](https://img.shields.io/badge/speed-OK-green?style=flat&logo=fastapi)<br>![OS](https://img.shields.io/badge/OS-Windows%20%7C%20Ubuntu-green)



本分支上的模型库文件与 ***icraft3.31.0*** 版本适配，部署时对应使用 ***25060601*** 版本位流，硬件后端 **仅** 支持 ***BUYI***，即：

1. 模型`2_compile/config`目录下 **仅支持** 编译 ***`BY`*** 文件夹下的toml文件；
2. 模型`3_deploy/modelzoo/MODEL/cfg`目录下的yaml文件中， **`run_backend`** 字段 **仅支持** 配置为 ***`host`*** 或 ***`buyi`*** 。



# 0. 文件结构说明

AI部署模型需要以下几部分文件

- 0_MPIIGaze    >模型原始工程，需要自行下载
- weights              >存放原始权重，需要自行下载
- 1_scripts            >若干脚本，用于保存Icraft编译器需要的模型、编译后仿真等功能
- 2_compile          >Icraft编译器编译模型时所需要的文件
- 3_deploy            >将Icraft编译器编译出的模型部署到硬件时需要的c++工程

# 1. python工程准备

## 1. **模型来源：**

- code：https://github.com/hysts/pytorch_mpiigaze.git
- branch：master
- commit_id：2a31a6c
- weights：https://github.com/hysts/pytorch_mpiigaze_demo/releases/download/v0.1.0/mpiigaze_resnet_preact.pth

## 2. **保存模型**

**目的：将模型保存成可以被Icraft编译器编译的形态**

1）根据模型来源中的地址：https://github.com/hysts/pytorch_mpiigaze_demo/releases/download/v0.1.0/mpiigaze_resnet_preact.pth ，下载原始weights，存放于 `/weights`文件夹中

<div style="background-color: #FFFFCC; color: #000000; padding: 10px; border-left: 5px solid #FFA500;">
注意：

* 有时开源的weights url可能会变更。如果上述weights url失效，请根据原工程相应的branch以及commit版本寻找正确的下载链接
* 若上述weights url永久失效，请联系本模型库相关人员获取权限下载
</div>
2）根据模型来源中的地址，下载指定commit id版本的源代码，文件夹名称要设置为：0_MPIIGaze

```shell
# 在此模型根目录
mkdir 0_MPIIGaze
git clone -b master https://github.com/hysts/pytorch_mpiigaze 0_MPIIGaze
cd 0_MPIIGaze
git checkout 2a31a6c
```

3）根据源码readme构建环境，进入0_MPIIGaze/，打开wsl环境，运行`bash scripts/download_dlib_model.sh`下载`shape_predictor_68_face_landmarks.dat`，下载好后该文件会放在0_MPIIGaze/data/dlib/目录下。

4）将1_scripts中的脚本复制到0_MPIIGaze路径下，在0_MPIIGaze路径下执行保存模型脚本，会将保存好的模型放在2_compile/fmodel路径下。

```shell
# 在此模型根目录
cd 0_MPIIGaze
python 1_save.py
```

**1_scripts提供脚本说明：**

- **环境要求：**Icraft编译器对**导出框架模型时**使用的**框架版本**有要求。即以下脚本中所有导出模型的脚本 `1_save.py  `，必须在要求的框架版本下执行，其他脚本不限制。要求的版本：

  - **pytorch**：支持pytorch1.9.0、pytorch2.0.1两个版本的原生网络模型文件（.pt格式），以及pytorch框架保存为onnx（opset=17）格式的模型文件（.onnx格式）
  - **paddle**：仅支持PaddlePaddle框架保存为onnx（opset=11）格式的模型文件（.onnx格式），不支持框架原生网络模型文件
  - **darknet**：支持Darknet框架原生网络模型[GitHub - pjreddie/darknet: Convolutional Neural Networks](https://github.com/pjreddie/darknet)
- 0_infer.py                      	    >可以推理一张图并得到最终结果，模型原始权重会从 `/weights	`中寻找，需要您预先下载
- 1_save.py                              >保存模型，保存好的用于Icraft编译器的模型，会存放在 `/2_compile/fmodel`

  <div style="background-color: #FFFFCC; color: #000000; padding: 10px; border-left: 5px solid #FFA500;">
  保存模型时的修改点:<br>
    原模型输入为两张灰度眼图拼接后的结果[2,1,36,60]，但Icraft generate不支持此类b=2的情况，因此将输入拆分为[1,1,36,60]，左右眼图分别跑两次前向。</div>
- 2_save_infer.py                    >用修改后保存的模型做前向推理，验证保存的模型与原模型是否一致

# 2.使用Icraft编译器编译模型

目的： 使用[Icraft编译器](https://gitee.com/mxh-spiger/icraft-introduction.git)将上一步保存好的**框架模型**转化为**硬件可部署模型**

- **1）相关命名说明：**

  1）**fmodel**：frame model         			>用于Icraft编译器的框架模型

  2）**imodel**：icraft model				   >用Icraft编译器编译出的模型

  3）**qtset**：Quantitative Calibration Set	  >Icraft编译器所需的量化校准集
- **2）确认已安装正确的icraft版本**

  检查方法：打开cmd运行：`icraft --version`

  若已正常安装则会显示当前icraft版本，例如：

  ```
  Icraft 版本:
   * 3.31.0
  
  CLI 版本:
  3.31.0.0-8639261(2507031119)
  ```
- 3）**执行编译：**

  **在 `/2_compile`目录下执行编译：**

     ```shell
      icraft compile config/BY/MPIIGaze_8.toml
     ```

     如果过程顺利，将得到 icraft model（以 `.json` （graph）`.raw`（param）的格式保存）

     其中包括编译各阶段产生的中间结果模型和最终用于片上部署的BY模型，直接被保存到:  3_deploy/modelzoo/MPIIGaze/imodel

# 3. 仿真

通过配置3_deploy/modelzoo/MPIIGaze/cfg/中yaml文件的`run_backend`字段为`host`实现模型仿真。

```yaml
imodel:
  ...
  run_backend: host
  ...
```

# 4. 部署模型

## 部署环境检查

   * 以root账户登录片上系统terminal（ssh或串口皆可），模型库默认的模型存放路径为以下目录，如果没有请预先创建：

   ```
   /home/fmsh/ModelZoo/
   ```

   * 检查板上环境是否正确：
      1. 查看环境变量，指令：
         `icraft --version`

         看打印信息是否如下：

         ```shell
         Icraft 版本:
         * v3.31.0

         CLI 版本:
         3.31.0.0-8639261(2507031119)
         ```
      
      2. 若是，在任意目录下输入`icraft-serve`即可打开server

      3. 检查icraft和customop安装包版本是否为`arm64`

         ```shell
         # 检查icraft安装包版本
         dpkg -l | grep icraft
         # 检查customop安装包版本
         dpkg -l | grep customop
         ```

         如果依次显示如下信息，则安装版本正确：

         ```shell
         ii  icraft                         3.31.0                             arm64        This is Icraft for arm64
         ii  customop                       3.31.0                             arm64        This is Icraft CustomOp for arm64
         ```
      
      4. 如果环境配置有误，请参考[Part 1_1 2.3.1 ARM-Linux（片上系统环境） 编译环境准备](https://gitee.com/mxh-spiger/tutorial-runtime/blob/tt3.30.0/docs/Part%201_1%20quick-start.md#1%E7%BC%96%E8%AF%91%E7%8E%AF%E5%A2%83%E5%87%86%E5%A4%87-2)进行部署环境配置。

      5. 根据此模型使用的硬算子，选择合适的位流，并在板上安装，所用硬算子及可选位流版本可参见本说明文档起始处的状态徽章，位流下载及安装说明请参考[1/4) 其他下载资源](https://gitee.com/mxh-spiger/icraft-introduction/tree/icraft_v3.31.0/#4%E5%85%B6%E4%BB%96%E4%B8%8B%E8%BD%BD%E8%B5%84%E6%BA%90)。

## python  runtime:


目的：在AI硬件上执行模型前向推理

1. **python运行虚拟环境要求与准备**

   - python版本：3.8（否则无法使用icraft的python API）

   - 在0_MPIIGaze的python运行虚拟环境中icraft的python安装包：`pip install icraft-3.x.x-cp38-none-win_amd64.whl`

   - 确保已安装icraft的python安装包

     - socket模式使用：`pip install icraft-3.x.x-cp38-none-win_amd64.whl`
     - axi模式使用：`pip install icraft-3.x.x-cp38-none-manylinux2014_aarch64.whl`

   - 运行工程前，需手动将0_MPIIGaze/data/dlib路径下的shape_predictor_68_face_landmarks.dat文件拷贝到3_deploy/modelzoo/MPIIGaze/pyrt/data/dlib路径下。
  
   - 在选定的python运行虚拟环境中安装python运行时所需要的依赖包

     ```
     cd 3_deploy/modelzoo/MPIIGaze
     pip install -r requirements.txt
     ```

   - 安装一些便于开发pyrt的依赖包

     ```
     cd 3_deploy/Deps/modelzoo
     pip install -e .
     ```

     <div style="background-color: #FFFFCC; color: #000000; padding: 10px; border-left: 5px solid #FFA500;">
     1.由于python运行时代码在引入依赖包时候已经通过sys.path.append(R"../../../Deps/modelzoo")将一些便于开发pyrt的依赖包加入到了系统路径下，因此可以不用执行该步骤即可直接运行2.执行程序。这里提供额外的[pip install -e .]安装方式是为了在python运行时代码时候方便进行pyrtutils的依赖跳转。

2. **执行程序**

   （1）**MPIIGaze_psin.py部署的是源码中的demo.py**，即从相机拍摄的图像=》dlib人脸&关键点检测=》视线估计网络的过程；**运行前需确保已安装好0_MPIIGaze readme中所需环境，该工程依赖于0_MPIIGaze中的gaze_estimation**，其Icraft-python运行时工程执行方法如下：
   
   ```
   # Windows系统下：
   python ./MPIIGaze_psin.py ../cfg/MPIIGaze.yaml
   # Linux系统下：
   python icraft_launcher.py ./MPIIGaze_psin.py ../cfg/MPIIGaze.yaml
   ```
   
   可在io/output中查看结果。
   
   （2）**MPIIGaze_psin_test.py部署的是源码中的evaluate.py**，即将MPIIGaze数据集中裁剪好的人眼图像&pose直接输入视线估计网络，输出视线估计结果&精度指标；本工程中的io文件夹中提供预处理好的p00的测试集。如需测试其它人物，**可自行下载MPIIGaze数据集，并按照0_MPIIGaze中的readme中数据预处理的方法先处理原始数据集**。
   
   MPIIGaze数据集下载&预处理命令如下：
   
   ```
   cd 0_MPIIGaze
   bash scripts/download_mpiigaze_dataset.sh
   python tools/preprocess_mpiigaze.py --dataset datasets/MPIIGaze -o datasets/
   ```
   
   Icraft-python运行时工程执行方法如下：
   
   ```
   # Windows系统下：
   python ./MPIIGaze_psin_test.py ../cfg/MPIIGaze_psin.yaml
   # Linux系统下：
   python icraft_launcher.py ./MPIIGaze_psin_test.py ../cfg/MPIIGaze_psin.yaml
   ```
   
   可在io/output中查看精度测试结果。



# 5. 精度测试

<div style="background-color: #FFFFCC; color: #000000; padding: 10px; border-left: 5px solid #FFA500;">
由于精度测试需要遍历一个数据集中的所有图片，因此需要使用上位机作为主控操作系统（demo中是按windows作为上位机操作系统来做的），使用网口连接板子，运行时输入数据会通过上位机经由网口传到片上进行推理。
</div>

## 1. 环境准备

若已准备好环境请跳过此部分

**1. 网口调试环境准备**（如果已经准备好网口调试环境则看下一条）

1. 安装ssh

2. 查看或配置板子ip

   - 使用串口连接板子
   - `vim  /etc/rc.local`
   - 查看或设置ip

   ```
   #!/bin/bash
   ifconfig eth0 192.168.125.171 netmask 255.255.255.0
   systemctl start sshd
   ```

3. 修改本地网络适配器配置

   参考配置

   - ipv4地址：`192.168.125.2`
   - 子网掩码：`255.255.255.0`
   - 默认网关：`192.168.125.1`
   - 连接速度与双工：100mbps全双工

4. 使用网口或串口进入板上系统打开server

   上位机：

   ```cmd
   ssh root@192.168.125.171
   ```

   板上：
   确保位于root账户下，执行：

   ```shell
   icraft-serve
   ```

   - 请确保在root账户下执行上述命令
   - 设备成功打开示意图

   ```
   root@U:~# icraft-serve
   [02/22/24 02:02:00.388] [I] Using port : 9981
   [02/22/24 02:02:00.388] [I] synchronous mode
   [02/22/24 02:02:00.388] [I] [irpc::port::tcp::_waitNewConn] wait for new connection
   ```

   如果能正确运行则可以继续下一步。

**2.编译环境准备**

请参考[2.1Windows编译环境准备](https://gitee.com/mxh-spiger/tutorial-runtime/tree/rt3.0.0)进行精度测试环境配置。

- os: windows
- [cmake3.28](https://github.com/Kitware/CMake/releases/download/v3.28.1/cmake-3.28.1-windows-x86_64.msi)
- [visualstudio2022](https://visualstudio.microsoft.com/zh-hans/thank-you-downloading-visual-studio/?sku=Community&channel=Release&version=VS2022&source=VSLandingPage&passive=false&cid=2030)

## 2. 测试说明

1. **重新编译模型**

   - 1）由于源码工程未提供精度测试的预训练模型，可运行0_MPIIGaze/train.py训练模型，也可使用已重训好的权重`checkpoint_0040.pth`

   - 2）使用checkpoint_0040.pth权重重新运行1_save.py，导出模型

   - 2）重新进行模型编译

     ```shell
     icraft compile config/BY/MPIIGaze_8.toml
     ```

     由于测精度程序由上位机控制，生成的imodel不用再复制到板子中

2. **数据集准备**

- 测试数据集下载：http://datasets.d2.mpi-inf.mpg.de/MPIIGaze/MPIIGaze.tar.gz
- 模型测试使用MPIIGaze数据集的`p00`作为测试集，将下载下来的数据集MPIIGaze存放于  `3_deploy\modelzoo\MPIIGaze\io\datasets`中，并解压到当前文件夹

3. **修改 运行时的yaml配置文件**：

   运行时需要配置一些模型路径，输入数据，后处理参数等，其配置文件在 `cfg/MPIIGaze_test.yaml`

   测试时使用：`python ./MPIIGaze_psin_test.py ../cfg/MPIIGaze_test.yaml`

   需要修改：

   * imodel中参数：修改精度测试所用模型文件路径`dir`，根据所使用板子ip设置`ip`。
   * dataset中参数：更改自己的精度测试数据集路径。
   * param中参数：如果模型没有重训，则无需更改，若 重训则需要修改对应部分参数。

4. **编译、执行运行时程序**

python运行时：

```
cd 3_deploy/modelzoo/MPIIGaze/pyrt
# Windows系统下：
python ./MPIIGaze_psin_test.py ../cfg/MPIIGaze_test.yaml
# Linux系统下：
python icraft_launcher.py ./MPIIGaze_psin_test.py ../cfg/MPIIGaze_test.yaml
```

程序结束自动计算出精度指标angle_error，并记录在MPIIGaze_metrics.log中



# 6. 模型性能记录

| MPIIGaze | input shape      | hard time       | qt_strategy      | angle_error  |
| --------------- | ---------------- | --------------- | ---------------- | ----------------- |
| float           | [1, 1, 36, 60] | -               | -               | 5.24° |
| int8            | [1, 1, 36, 60] | 0.0965ms  | null-pt | 4.76° |
| int16           | [1, 1, 36, 60] | 0.1275ms | null-pt | 4.78° |
