跳到主要内容

模型管理

Vision Studio 提供完整的模型管理功能,涵盖 ONNX 模型的导入、版本管理、验证测试和部署到运行时等环节。

模型管理界面

模型管理器可通过 IDE 左侧 视觉系统 面板的 模型管理 标签页进入:

┌──────────────────────────────────────────────────────────┐
│ 模型管理 [+ 导入] │
│ │
│ ┌───────────┐ ┌───────────┐ ┌───────────┐ │
│ │ 本地模型 │ │ 项目模型 │ │ 部署模型 │ │
│ └───────────┘ └───────────┘ └───────────┘ │
│ │
│ ┌──────────────────────────────────────────────────────┐│
│ │ 模型名称 │ 版本 │ 大小 │ 状态 │ 上次验证 ││
│ ├──────────────────────────────────────────────────────┤│
│ │ surface_defect │ v3 │ 24MB │ ● 已部署 │ 2026-07-20││
│ │ position_detect │ v2 │ 12MB │ ● 已验证 │ 2026-07-19││
│ │ barcode_reader │ v1 │ 8MB │ ○ 未验证 │ 2026-07-15││
│ │ anomaly_detector │ v1 │ 32MB │ ○ 未验证 │ 2026-07-14││
│ └──────────────────────────────────────────────────────┘│
│ │
│ [详情] [验证] [部署] [删除] [导出] │
└──────────────────────────────────────────────────────────┘

导入 ONNX 模型

支持的模型格式

模型类型格式输入要求输出要求
目标检测ONNX opset 11-21N×C×H×H 或 NHWC边界框 + 类别 + 置信度
图像分类ONNX opset 11-21N×C×H×W类别概率向量
语义分割ONNX opset 11-21N×C×H×WN×C×H×W 掩码
异常检测ONNX opset 11-21N×C×H×W异常分数 + 热力图

导入步骤

  1. 点击 导入 按钮,选择 ONNX 模型文件
  2. 系统自动解析模型元数据:
┌──────────────────────────────────────┐
│ 导入模型 │
│ │
│ 文件: surface_defect_v3.onnx │
│ 大小: 24.3 MB │
│ 算子集: opset 19 │
│ │
│ ┌─ 输入 ──────────────────────────┐│
│ │ images: float32[1,3,640,640] ││
│ └──────────────────────────────────┘│
│ ┌─ 输出 ──────────────────────────┐│
│ │ output0: float32[1,84,8400] ││
│ └──────────────────────────────────┘│
│ │
│ 模型名称: surface_defect │
│ 版本号: v3 │
│ │
│ [确定] [取消] │
└──────────────────────────────────────┘
  1. 确认模型名称和版本号后点击 确定
  2. 模型自动复制到项目目录的 Vision/Models/

自动解析信息

导入时系统自动解析 ONNX 模型:

信息说明用途
输入/输出张量名称、形状、数据类型自动配置算子参数
算子集版本opset 版本号兼容性检查
IR 版本ONNX IR 版本兼容性检查
模型元数据自定义 metadata模型来源追溯
输入尺寸自动检测算子输入尺寸自动填充

模型版本管理

版本命名规则

版本号格式:v + 正整数,如 v1v2v3

版本号说明示例
v1初始版本首个训练版本
v2首次迭代增加数据集、调参
v3当前版本切换模型架构

版本操作

操作说明
新建版本导入新的 ONNX 文件,版本号自动递增
回滚版本切换到历史版本,旧版本模型文件保留
对比版本对比两个版本的输入/输出、大小、性能
删除版本删除不再需要的版本(正在部署的版本不可删除)
设置默认指定默认使用的版本

版本对比

选择两个版本进行对比:

┌────────────────────────────────────────────────┐
│ surface_defect v2 ↔ v3 对比 │
│ │
│ 属性 │ v2 │ v3 │
│────────────────┼──────────────┼─────────────────│
│ 文件大小 │ 18.2 MB │ 24.3 MB │
│ 输入尺寸 │ 640×640 │ 640×640 │
│ 算子集 │ opset 17 │ opset 19 │
[email protected] │ 0.892 │ 0.935 ▲ │
│ 推理延迟 (CPU) │ 45 ms │ 38 ms ▲ │
│ 推理延迟 (GPU) │ 12 ms │ 8 ms ▲ │
│ 模型架构 │ YOLOv8s │ YOLOv8m │
│ 训练数据集 │ 5000 张 │ 12000 张 │
│ 训练日期 │ 2026-06-01 │ 2026-07-10 │
└────────────────────────────────────────────────┘

模型验证与测试

验证流程

在部署前,必须对模型进行验证:

  1. 在模型列表中选择模型,点击 验证
  2. 选择验证数据集(图像文件或目录)
  3. 系统逐张运行推理并生成验证报告

验证报告

