跳到主要内容

训练分割器

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

备注

OV10i 不具备分割功能。

何时使用分割: 表面缺陷、液体溢出、不规则形状、区域测量、图案检测,或任何需要像素级精度的特征。

开始前

需要的条件

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

步骤 1:创建分割配方

1.1 开始新配方

  1. 转到“所有配方”页面
  2. 单击 + New Recipe(右上角)
  3. 输入配方名称: 使用描述性名称,例如“Pencil_Mark_Detection”或“Surface_Defect_Segmentation”
  4. 选择配方类型: 从下拉菜单中选择 “Segmentation”
  5. 点击 OK 以创建

1.2 激活配方

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

激活配方按钮

结果:配方现已“Active”,并显示了配方编辑器。

Step 2: Configure Camera Settings

2.1 打开成像配置

  1. 单击 Configure Imaging(左下角)

配置成像

2.2 为分割优化焦点

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

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

2.3 设置最佳曝光

正确曝光可确保稳定的特征检测:

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

分割曝光指南:

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

2.4 配置 LED 照明模式

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

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

2.5 调整 Gamma 以增强特征对比度

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

2.6 保存配置

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

Save Settings

检查点: 特征应在对比度良好时清晰可见。

Step 3: Set Up Template and Alignment

3.1 进入模板部分

在面包屑导航中点击“Template Image and Alignment”

3.2 配置对齐(可选)

Template and alignment

在本示例中,我们将跳过对齐:

  1. 选择 Skip Aligner,如果零件始终处于固定位置
  2. 点击 Save

Template image

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

Step 4: Define Inspection Region

4.1 进入检查设置

在面包屑导航中点击“Inspection Setup”

4.2 设置 ROI(Region of Interest,ROI)

ROI 定义了分割将在哪些区域进行:

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

ROI Setup

4.3 ROI 分割的最佳实践

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

4.4 保存 ROI 设置

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

Step 5: Label Training Data

5.1 跳转到“Label And Train”

在面包屑导航中点击“标注与训练”

5.2 配置检查类型

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

5.3 捕获并标注训练图像

您需要至少 10 张带标注的图像,但建议 15–20 张:

图像捕捉过程

Label and Train

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

标注最佳实践

良好标注差劣标注
精确的特征边界边缘涂绘粗糙
一致的特征定义标准不一致
完整的特征覆盖缺少特征区域
干净的背景(未涂色)背景意外涂色

5.4 训练数据多样性

确保你的训练集包含:

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

5.5 训练数据质量检查

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

步骤 6:训练分割模型

6.1 开始训练过程

  1. 单击 Return to Live 结束标注
  2. 单击 Train Segmentation Model

Start Training

6.2 配置训练参数

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

6.3 监控训练进度

训练进度显示:

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

Training

训练控件:

  • Abort Training: 出现问题时停止
  • Finish Training Early: 当准确率达到要求时停止

Training 2

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

步骤 7:测试分割性能

7.1 访问实时预览

  1. 在训练完成后单击 Live Preview
  2. 使用多种部件进行测试:
    • 已知良品(应显示无/极少分割)
    • 已知缺陷部件(应突出显示缺陷)
    • 边缘情况和边界示例

Live preview

7.2 评估结果

检查分割质量:

指标良好表现需要改进
准确度(Accuracy)能稳定发现真实特征漏检明显特征
精确度(Precision)误检较少大量背景区域被高亮
边缘质量(Edge Quality)边界干净、准确边缘粗糙或不准确
一致性(Consistency)重复测试结果相似结果高度可变

7.3 诊断差结果

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

Step 8: 配置合格/不合格逻辑

8.1 访问 IO Block

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

8.2 删除默认逻辑

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

8.3 构建分割流程

使用以下组件创建 Node-RED 流:

  1. 从左侧面板拖放节点:
    • Function 节点(用于逻辑)
    • Debug 节点(用于测试)
    • 最终通过/不合格节点
  2. 用连线连接节点

NodeRed

8.4 根据需要配置逻辑

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

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

Function 节点代码:

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

选项 B:仅在小缺陷时通过

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

Function 节点代码:

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 节点代码:

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 节点

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

8.6 部署并测试逻辑

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

Step 9: 生产验证

9.1 综合测试

对分割系统进行以下测试:

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

9.2 性能验证

监控以下指标:

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

9.3 最后调整

如果性能不令人满意:

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

成功!您的分割系统已就绪

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

  • 自动检测特定特征或缺陷
  • 用像素级精度测量面积
  • 基于您的要求应用自定义的合格/不合格逻辑
  • 通过 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