跳到主要内容

训练 Segmenter

本指南介绍如何设置和配置 OV80i segmentation 功能,以自动检测、测量并分析工件上的特定特征或缺陷。需要识别不规则形状、进行面积测量或检测无法通过简单分类处理的特定模式时,请使用 segmentation。

视频指南

在实践中查看本主题的效果: 如何在几分钟内创建 segmentation 配方

何时使用 Segmentation: 需要像素级精度的场景,如表面缺陷、液体泄漏、形状不规则、面积测量、模式检测,或任何需要高精度特征分析的情况。

开始前

您需要什么

  • OV80i 相机系统已设置并连接
  • 带有要分割特征的测试件(例如带铅笔痕迹的薄片)
  • 适用于您具体应用的良好照明条件
  • 15-20 张用于训练的示例图像

第 1 步:创建 Segmentation 配方

1.1 开始新配方

  1. 导航到 All Recipes 页面
  2. 点击 + New Recipe(右上角)

新建配方按钮

  1. 输入配方名称: 使用描述性名称,例如 "Pencil_Mark_Detection" 或 "Surface_Defect_Segmentation"
  2. 选择配方类型: 从下拉菜单中选择 "Segmentation"
  3. 点击 OK 以创建

1.2 激活配方

  1. 在列表中找到你的配方(显示为 "Inactive")
  2. 点击 Activate
  3. 点击 Activate and go to editor 以确认并启动配方编辑器

激活配方按钮

结果: 配方现在为 "Active",且显示配方编辑器。

第 2 步:配置相机设置

2.1 打开成像配置

  1. 点击 Configure Imaging(左下角)

配置成像

2.2 为 Segmentation 优化对焦

对焦对于准确的边缘检测至关重要:

  1. 在相机视图中放置测试件
  2. 调整对焦,直到边缘清晰锐利
  3. 用不同的工件进行测试,确保在范围内对焦一致
提示
  • 将焦点放在缺陷/特征将出现的表面
  • 确保感兴趣区域的整个区域处于清晰对焦
  • 略微过锐优于软焦,以实现 segmentation 的更好效果

2.3 设置最优曝光

正确曝光可确保特征检测的一致性:

  1. 调整曝光以实现均衡照明
  2. 避免过曝区域(纯白区域)
  3. 确保特征在良好对比度下可见

Segmentation 曝光指南:

  • 特征应与背景具有清晰对比
  • 避免阴影被误认为缺陷
  • 使用各种工件条件(干净、污脏、磨损)进行测试

2.4 配置 LED 照明模式

根据要分割的对象选择照明:

特征类型推荐照明原因
表面缺陷明场照明均匀光照可显示表面不规则性
划痕/裂纹侧光产生阴影,突出线性缺陷
凸起特征暗场照明使凸起区域从背景中突出
液体溢出侧光显示表面纹理差异

2.5 调整 Gamma 以提升特征对比

  1. 增大 Gamma 以增强特征与背景之间的对比度
  2. 在查看目标特征时测试不同数值
  3. 找到设置 使特征最易区分

2.6 保存配置

  1. 在实时预览中查看设置
  2. 点击 Save Imaging Settings

保存设置

检查点: 特征应在对比度良好的情况下清晰可见。

Step 3: Set Up Template and Alignment

3.1 导航至模板部分

在面包屑菜单中点击 "Template Image and Alignment"

3.2 配置对齐(可选)

模板与对齐

本示例将跳过对齐:

  1. 选择 Skip Aligner 如果部件位置始终一致
  2. 点击 Save

模板图像

何时使用对齐器: 当零件以多样的位置或方向到达,可能影响分割准确性时应启用。

Step 4: Define Inspection Region

4.1 Navigate to Inspection Setup

点击 "Inspection Setup" 在面包屑菜单中

4.2 Set Region of Interest (ROI)