┌──────────────────────────────────────────────────────┐
│ 模型验证报告 │
│ 模型: surface_defect v3 │
│ 验证集: 100 张图像 │
│ 日期: 2026-07-20 14:30:00 │
│ │
│ ┌─ 性能指标 ─────────────────────────────────────┐ │
│ │ 平均推理延迟: 38 ms (CPU) / 8 ms (GPU) │ │
│ │ 平均帧率: 26 FPS (CPU) / 125 FPS (GPU) │ │
│ │ 最大内存占用: 156 MB │ │
│ │ 峰值 CPU 使用率: 45% │ │
│ └────────────────────────────────────────────────┘ │
│ ┌─ 检测指标 ─────────────────────────────────────┐ │
│ │ 准确率: 97.2% │ 误检率: 1.8% │ │
│ │ 召回率: 96.5% │ 漏检率: 3.5% │ │
│ │ [email protected]: 0.935 │ [email protected]:0.95: 0.712 │ │
│ └────────────────────────────────────────────────┘ │
│ ┌─ 失败案例 ─────────────────────────────────────┐ │
│ │ #1 缺陷类型: 划痕 │ │
│ │ 图像: test_023.jpg │ │
│ │ 实际: 有划痕 预测: 无缺陷 │ │
│ │ 置信度: 0.32 (低于阈值 0.5) │ │
│ │ #2 缺陷类型: 凹陷 │ │
│ │ 图像: test_047.jpg │ │
│ │ 实际: 有凹陷 预测: 无缺陷 │ │
│ │ 置信度: 0.41 (低于阈值 0.5) │ │
│ └────────────────────────────────────────────────┘ │
│ │
│ 验证结论: ● 通过 │
│ 建议: 失败案例均为低置信度漏检,可考虑降低 │
│ 置信度阈值至 0.3 或补充训练数据 │
└──────────────────────────────────────────────────────┘

单图测试

在 IDE 中直接加载测试图像,即时查看推理结果:

  1. 在模型管理中选择模型 → 点击 测试
  2. 拖入或选择测试图像
  3. 实时显示推理结果(检测框、分类标签、置信度)
  4. 可调整置信度阈值,实时预览效果

部署模型到运行时

部署流程

模型验证通过后,可部署到运行时:

  1. 在模型列表中选择已验证的模型版本
  2. 点击 部署 按钮
  3. 确认部署目标:
┌──────────────────────────────────────┐
│ 部署模型 │
│ │
│ 模型: surface_defect v3 │
│ │
│ 部署目标: │
│ ● 当前项目 (本地) │
│ ○ 远程运行时 (192.168.3.197) │
│ │
│ 部署配置: │
│ 推理后端: GPU (CUDA) │
│ 超时时间: 5000 ms │
│ 最大并发: 2 │
│ │
│ [部署] [取消] │
└──────────────────────────────────────┘
  1. 点击 部署,系统自动执行:
步骤说明状态
1. 模型压缩ONNX 优化 (图优化、常量折叠)完成
2. 格式转换转换为运行时格式完成
3. 资源分配分配 GPU 显存 / CPU 内存完成
4. 部署验证加载模型并运行 3 次验证推理完成
5. 注册完成创建模型 Session,准备就绪完成

部署状态

状态说明图标
未部署模型已验证但未部署到运行时
已部署模型已加载到运行时,可用于推理
部署中正在部署
部署失败部署出错● (红色)
已卸载模型已从运行时卸载

远程部署

部署到远程运行时支持:

  • DarraLink 通道:通过 18821 端口传输模型文件
  • RemoteAccess 通道:通过 HTTPS 18443 传输
  • 部署验证:部署完成后自动运行 3 次推理验证
  • 回滚:部署失败自动回滚到上一个可用版本

模型文件结构

项目目录结构

<项目根目录>/
└── Vision/
└── Models/
├── surface_defect/
│ ├── v1/
│ │ ├── model.onnx # ONNX 模型文件
│ │ ├── labels.txt # 类别标签
│ │ ├── metadata.json # 元数据
│ │ └── validation.json # 最后一次验证报告
│ ├── v2/
│ │ └── ...
│ └── v3/
│ ├── model.onnx
│ ├── labels.txt
│ ├── metadata.json
│ └── validation.json
├── position_detect/
│ └── ...
└── models.index.json # 项目模型索引

metadata.json 示例

{
"name": "surface_defect",
"version": "v3",
"description": "产品表面缺陷检测模型",
"created": "2026-07-10T08:00:00Z",
"framework": "ONNX",
"opset": 19,
"architecture": "YOLOv8m",
"input": {
"shape": [1, 3, 640, 640],
"dtype": "float32",
"format": "NCHW"
},
"output": {
"shape": [1, 84, 8400],
"dtype": "float32",
"format": "NCHW"
},
"training": {
"dataset_size": 12000,
"epochs": 300,
"framework": "Ultralytics YOLO"
},
"deployment": {
"status": "deployed",
"target": "local",
"provider": "CUDA",
"deployed_at": "2026-07-20T14:35:00Z"
}
}

模型性能基准

推理延迟参考

模型类型输入尺寸CPU (i7-12700)GPU (RTX 3060)GPU (RTX 4090)
YOLOv8n640×64025 ms4 ms2 ms
YOLOv8s640×64038 ms6 ms3 ms
YOLOv8m640×64055 ms8 ms4 ms
YOLOv8l640×64085 ms12 ms6 ms
ResNet50224×22418 ms3 ms1.5 ms
EfficientNet-B0224×22412 ms2 ms1 ms

内存占用参考

模型类型模型大小推理内存 (CPU)推理内存 (GPU)
YOLOv8n6 MB120 MB200 MB (显存)
YOLOv8s12 MB180 MB300 MB (显存)
YOLOv8m24 MB280 MB500 MB (显存)
YOLOv8l44 MB450 MB800 MB (显存)

注意事项

  1. 模型输入尺寸必须与算子配置一致:导入模型时系统自动检测输入尺寸,但在算子中仍需确认
  2. GPU 显存不足时自动回退到 CPU:如果显存不足,运行时自动回退到 CPU 推理
  3. 部署前必须验证:验证通过的模型才能部署,防止生产环境加载错误模型
  4. 版本不可删除:正在部署或正在使用的版本无法删除,需先切换到其他版本
  5. 模型文件加密:部署到远程运行时,模型文件通过加密通道传输