桩检测算法
总体流程
- 基于规则的桩检测
- 采用基于规则的方法检测桩,检测时不区分桩类别。这一步保证绝对的准确率(100%),较高的召回率(>60%)。
- 生成桩检测数据集
- 使用规则检测的结果作为标注生成桩检测数据集【pile_v0.1】。
- 模型训练
- 使用YOLO算法在桩检测数据集上训练一个初步的桩检测模型【model_v0.1】。
- 自监督训练
- 使用训练好的模型对基于规则无法检测的图纸进行检测,将置信度较高的结果加入到训练集继续训练。
基于规则的桩检测
-
过滤干扰线
- 长度 < 1500
- 直径 < 1500
- 面积 < 1500×1500
- 只保留直线,多段线,圆,椭圆,圆弧,实体,填充
-
桩检测
- 将去除干扰线后的实体导出图像求连通域
- 在每个连通域内进行桩检测,提高效率
- 圆检测:圆实体,多段线实体(只包含曲线,且构成360度),圆弧实体(构成360度),椭圆实体(长轴=短轴)
- 矩形检测:基于最近邻算法,遍历直线和它最近邻的直线是否组成矩形
- 交叉线检测:基于扫描线算法检测线是否交叉,判断交点是否在上述圆或矩形中心附近
- 填充检测:检测填充是否在上述圆或矩形内
- 将检测结果导出图像,再求一次连通域,重复上述桩检测算法,保证准确率
生成桩检测数据集
-
生成桩边界框
- 根据基于规则的检测结果生成桩边界框
-
处理图像
- 将原始图纸和过滤干扰线后的图纸都导出图片,增加数据规模和多样性
- 以640×640为滑动窗口,窗口重合度20%,将导出图像切分为小图
- 将边界框转为图像坐标下的结果,并转为小图坐标下的标注
- 筛除没有边界框的小图,剩余图像作为训练集
模型训练
- 使用YOLOv8n
- 将数据集转为YOLOv8模型需要的格式,并修改数据集配置文件
- 加载预训练权重,使用batch=32,epoch=120进行训练,其他参数默认
- 训练出桩检测模型【model_v0.1】
自监督训练
- 测试集使用规则检测遗漏的桩
- 将基于规则无法检测的桩作为测试集,使用桩检测模型【model_v0.1】对测试集的数据进行检测
- 将测试集中置信度较高的生成标签,合并原有数据集【pile_v0.1】中,生成新数据集【pile_v0.2】
- 在新数据集【pile_v0.2】上继续训练桩检测模型,训练结束后生成新的桩检测模型【model_v0.2】
- 使用新的模型重复上述步骤,循环5轮。