ROI 定义分割将发生的位置:

  1. 在相机视图中放置一个测试件
  2. 拖动 ROI 的角点 以框定检查区域
  3. 适当设置 ROI 大小:
    • 包括可能出现特征的所有区域
    • 排除不必要的背景区域
    • 在预期特征位置周围留出小缓冲区

ROI 设置

4.3 用于分割的 ROI 最佳实践

不要
覆盖整个检查表面包含无关的背景对象
在边缘留出缓冲空间让 ROI 太小以致特征变化无法覆盖
考虑部件定位变化与夹具或工具重叠
使用最大的预期特征进行测试包含具有永久标记的区域

4.4 保存 ROI 设置

  1. 验证 ROI 覆盖所有目标区域
  2. 点击 Save

Step 5: Label Training Data

5.1 导航至 Label And Train

点击 "Label And Train" 在面包屑菜单中

5.2 配置 Inspection Class

  1. 在 Inspection Types 下点击 Edit
  2. 将类别重命名以匹配您的特征(例如 "Pencil Mark"、"Surface Defect"、"Spill Area")
  3. 为可视识别选择类别颜色
  4. 保存更改

5.3 捕捉并标注训练图像

您至少需要 10 张标注图像,建议 15-20 张:

图像采集过程

  1. 将第一件测试件放置在检查区域
  2. 使用相机界面拍照
  3. 使用画笔工具覆盖目标特征
  4. 准确涂抹:
    • 覆盖整个特征区域
    • 保持在特征边界内
    • 不要涂抹背景区域
    • 使用一致的标注方法
  5. 点击 Save Annotations
  6. 对下一个部件重复上述步骤

Label and Train

标注最佳实践

良好标注差标注
精确的特征边界边缘涂抹不清
一致的特征定义不一致的判定标准
完整的特征覆盖范围缺失的特征区域
干净背景(未涂色)背景意外涂色

5.4 训练数据多样性

确保你的训练集包括:

  • 不同的特征尺寸
  • 不同的特征强度
  • ROI 内的多个位置
  • 不同的照明条件(如适用)
  • 边界情况和边界示例

5.5 训练数据质量检查

  1. 审阅所有标注图像
  2. 验证一致的标注方法
  3. 删除任何标注错误的示例
  4. 如有需要,添加更多示例

Step 6: 训练分割模型

6.1 启动训练流程

  1. 点击 Return to Live,标注完成后
  2. 点击 Train Segmentation Model

开始训练

6.2 配置训练参数

  1. 设置迭代次数:
    • 快速训练: 50-100 次迭代(5-10 分钟)
    • 生产质量: 200-500 次迭代(15-30 分钟)
    • 高精度: 500 次及以上迭代(30 分钟以上)
  2. 点击 Start Training

6.3 监控训练进度

训练进度显示:

  • 当前迭代次数
  • 训练准确度百分比
  • 预计完成时间

训练进度

训练控制:

  • 中止训练:如出现问题时停止
  • 在达到目标准确度时提前结束训练:当准确度达到目标时停止

训练控制界面

提示
  • 在生产环境中,85% 的准确度通常较好
  • 训练会在达到目标准确度时自动停止
  • 更多的训练数据通常比增加迭代次数更有效

Step 7: 测试分割性能

7.1 访问实时预览

  1. 点击 Live Preview,训练完成后
  2. 使用各种零件进行测试:
    • 已知良品(应几乎不显示分割或无分割)
    • 已知不良品(应突出缺陷)
    • 边缘情况和边界示例

实时预览

7.2 评估结果

检查分割质量:

指标良好表现需要改进
准确性能稳定发现真实特征易错过明显特征
查准率极少误报大量背景区域被高亮
边缘质量边界干净、准确边缘粗糙或不准确
一致性重复测试结果相近结果高度不稳定

7.3 解决差结果

