桩检测算法

总体流程

  1. 基于规则的桩检测
    • 采用基于规则的方法检测桩,检测时不区分桩类别。这一步保证绝对的准确率(100%),较高的召回率(>60%)。
  2. 生成桩检测数据集
    • 使用规则检测的结果作为标注生成桩检测数据集【pile_v0.1】。
  3. 模型训练
    • 使用YOLO算法在桩检测数据集上训练一个初步的桩检测模型【model_v0.1】。
  4. 自监督训练
    • 使用训练好的模型对基于规则无法检测的图纸进行检测,将置信度较高的结果加入到训练集继续训练。

基于规则的桩检测

  • 过滤干扰线
    • 长度 < 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轮。