背景
在 Halcon 中集成 YOLO 的本质是传统视觉与深度学习的融合,既能保留 Halcon 在高精度测量、流程控制上的优势,又能借助 YOLO 解决复杂场景下的目标检测问题。这种组合尤其适合需要快速迭代、处理非结构化数据或对实时性有要求的应用场景,是视觉算法开发从 “手工调参” 向 “数据驱动” 转型的有效路径。
在Halcon中集成YOLO模型的步骤与注意事项如下:
集成步骤
1. 准备YOLO模型
- 模型训练:使用YOLO框架(如YOLOv5、YOLOv8)训练自定义模型,或使用预训练模型。
- 模型转换:将模型导出为ONNX格式(Halcon支持的深度学习模型格式)。
* 示例:导出YOLOv5模型为ONNX # 在Python中执行 import torch model = torch.hub.load('ultralytics/yolov5', 'yolov5s', pretrained=True) model.eval() torch.onnx.export(model, torch.zeros(1, 3, 640, 640), 'yolov5s.onnx')
2. 初始化Halcon环境
加载ONNX模型并配置参数:
* 初始化窗口
dev_close_window()
dev_open_window(0, 0, 800, 600, 0, 'visible', '', WindowHandle)
dev_set_draw('margin')
dev_set_color('red')* 读取ONNX模型
read_classifier('yolov5s.onnx', ClassifierHandle)* 获取模型输入参数
get_classifier_param(ClassifierHandle, 'input_names', InputNames)
get_classifier_param(ClassifierHandle, 'input_shapes', InputShapes)
3. 图像预处理
调整图像尺寸以匹配模型输入要求:
* 读取图像
read_image(Image, 'test_image.jpg')* 获取图像尺寸
get_image_size(Image, WidthImage, HeightImage)* 调整图像大小至模型输入尺寸(如640×640)
zoom_image_factor(Image, ImageZoomed, 640 / WidthImage, 640 / HeightImage, 'constant')* 预处理图像
preprocess_image_for_dl_classifier(ImageZoomed, PreprocessedImage, ClassifierHandle)
4. 执行目标检测
运行模型推理并获取结果:
* 应用模型进行检测
classify_dl_image(ClassifierHandle, PreprocessedImage, 'runtime', 0, ResultHandle)* 获取检测结果
get_dl_classifier_result(ResultHandle, 'predicted_class', PredictedClasses)
get_dl_classifier_result(ResultHandle, 'confidence', Confidences)
get_dl_classifier_result(ResultHandle, 'region', Regions)
5. 后处理与结果可视化
过滤低置信度结果并显示检测框:
* 设置置信度阈值
Threshold := 0.5* 遍历所有检测结果
for i := 0 to |Confidences| - 1 by 1if (Confidences[i] >= Threshold)* 获取当前检测区域select_obj(Regions, ObjectSelected, i + 1)* 显示图像和检测框dev_display(Image)dev_display(ObjectSelected)* 添加标签get_region_center(ObjectSelected, Row, Column)set_tposition(WindowHandle, Row, Column)write_string(WindowHandle, PredictedClasses[i] + ': ' + Confidences[i])endif
endfor
6. 释放资源
* 清理分类器资源
clear_classifier(ClassifierHandle)
注意事项
-
模型兼容性
- 输入尺寸:确保图像预处理后的尺寸与模型训练时的输入尺寸一致(如YOLOv5默认640×640)。
- 类别映射:若使用自定义模型,需手动映射类别ID与名称。
- ONNX版本:Halcon对ONNX版本有要求,建议使用较新版本(如Opset 11+)。
-
预处理差异
- YOLO模型通常需要归一化(如像素值除以255),Halcon的
preprocess_image_for_dl_classifier
会自动处理。 - 注意通道顺序(RGB/BGR),确保与模型训练时一致。
- YOLO模型通常需要归一化(如像素值除以255),Halcon的
-
后处理优化
- 非极大值抑制(NMS):Halcon默认不提供NMS,需手动实现或过滤重叠区域。
- 多尺度检测:若模型支持多尺度,需调整预处理逻辑。
-
性能优化
- GPU加速:确保Halcon已正确配置GPU支持(需安装CUDA)。
- 批量处理:使用
classify_dl_images
处理多帧图像以提高效率。
-
常见问题排查
- 模型加载失败:检查ONNX文件路径、格式是否正确,或尝试使用Halcon的
export_dl_model_to_onnx
转换。 - 检测结果异常:确认预处理步骤(尺寸、归一化)是否与模型训练时一致。
- 模型加载失败:检查ONNX文件路径、格式是否正确,或尝试使用Halcon的
通过以上步骤和注意事项,可在Halcon中成功集成YOLO模型并实现目标检测。