4. HALCON深度学习模型选型与检测任务映射

在HALCON深度学习平台中,模型选型不是先挑网络结构,而是先把检测任务定义清楚。HALCON把工业视觉中常见的深度学习任务划分为四类:分类(Classification)、目标检测(Object Detection)、语义分割(Semantic Segmentation)和异常检测(Anomaly Detection)。这四类任务对应不同的标注方式、不同的推理输出、不同的评价指标,也对应不同的HALCON算子族。选错任务类型,往往不是精度差一点,而是整个数据标注和部署链路都要推倒重来。

四类任务的本质区别

分类回答的是“这张图整体是什么”。输入是一整幅图像,输出是一个类别标签和对应的置信度。它不关心目标在哪里、有几个。典型场景是表面缺陷的有无判断、产品等级分选、字符整体识别前的粗分类。HALCON中分类任务的核心算子包括 read_dl_classifier、apply_dl_classifier,训练侧使用 train_dl_classifier_batch,数据准备依赖 read_dl_classifier_data_set 或自定义的 DlClassifierSample 数据结构。

目标检测回答的是“有什么、在哪里”。输出是一组边界框,每个框带类别和置信度。它适合目标数量可变、位置需要定位的场景,例如零件计数、装配缺失检测、多类缺陷定位。HALCON中检测任务使用 read_dl_model 加载检测模型,推理用 apply_dl_model,后处理用 gen_dl_model_bbox_结果 一类的算子把网络输出转成可用的矩形框,训练侧使用 train_dl_model_batch。

语义分割回答的是“每个像素属于什么”。输出是与原图同尺寸的类别图,每个像素有一个类别标签。它适合缺陷区域需要精确轮廓、面积测量的场景,例如划痕、脏污、涂覆不均的区域提取。HALCON中分割任务同样走 read_dl_model 与 apply_dl_model,但输出是分割图,后处理常用 threshold、connection、select_shape 等传统算子把类别图转成区域并测量。

异常检测回答的是“这张图和正常样本比,哪里不对劲”。它只需要正常样本训练,输出异常分数或异常热力图。它适合缺陷形态无法穷举、正样本充足而负样本稀少的场景,例如新产品导入初期、罕见缺陷检测。HALCON中异常检测使用 read_dl_model 加载异常检测模型,推理后得到异常分数图,再用阈值提取异常区域。

任务映射与算子对应关系

下面这张图把四类任务的输入、输出、标注方式、HALCON算子族和典型场景放在同一张关系图中,便于在项目启动时快速定位。

HALCON 四类深度学习任务映射关系 分类 Classification 输入:整幅图像 输出:类别 + 置信度 标注:图像级标签 核心算子 read_dl_classifier apply_dl_classifier train_dl_classifier_batch 场景:有无判断、等级分选 目标检测 Detection 输入:整幅图像 输出:边界框 + 类别 标注:矩形框 + 类别 核心算子 read_dl_model apply_dl_model train_dl_model_batch 场景:计数、定位、多类缺陷 语义分割 Segmentation 输入:整幅图像 输出:像素级类别图 标注:像素级掩膜 核心算子 read_dl_model apply_dl_model threshold + connection 场景:轮廓提取、面积测量 异常检测 Anomaly 输入:整幅图像 输出:异常分数 / 热力图 标注:仅正常样本 核心算子 read_dl_model apply_dl_model threshold(异常图) 场景:未知缺陷、小样本 选型判断轴:目标是否需要定位?缺陷形态是否可穷举?标注成本是否可接受? 需要定位 → 检测;需要像素轮廓 → 分割;只需整体判断 → 分类;缺陷不可穷举 → 异常检测 数据准备 图像采集与清洗 标注:标签/框/掩膜 划分 train / val / test DlDataset 结构封装 异常检测仅需正常样本 训练与验证 设置超参数:epochs、lr train_dl_model_batch 验证集评估指标 分类:accuracy / top-k 检测:mAP;分割:IoU 推理与后处理 apply_dl_model 分类:取最大置信度类别 检测:NMS 过滤重叠框 分割:阈值转区域 异常:阈值提取异常区 部署与集成 导出模型 / 固化参数 与 HDevelop 流程集成 与 PLC / 运动控制联动 节拍与显存评估 在线监控与再训练

