创建您的第一个分割程序
  • 21 Feb 2025
  • PDF

创建您的第一个分割程序

  • PDF

文章摘要

按照 创建您的第一个程序 中的步骤配置成像设置模板图像和对齐以及检测设置后,按照以下步骤训练分割模型。

标注与训练

在本节中,您将捕获物体的多个图像,并使用刷子工具标注缺陷。您需要捕获并标注至少10张图像。

  1. 检测设置页面,使用面包屑菜单选择 Label and Train。或者,从程序编辑器中选择 Label and Train

    Segmeneter Recipe Editor Breadcrumb Menu

    注意

    预览窗格(左侧)显示实时预览,直到捕获图像或通过导航菜单选择图像。

  2. 检测类型下,点击“编辑”以重命名默认类别(fail_[检测类型名称])或添加其他类别。完成所有需要相机识别的类别后,继续下一步。

  3. 确保物体位于相机视野内,然后选择 Capture

  4. 使用 Brush 工具突出显示您希望相机识别的物体上的缺陷。

    提示

    使用 Eraser 工具删除任何不需要的高亮部分。

  5. 如果您添加了其他类别,从下拉菜单中选择适用的刷子类别

  6. 点击 Save Annotations

    Segmentation Annotation - keychain(1)

  7. 将同一物体的另一个示例放入相机视野内,并重复步骤 3-6,直到您添加了至少10个标注示例(如果添加了其他类别,则每个类别至少添加五个示例)。

    提示

    如果每张图像有所不同(避免重复相同的图像),模型的准确性会更高。

    仔细检查每张捕获的图像是否正确标注,因为这些标签将用于训练模型。

  8. 继续到 IO模块.

注意

For more information about the Label and Train page, see 标注和训练(分割模块).

IO模块

在本节中,您将使用 Node-RED 逻辑为程序定义通过/失败逻辑。

  1. 标签与训练 页面,使用面包屑导航选择 IO Block,或在 程序编辑器 中选择 Configure IO

    Segmeneter Recipe Editor Breadcrumb Menu

  2. 右键单击 Classification Block Logic 节点,选择 Delete Selection

    Segmentation IO Block - keychain(1)

  3. 右键单击,选择 Insert > Node > Function

  4. 重新连接节点。

    Segmentation IO Block - keychain

  5. 双击 function 1 节点。

  6. 复制并粘贴下方代码示例中的所需代码到 On Message 选项卡。

    代码示例:如果未检测到像素,则通过

    复制并粘贴以下逻辑代码:

    const allBlobs = msg.payload.segmentation.blobs; // 从有效负载的分割数据中提取斑点信息
    
    const results = allBlobs.length < 1; // 检查是否没有斑点,并存储结果(true 或 false)
    
    msg.payload = results; // 将有效负载设置为检查结果
    
    return msg; // 返回修改后的消息对象

    代码示例:如果检测到的所有斑点均小于设定阈值,则通过

    复制并粘贴以下逻辑代码:

    const threshold = 500; // 定义像素数量的阈值
    
    const allBlobs = msg.payload.segmentation.blobs; // 从有效负载的分割数据中提取斑点信息
    
    const allUnderThreshold = allBlobs.every(blob => blob.pixel_count < threshold); // 检查所有斑点的像素数量是否小于阈值
    
    msg.payload = allUnderThreshold; // 将有效负载设置为检查结果
    
    return msg; // 返回修改后的消息对象

    代码示例:如果检测到的像素总数小于设定阈值,则通过

    复制并粘贴以下逻辑代码:

    const threshold = 5000; // 定义像素总数的阈值
    
    const allBlobs = msg.payload.segmentation.blobs; // 从有效负载的分割数据中提取斑点信息
    
    const totalArea = allBlobs.reduce((sum, blob) => sum + blob.pixel_count, 0); // 计算所有斑点的像素总数
    
    msg.payload = totalArea < threshold; // 如果像素总数小于阈值,将有效负载设置为 true,否则为 false
    
    return msg; // 返回修改后的消息对象

  7. 点击 Done.

  8. 点击 Deploy.

  9. 继续到 训练分割模型

注意

有关 IO 模块 页面更多信息,请参见 IO块和Node-RED逻辑

训练分割模型

在本节中,您将使用先前标记的图像训练模型。

  1. IO 模块 页面,使用面包屑导航选择 Label and Train,或者在 程序编辑器 中选择 Label and Train.

    Segmeneter Recipe Editor Breadcrumb Menu

  2. 点击 Train Segmentation Model.

  3. 使用字段右侧的箭头调整 迭代次数,设置标记图像显示给模型的次数,以帮助模型学习。

    注意

    增加迭代次数会提高模型的准确性,但也会延长训练时间。


    creating-a-segmenter-image-d3t5mlho

  4. 点击 Start Training。一个弹窗将显示训练进度。

  5. 模型训练完成后,使用 Live Preview ModeHMI 标签验证程序的功能。将不同示例的物体放置在摄像头视野内,验证模型是否正确分类每个示例。


本文对您有帮助吗?