问题可能原因解决方案
缺失特征训练数据不足增加更多标注样本
误报光照/对比度差提高成像设置
边缘粗糙图像质量差提高对焦/光照
结果不一致训练多样性不足增加更多多样化样本

步骤 8:配置通过/不通过 逻辑

8.1 访问 IO Block

  1. 确保 AI 模型显示为绿色(训练完成状态)
  2. 通过面包屑导航进入 IO Block

8.2 删除默认逻辑

  1. 删除 Classification Block Logic 节点
  2. 准备构建自定义 segmentation 逻辑

8.3 构建 segmentation 流程

创建 Node-RED flow,包含以下组件:

  1. 从左侧面板拖拽节点:
    • Function node(用于逻辑)
    • Debug node(用于测试)
    • Final Pass/Fail node
  2. 用连线将节点连接起来

NodeRed

8.4 根据您的需求配置 segmentation 逻辑

选项 A:若未检测到缺陷则通过

用例: 在质量检测中,检测到的任何特征即为不合格

Function Node 代码:

const allBlobs = msg.payload.segmentation.blobs;
const results = allBlobs.length <1; // Pass if no features found
msg.payload = results;
return msg;

选项 B:仅当缺陷较小才通过

用例: 接受低于尺寸阈值的轻微缺陷

Function Node 代码:

const threshold = 500; // Adjust pixel count threshold
const allBlobs = msg.payload.segmentation.blobs;
const allUnderThreshold = allBlobs.every(blob => blob.pixel_count < threshold);
msg.payload = allUnderThreshold;
return msg;

选项 C:若总缺陷面积较小则通过

用例: 接受总缺陷面积有限的部件

Function Node 代码:

const threshold = 5000; // Adjust total pixel threshold
const allBlobs = msg.payload.segmentation.blobs;
const totalArea = allBlobs.reduce((sum, blob) => sum + blob.pixel_count, 0);
msg.payload = totalArea < threshold;
return msg;

8.5 配置 Function Node

  1. 双击 Function 节点
  2. 从上面的示例中复制相应代码
  3. 粘贴到 On Message 选项卡
  4. 根据您的应用调整阈值
  5. 点击 Done

8.6 部署并测试逻辑

  1. 点击 Deploy 以激活逻辑
  2. 前往 HMI 进行测试
  3. 使用已知良品与不良品进行测试
  4. 验证通过/不通过结果是否符合预期

步骤 9:生产验证

9.1 全面测试

对 segmentation 系统进行以下测试:

测试用例预期结果失败时的处理措施
干净部件通过(无分割)调整阈值或重新训练
轻微缺陷通过/不通过按您的标准微调逻辑参数
重大缺陷失败(清晰分割)检查模型准确性
边缘情况行为稳定添加训练数据

9.2 性能验证

监控以下指标:

  • 每次检测的处理时间
  • 多次测试的一致性
  • 生产照明下的准确性
  • 长时间运行的可靠性

9.3 最终调整

如果性能不令人满意:

  1. 为边缘情况增加更多训练数据
  2. 在逻辑中调整阈值
  3. 改善成像条件
  4. 在增加迭代次数的基础上重新训练模型

成功!您的 segmentation 系统已就绪

您现在拥有一个可工作的 segmentation 系统,能够:

  • 自动检测 特定特征或缺陷
  • 以像素级精度测量区域
  • 根据您的需求应用自定义通过/不通过逻辑
  • 通过 I/O 控制与生产系统集成

高级配置选项

自定义阈值逻辑

对于复杂的验收标准,将多个条件组合在一起:

const smallThreshold = 200;
const largeThreshold = 1000;
const maxTotalArea = 3000;

const allBlobs = msg.payload.segmentation.blobs;
const smallBlobs = allBlobs.filter(blob => blob.pixel_count < smallThreshold);
const largeBlobs = allBlobs.filter(blob => blob.pixel_count > largeThreshold);
const totalArea = allBlobs.reduce((sum, blob) => sum + blob.pixel_c