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算子族和典型场景放在同一张关系图中,便于在项目启动时快速定位。
选型时最容易踩的三个坑
第一个坑:用分类做定位。如果产线上需要知道缺陷在图像中的位置,分类只能给出“有缺陷”的结论,无法给出坐标。此时应选目标检测或语义分割。判断标准很简单:下游是否需要坐标、面积或轮廓。需要矩形框选检测,需要像素级轮廓选分割。
第二个坑:用检测做像素级测量。目标检测输出的是矩形框,框内包含背景像素。如果缺陷面积只有几个像素宽,或者需要计算缺陷的实际面积,矩形框的精度不够。此时应选语义分割,输出像素级类别图后再用 connection 和 select_shape 提取区域并计算面积。
第三个坑:负样本不足时硬做分类或检测。分类和检测都需要正负样本均衡。如果某类缺陷一年只出现几次,收集足够负样本不现实。此时异常检测是更务实的选择:只用正常样本训练,推理时输出异常分数,再用阈值判断。代价是异常检测通常无法区分缺陷的具体类别,只能回答“异常/正常”。
一个可执行的选型判断流程
实际项目中,可以按下面的顺序快速收敛:
- 先问“输出需要什么”。只需要整体标签 → 分类;需要位置框 → 检测;需要像素轮廓 → 分割;只需要异常有无 → 异常检测。
- 再问“标注成本能否承受”。分类标注最便宜,检测次之,分割最贵。异常检测只需正常样本,标注成本最低。
- 再问“缺陷形态是否可穷举”。可穷举 → 分类/检测/分割;不可穷举或样本极少 → 异常检测。
- 最后问“节拍和硬件是否满足”。分割模型通常比分类模型大,推理更慢;检测模型介于两者之间。需要在精度和速度之间做权衡。
算子对应关系速查
| 任务类型 | 模型加载 | 推理 | 训练 | 典型后处理 |
|---|---|---|---|---|
| 分类 | 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四类深度学习任务的选型逻辑可以压缩成一句话:看输出、看标注、看样本、看节拍。输出决定任务类型,标注决定成本,样本决定可行性,节拍决定模型规模。把这四个问题在项目启动时回答清楚,后续的算子选择、数据准备和部署方案都会顺理成章。