HDevelop 22.11运行深度学习异常检测示例时程序异常终止求助
HALCON 22.11深度学习异常检测脚本报错排查方案
问题现象
在HDevelop 22.11 Progress中运行深度学习异常检测模板脚本时,反复触发两类致命错误:
Abnormal program termination: Received signal 11(段错误,通常指向非法内存访问)Abnormal program termination: Received signal 4(非法指令或浮点运算异常)
初步怀疑是CUDA版本兼容问题:HALCON 22.11官方标注支持CUDA 11及以上,但当前环境使用的是CUDA 12。
排查与解决步骤
1. 验证CUDA版本兼容性
HALCON 22.11对CUDA 12的适配存在局限性,优先尝试:
- 降级CUDA到11.7/11.8版本(HALCON官方测试过的稳定兼容版本)
- 确保显卡驱动版本与CUDA版本匹配(例如CUDA 11.8对应驱动版本≥520.61.05)
2. 切换CPU运行排除GPU问题
修改脚本中设备配置部分,强制用CPU运行,确认是否为GPU/CUDA层问题:
* 替换原GPU设备查询代码,强制指定CPU set_dl_model_param (DLModelHandle, 'device', 'cpu')
若CPU运行正常,可确认问题出在GPU相关环节。
3. 检查脚本中的数据与内存问题
- 图像尺寸匹配:确认
ImageWidth和ImageHeight符合initial_dl_anomaly_large.hdl的输入要求,避免设置过小或非标准尺寸 - 预处理域裁剪校验:脚本中
rectangle1_domain的参数顺序为Row1, Column1, Row2, Column2,需确保裁剪范围不超出图像实际尺寸,避免生成非法图像域:get_image_size(SampleImage, ImgWidth, ImgHeight) rectangle1_domain (SampleImage, SampleImageReduced, 0, 0, min(ImgHeight-1, ImageHeight), min(ImgWidth-1, ImageWidth)) - 数据集完整性:检查
ImageDir下的图像是否存在损坏、格式不兼容情况,确保所有图像均可通过read_image正常读取
4. 降低训练负载避免崩溃
若崩溃发生在训练阶段,尝试调整参数降低模型负载:
- 降低
Complexity值(例如从75调整至50) - 减小
DomainRatio(例如从0.9调整至0.7) - 减少
MaxNumEpochs(例如从75调整至50) - 关闭训练进度显示(
EnableDisplay := false)
5. 启用HALCON调试日志定位问题
开启调试日志获取更详细的错误上下文:
set_system('debug', 'true') set_system('debug_file', 'halcon_debug.log')
运行脚本后查看生成的halcon_debug.log,定位崩溃触发的具体函数或环节。
关键代码调整示例
强制CPU运行的完整修改片段
read_dl_model ('initial_dl_anomaly_large.hdl', DLModelHandle) set_dl_model_param (DLModelHandle, 'image_width', ImageWidth) set_dl_model_param (DLModelHandle, 'image_height', ImageHeight) set_dl_model_param (DLModelHandle, 'complexity', Complexity) * 替换原GPU查询逻辑,强制使用CPU set_dl_model_param (DLModelHandle, 'device', 'cpu')
内容的提问来源于stack exchange,提问作者Lars Kakavandi-Nielsen
相关产品推荐
相关产品推荐

