跳到主要内容

训练分割器

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

何时使用分割(Segmentation): 表面缺陷、液体溢出、不规则形状、面积测量、模式检测,或任何需要像素级精度的特征。

开始前

需要准备的内容

  • OV80i 摄像系统已就绪并已连接
  • 带有要分割特征的测试件(例如带铅笔标记的薄片)
  • 适合您具体应用的良好照明条件
  • 用于训练的 15-20 张样本图像

步骤 1:创建分割配方

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 为分割优化对焦

对边缘检测的精确性,焦点至关重要:

  1. 将测试件置于相机视图中
  2. 调整对焦,直到边缘清晰锐利
  3. 使用不同的部件进行测试,以确保在整个量程内对焦一致
提示
  • 将焦点放在缺陷/特征将出现的表面
  • 确保感兴趣区域的整个区域处于清晰对焦
  • 略微过锐化优于分割时的软焦

2.3 设置最佳曝光

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

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

分割曝光指南:

  • 特征应与背景具有清晰对比
  • 避免可能被误认为缺陷的阴影
  • 针对不同部件状态进行测试(干净、脏污、磨损)

2.4 配置 LED 照明模式

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

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

2.5 调整伽玛值以增强特征对比

  1. 增大伽玛值以增强特征与背景之间的对比度
  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 导航至检查设置

点击面包屑导航中的“检查设置”

4.2 设置 ROI(Region of Interest)

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 配置检查类别

  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. 对下一部分重复以上步骤

标签与训练

标注最佳实践

良好标注不良标注
精确的特征边界边缘涂抹不清晰
一致的特征定义判定标准不一致
完整的特征覆盖缺失的特征区域
干净背景(未涂色)背景被错误涂绘

5.4 训练数据多样性

确保你的训练集包含:

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

5.5 训练数据质量检查

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

Step 6: Train Segmentation Model

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 监控训练进度

训练进度显示:

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

训练进度

训练控制:

  • 中止训练: 出现问题时停止
  • 提前完成训练: 当达到足够的准确度时停止

训练进度 2

提示
  • 85% 的准确率通常适用于生产
  • 训练在达到目标准确度时自动停止
  • 更多的训练数据通常比增加迭代次数更有效

Step 7: Test Segmentation Performance

7.1 访问实时预览

  1. 训练完成后点击 Live Preview
  2. 用不同部件进行测试:
    • 已知良品(应显示无/极少分割)
    • 已知缺陷部件(应高亮显示缺陷)
    • 边界情况和边缘示例

实时预览

7.2 评估结果

检查分割质量:

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

7.3 不良结果的故障排除

问题可能原因解决方法
缺失的特征训练数据不足添加更多已标注的示例
误报照明/对比度不足改善成像设置
边缘粗糙图像质量差提升对焦/照明
结果不一致训练数据多样性不足添加更多多样化的示例

第 8 步:配置 Pass/Fail 逻辑

8.1 访问 IO Block

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

8.2 移除默认逻辑

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

8.3 构建分割流程

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

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

NodeRed

8.4 根据需要配置逻辑

选项 A:在未检测到缺陷时通过

用例: 质量检查中任何检测到的特征均视为不合格

Function Node Code:

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

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

用例: 接受低于阈值的微小缺陷

Function Node Code:

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 Code:

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 node
  2. 从上述示例中复制相应代码
  3. 粘贴到 “On Message” 选项卡
  4. 根据您的应用调整阈值
  5. 单击 Done

8.6 部署并测试逻辑

  1. 单击 Deploy 以激活逻辑
  2. 导航到 HMI 进行测试
  3. 使用已知良品和不良品部件进行测试
  4. 验证通过/不通过结果是否符合预期

第 9 步:生产验证

9.1 全面测试

测试分割系统,使用以下用例:

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

9.2 性能验证

监控以下指标:

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

9.3 最终调整

若性能不令人满意:

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

恭喜!您的分割系统现已就绪

您现在拥有一个可运行的分割系统,能够:

  • 自动检测特定特征或缺陷
  • 以像素级精度测量区域
  • 根据您的需求应用自定义 Pass/Fail 逻辑
  • 通过 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