---
title: itest
canonical_url: "https://www.modelscope.cn/models/AIBS/itest"
md_url: "https://www.modelscope.cn/models/AIBS/itest.md"
repository: AIBS/itest
last_updated: 2025-02-24
library_name:
  - onnx
  - other
frameworks:
  - other
downloads: 9
stars: 0
---

# itest

> itest - AIBS 在 ModelScope 开源的模型。0yolov8seg >模型原始工程，需要自行下载 weights >存放原始权重，需要自行下载 1scripts >若干脚本，用于保存AI编译器需要的模型、编译后仿真等功能 2compile >AI编译器编译模型时所需要的文件 3deploy >将AI编译器编译出的模型部署到硬件时需要的c++工程

- **Repository**: AIBS/itest
- **Downloads**: 9
- **Stars**: 0
- **Last updated**: 2025-02-24

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

---

# yolov8_seg

# 0. 文件结构说明

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

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

# 1. python工程准备

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

- code：https://github.com/ultralytics/ultralytics.git
- branch：main
- commit_id：437b430
- weights：https://github.com/ultralytics/assets/releases/download/v0.0.0/yolov8s-seg.pt

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

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

1）根据模型来源中的地址：https://github.com/ultralytics/assets/releases/download/v0.0.0/yolov8s-seg.pt ，下载原始weights，存放于 `/weights`文件夹中

<div style="background-color: #FFFFCC; color: #000000; padding: 10px; border-left: 5px solid #FFA500;">
注意：有时开源的weights url可能会变更。如果我们提供的weights url失效，请根据原工程相应的branch以及commit版本寻找正确的下载链接
</div>

2）根据模型来源中的地址，下载指定commit id版本的源代码，文件夹名称要设置为：0_yolov8_seg

```shell
# 在此模型根目录
mkdir 0_yolov8_seg
git clone -b main https://github.com/ultralytics/ultralytics.git 0_yolov8_seg
cd 0_yolov8_seg
git checkout 437b430
```

3）进入1_scripts执行保存模型脚本

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

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

