本人因为公司遗留问题,为了解决识别错误的问题。尝试过yolo12进行目标检测。初步测试良好但是是halcon的socket通信不行。故而去测试halcon 的deeplearn。自己标注数据。
注: 这个软件使用非常无脑。推荐没有基础的人去用
语义分割
以下是halcon的调用模型
*读取模型
read_dl_model ('E:/hacon学习/深度学习/纱筒.hdl', DLModelHandle) //读取预训练模型
*设置模型参数,batch_size将数据集分为较小的数据子集,称为批处理
set_dl_model_param (DLModelHandle, 'batch_size', 1)
*获取图像的ImageDimensions
get_dl_model_param(DLModelHandle, 'image_dimensions', ImageDimensions)
*获取ClassIDs
get_dl_model_param(DLModelHandle, 'class_ids', ClassIDs)
*读取第一张图片
read_image (Image,'E:/hacon学习/深度学习/测试/2025-03-11-14-25-08-254_src_R.jpg')
*获取图片的大小
get_image_size(Image, Width, Height)
*灰度化图片
rgb1_to_gray(Image,Image)
*设置新字典
create_dict (DLSample)
*图像缩放到定尺寸
zoom_image_size (Image, ImagePreprocessed, ImageDimensions[0], ImageDimensions[1], 'constant')
*转换图片的类型为:real
convert_image_type (ImagePreprocessed, ImagePreprocessed, 'real')
*缩放图像的灰度值。
scale_image (ImagePreprocessed, ImagePreprocessed, 1, -127)
*在字典中添加一个键/对象对。
set_dict_object (ImagePreprocessed, DLSample, 'image')
*在一组图像上应用基于深度学习的网络以进行推理。
apply_dl_model (DLModelHandle, DLSample, [], DLResult)
*获取掩码
get_dict_object (SegImage, DLResult, 'segmentation_image')
*掩码扩展
zoom_image_size (SegImage, ImageZoom, Width, Height, 'constant')
* 将掩码图像转换为区域,这里假设阈值为 1 到 255,可根据实际调整
threshold(ImageZoom, Region, 1, 255)
* 连通区域分析
connection(Region, ConnectedRegions)
* 面积筛选,保留面积在 100000 - 400000 之间的区域
select_shape(ConnectedRegions, FilteredRegions, 'area', 'and', 100000, 400000)
*生成xld轮廓
gen_contour_region_xld (FilteredRegions, Contours, 'border')
*拟合圆形xld
fit_circle_contour_xld (Contours, 'algebraic', -1, 0, 0, 3, 2, Row, Column, Radius, StartPhi, EndPhi, PointOrder)
*生成圆形xld
gen_circle_contour_xld (ContCircle, Row, Column, Radius, 0, 6.28318, 'positive', 1)
效果
完全达到了需要的分割效果。但是有个重要问题,模型调用后没有类似模板匹配的相似度评分,!!!!
以下是问题总结
- 错误的分割像素点: 这些像素点漂离在我目标区域外。所幸可以通过面积去除掉 这个问题在u-net系列模型中也出现过
- 没有评分机制 这个问题在生产中会导致很严重的问题。语义分割没有评分,生产中如果出现了问题,会导致严重的残次品。我的项目要求比较高,虽然可以提供掩码+xld匹配的方式盖过去。
- 小区域面积问题: 如果用256256的图片训练会导致IOU非常的难以上升。可以提升为640640去训练。but我要部署的设备cpu不怎么新。会导致调用模型结果变慢,影响生产节拍。
- 区域不可重复: 大标签的掩码中有小标签的掩码,训练一下。小标签便无了。解决方法: 分离训练多个模型。