选型时最容易踩的三个坑

第一个坑:用分类做定位。如果产线上需要知道缺陷在图像中的位置,分类只能给出“有缺陷”的结论,无法给出坐标。此时应选目标检测或语义分割。判断标准很简单:下游是否需要坐标、面积或轮廓。需要矩形框选检测,需要像素级轮廓选分割。

第二个坑:用检测做像素级测量。目标检测输出的是矩形框,框内包含背景像素。如果缺陷面积只有几个像素宽,或者需要计算缺陷的实际面积,矩形框的精度不够。此时应选语义分割,输出像素级类别图后再用 connection 和 select_shape 提取区域并计算面积。

第三个坑:负样本不足时硬做分类或检测。分类和检测都需要正负样本均衡。如果某类缺陷一年只出现几次,收集足够负样本不现实。此时异常检测是更务实的选择:只用正常样本训练,推理时输出异常分数,再用阈值判断。代价是异常检测通常无法区分缺陷的具体类别,只能回答“异常/正常”。

一个可执行的选型判断流程

实际项目中,可以按下面的顺序快速收敛:

  1. 先问“输出需要什么”。只需要整体标签 → 分类;需要位置框 → 检测;需要像素轮廓 → 分割;只需要异常有无 → 异常检测。
  2. 再问“标注成本能否承受”。分类标注最便宜,检测次之,分割最贵。异常检测只需正常样本,标注成本最低。
  3. 再问“缺陷形态是否可穷举”。可穷举 → 分类/检测/分割;不可穷举或样本极少 → 异常检测。
  4. 最后问“节拍和硬件是否满足”。分割模型通常比分类模型大,推理更慢;检测模型介于两者之间。需要在精度和速度之间做权衡。
在实际项目中,四类任务并非互斥。常见组合是:先用异常检测做初筛,把可疑图像送入分类或检测做细分类;或者先用目标检测定位感兴趣区域,再对每个区域做分类。HALCON允许在同一流程中串联多个深度学习模型,关键是每一步的输出要能作为下一步的输入。

算子对应关系速查

任务类型 模型加载 推理 训练 典型后处理
分类 read_dl_classifier apply_dl_classifier train_dl_classifier_batch 取最大置信度类别
目标检测 read_dl_model apply_dl_model train_dl_model_batch NMS、框过滤
语义分割 read_dl_model apply_dl_model train_dl_model_batch threshold、connection
异常检测 read_dl_model apply_dl_model 正常样本训练 异常图阈值分割

需要特别说明的是,HALCON的深度学习算子在不同版本中命名和参数会有差异。分类任务早期使用 DlClassifier 系列算子,较新版本逐步统一到 DlModel 体系。实际开发时应以当前安装版本的算子文档为准,不要凭记忆硬写算子名。选型阶段先把任务类型定下来,再查对应版本的算子接口,比先背算子再套任务要可靠得多。

选型错误最典型的代价是数据标注返工。如果先用分类标注了图像级标签,后来发现需要定位缺陷,所有标注都要重做成矩形框或掩膜。建议在标注开始前,用少量样本跑通一次完整流程,确认输出形式满足下游需求,再批量标注。

总结来说,HALCON四类深度学习任务的选型逻辑可以压缩成一句话:看输出、看标注、看样本、看节拍。输出决定任务类型,标注决定成本,样本决定可行性,节拍决定模型规模。把这四个问题在项目启动时回答清楚,后续的算子选择、数据准备和部署方案都会顺理成章。