- **环境要求：**AI compiler对**导出框架模型时**使用的**框架版本**有要求。既以下脚本中所有导出模型的脚本`1_save.py  `，必须在要求的框架版本下执行，其他脚本不限制。要求的版本：
  
  - **pytorch**：1.9
  - **paddle**： 2.3.2
  - **onnx**： opset11
  - **darknet**： [GitHub - pjreddie/darknet: Convolutional Neural Networks](https://github.com/pjreddie/darknet)
  
- 0_infer.py                      	    >可以推理一张图并得到最终结果，模型原始权重会从 `/weights	`中寻找，需要您预先下载

- 1_save.py                              >保存模型，保存好的用于AI编译器的模型，会存放在 `/2_compile/fmodel`

  <div style="background-color: #FFFFCC; color: #000000; padding: 10px; border-left: 5px solid #FFA500;">
  保存模型时的修改点：
1. 导出模型到卷积为止<br>
    </div>

- 2_save_infer.py                    >用修改后保存的模型做前向推理，验证保存的模型与原模型是否一致




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

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

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

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

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

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

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

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

  ```
  Icraft 版本:
   * 3.1.0
  
  CLI 版本:
  2.0.0.0-ce96a5d(2401311212)
  ```
  
  
  
- 3）**执行编译：**

  1. **下载量化校准集**

     ```shell
     cd 2_compile/qtset
     
     #window，第一次使用，请新建"C:\icraft_auth.txt"，保存下载站账号密码，以换行符分割
     python download.py
     
     #linux，第一次使用，请新建"/usr/icraft_auth.txt"，保存下载站账号密码，以换行符分割
     ./download.sh
     ```
     
  2. **在 `/2_compile`目录下执行编译：**
  
     ```shell
      icraft compile config/yolov8s_seg_8.toml # psin 
      # 若要部署plin工程则编译对应的plin模型
   icraft compile config/yolov8s_seg_8_plin.toml # plin 
     ```
  
      如果过程顺利，将得到 icraft model（以 `.json` （graph）`.raw`（param）的格式保存）
     
      其中包括编译各阶段产生的中间结果模型和最终用于片上部署的BY模型，直接被保存到:  3_deploy/modelzoo/yolov8_seg/imodel
  
# 3. 仿真

通过配置3_deploy/modelzoo/yolov8_seg/cfg/中yaml文件的sim字段为True实现模型仿真。
```json
imodel:
   ...
   sim: true
   ...
```

# 4. 部署模型

目的：编译c/c++可执行程序，在AI硬件上执行模型前向推理

模型库以ubuntu操作系统为例：

1. **编译环境准备**
   - os: ubuntu20.04
   - cmake>=3.10
   - compiler: aarch64-linux-gnu-g++/aarch64-linux-gnu-gcc

2. **版本依赖下载**

   此依赖主要包括icraft 运行时以及一些其他c++依赖例如opencv等，用于实现模型的部署。如果此前已经存在此版本的依赖可以不必重新下载。

   ```shell
   cd 3_deploy/Deps
   #window，第一次使用，请新建"C:\icraft_auth.txt"，保存下载站账号密码，以换行符分割
   python download.py
   #linux，第一次使用，请新建"/usr/icraft_auth.txt"，保存下载站账号密码，以换行符分割
   ./download.sh
   ```
   
3. **编译c++程序**

   ```shell
   #在3.1所需的linux编译环境中
   # 通过修改CMakeLists中的工程命名和对应的src cpp代码可以编译不同数据流的上板程序
   # 例如：修改CMakeLists使其编译pin工程
   # set(TARGET_NAME yolov8s_seg_plin) 
   # add_executable(${TARGET_NAME} src/${TARGET_NAME}.cpp)
   cd 3_deploy/modelzoo/yolov8_seg/build_arm
   cmake ..
   make -j
   
   ```
   
4. **输入输出准备**

   进入 `3_deploy/modelzoo/yolov8_seg/io`,执行下载脚本（方法同3.2），下载模型输入输出文件（输出文件可以先做备份，用于确认推理正确）
   
5. **部署环境检查**

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

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

   * 将3_deploy中所有文件夹复制到以上目录中（如果**Deps**中已经存在**相同**版本的依赖则可以不必再复制）

   * 检查icraft和customop的环境配置是否正确
   
     ```shell
     #检查icraft环境配置
     echo $LD_LIBRARY_PATH
     #检查customop环境配置
     echo $ICRAFT_CUSTOM_DIR
     ```
     * 如果环境配置正确，则会依次显示对应路径，如：   
      ```shell
      /opt/Icraft/CLIv3.1.0/lib/
      /opt/Icraft/CustomOp_v3.1.0/
      ```
     * 如果环境配置有误，请参考[3.1板上系统编译环境准备](https://gitee.com/mxh-spiger/tutorial-runtime/tree/rt3.0.0)进行部署环境配置。
   
6. **执行程序**

   ```shell
   cd /home/fmsh/ModelZoo/modelzoo/yolov8_seg/build_arm
   chmod 777 *
   ./yolov8s_seg_psin ../cfg/yolov8s_seg_psin.yaml # psin
   ./yolov8s_seg_plin ../cfg/yolov8s_seg_plin.yaml # plin
   ```

在io/output中查看结果

注意若执行plin工程则需要在开发板上接摄像头，若需要显示则需要外接显示器，查看推理结果


# 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)

  

**3.版本依赖下载**

此依赖主要包括icraft 运行时以及一些其他c++依赖例如opencv等，用于实现模型的部署。如果此前已经存在此版本的依赖可以不必重新下载。

```shell
cd 3_deploy/Deps
#window，第一次使用，请新建"C:\icraft_auth.txt"，保存下载站账号密码，以换行符分割
python download.py
#linux，第一次使用，请新建"/usr/icraft_auth.txt"，保存下载站账号密码，以换行符分割
./download.sh
```



## 2. 测试说明

1. **如果使用了icorepost硬算子**（如果未使用则忽略此条）

   - 1）修改customop toml
     customop toml 既 config\customop\xxmodel.toml

     需要将该文件中的`thr_f`配置成0.001
      ```toml
      [ImageMake]
      no_imkpad = 0
    
      [DetPost]
      thr_f = 0.001 # 阈值
      cmp_en = 1  # 是否做阈值比较
    
      groups = 3
      anchor_num = 3
      position = 5
    
      ```

   - 2）重新进行模型编译

     ```shell
     icraft compile config/yolov8s_seg_8.toml
     ```

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

2. **数据集准备**

   - 测试数据集下载：[coco2017val](http://images.cocodataset.org/zips/val2017.zip)
   - 模型测试使用COCO2017数据集的Val部分，测试图片存放于  `3_deploy\modelzoo\yolov5_7.0\io\input`及`3_deploy\modelzoo\yolov5_7.0\io\cocoval_2017.txt`中
   - 如需测试其他数据集，需自行将图片存放于`3_deploy\modelzoo\yolov5_7.0\io\input`,并准备对应的input.txt

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

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

   测试时使用：`yolov8s_seg_test.yaml`

   需要修改：

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

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

   ```shell
   cd 3_deploy/modelzoo/yolov8_seg
   mkdir build_win
   cd build_win
   cmake ..
   cmake --build . --config Release
   ./Release/yolov8s_seg_psin.exe ../cfg/yolov8s_seg_test.yaml
   ```

   注意：如果使用visualstudio打开sln进行调试，需要右键工程-属性-调试-环境中配置`./Release/yolov8s_seg_psin.exe ../cfg/yolov8s_seg_test.yaml`

5. **使用metrics测试脚本，将保存的测试结果计算出精度指标**

   - metrics测试脚本使用与配置说明：

     [yoloseg_mAP · spiger/benchmark - 码云 - 开源中国 (gitee.com)](https://gitee.com/mxh-spiger/benchmark/tree/master/yoloseg_mAP)

   需要配置

   ```
       parser.add_argument('--txtDir', required=True, help='onboard txt results path')
       #txtDir即上述，res:精度测试结果保存路径
   
    parser.add_argument('--dtJson', required=True, help='txt save to json path')
       #txt转为json后文件的保存路径及json文件命名，会自动生成，但需要配置
   ```
   
   

# 6. 模型性能记录

| yolov8_seg | input shape     | hard time      | qt_strategy     | 精度             |
| -------------- | --------------- | -------------- | --------------- | ---------------- |
| float          | [1, 3, 640, 640] | -              | -               | ap50-95(box):0.446 |
| int8           | [1, 3, 640, 640] | 9.71 ms  | None | None  |
| int16          | [1, 3, 640, 640] | 22.29 ms | None | None |
