跳到主要内容

训练 Segmenter

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

在开始之前

需要的条件

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

步骤 1:创建 Segmentation 配方

1.1 开始新配方

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

New

1.2 激活配方

  1. 在列表中找到您的配方(显示为 "Inactive")
  2. 点击 Actions > Activate
  3. 点击 Activate 以确认

Activate recipe

结果: 配方现已激活,准备进行配置。

Step 2: 进入配方编辑器

  1. 点击已激活配方旁的 Edit
  2. **点击 Open Editor 以确认

Edit

您现在将看到包含分割相关选项的配方编辑器。

Step 3: 配置相机设置

3.1 打开 Imaging 配置

  1. 点击 Configure Imaging(左下角)

Configure Image

3.2 为分割优化对焦

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

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

3.3 设置最佳曝光

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

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

分割曝光指南:

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

3.4 配置 LED 照明模式

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

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

3.5 调整 Gamma 以增强特征

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

3.6 保存配置

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

保存设置

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

Step 4: Set Up Template and Alignment

4.1 转到 Template Section

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

4.2 配置对齐(可选)

Template and alignment

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

  1. 选择 Skip Aligner 若零件位置一致
  2. 点击 Save

模板图像

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

Step 5: Define Inspection Region

5.1 转到 Inspection Setup

在面包屑导航中点击 "Inspection Setup"

5.2 设置感兴趣区域(ROI)

ROI 定义分割将在哪里进行:

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

ROI 设置

5.3 ROI 最佳实践用于分割

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

5.4 保存 ROI 设置

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

Step 6: Label Training Data

6.1 导航到 Label And Train

在面包屑导航中点击 "Label And Train"

6.2 配置 Inspection Class

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

6.3 捕获并标注训练图像

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

图像捕获过程

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

标注与训练

标注最佳实践

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

6.4 训练数据多样性

确保你的训练集包含:

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

6.5 训练数据质量检查

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

步骤 7:训练分割模型

7.1 启动训练过程

  1. 当标注完成时,单击 返回实时
  2. 单击 训练分割模型

开始训练

7.2 配置训练参数

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

7.3 监控训练进度

训练进度显示:

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

训练进度

训练控制:

  • 中止训练: 如出现问题时停止
  • 提前结束训练: 当准确率达到要求时停止

训练进度 2

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

步骤 8:测试分割性能

8.1 访问实时预览

  1. 在完成训练后,单击 实时预览
  2. 对不同部件进行测试:
    • 已知良品(应显示无/极少分割)
    • 已知缺陷部件(应突出显示缺陷)
    • 边缘情况和临界示例

实时预览

8.2 评估结果

检查分割质量:

指标良好表现需要改进
准确度能够持续正确检测真实特征漏检明显特征
精确度很少出现误报大量背景区域被高亮
边缘质量边界干净且准确边缘粗糙或不准确
一致性重复测试结果相似结果高度可变

8.3 不良结果故障排除

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

步骤 9:配置通过/失败逻辑

9.1 访问 IO Block

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

9.2 移除默认逻辑

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

9.3 构建分割流程

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

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

NodeRed

9.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;

9.5 配置 Function Node

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

9.6 部署并测试逻辑

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

步骤 10:生产验证

10.1 全面测试

对分割系统进行测试,包含:

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

10.2 性能验证

监控以下指标:

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

10.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