裂缝分割数据集 4000张 ,4000张yolo格式的裂缝分割数据集 构建了一个基于 YOLOv5-seg 的裂缝分割系统 桥梁、道路、建筑等结构健康监测场景
2026/7/13 18:25:27 网站建设 项目流程

yolov5-seg ,4000张yolo格式的裂缝分割数据

🛠️ 如何使用YOLOv5-seg训练 4000 张 YOLO 格式裂缝分割数据集(含 PR 曲线分析)

目标:使用 YOLOv5-seg 模型训练一个高精度的裂缝语义分割模型,支持 4000 张标注图像
任务类型:实例分割(Instance Segmentation)——识别并分割出图像中的裂缝区域
输出:完整训练流程、配置文件、代码示例、PR曲线解读与优化建议


🔧 一、环境准备

# 创建虚拟环境conda create -n yolov5_segpython=3.9-y conda activate yolov5_seg# 克隆官方 YOLOv5 仓库(含 segmentation 分支)gitclone https://github.com/ultralytics/yolov5.gitcdyolov5# 安装依赖pipinstall-r requirements.txt pipinstalltorch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu118

✅ 使用ultralytics/yolov5是推荐版本,已支持segment功能。


📁 二、数据集准备(YOLO 格式)

1. 数据结构要求

datasets/crack_segmentation/ ├── images/ │ ├── train/ # 2800 张训练图 │ └── val/ # 1200 张验证图 └── labels/ ├── train/ # 对应 .txt 文件 └── val/

2. YOLO 格式标签(.txt文件)

每行格式:

<class_id> <x_center> <y_center> <width> <height> <segmentation>
  • class_id: 0(裂缝类)
  • <x_center>, <y_center>: 边界框中心点(归一化)
  • <width>, <height>: 边界框宽高(归一化)
  • <segmentation>: 多边形顶点坐标(归一化),格式为:
    x1 y1 x2 y2 x3 y3 ... xn yn

💡 示例:labels/train/img_001.txt

0 0.45 0.62 0.2 0.3 0.4 0.6 0.5 0.6 0.55 0.7 0.5 0.7 0.55 0.6 0.5 0.5

✅ 建议使用LabelMeCVAT工具标注,再转换为 YOLO 格式。


📄 三、创建data.yaml

# data.yamlpath:./datasets/crack_segmentationtrain:images/trainval:images/val# number of classesnc:1names:['crack']

🎯 四、训练模型(train.py

# train.pyimportosimportsys sys.path.append('./')frommodels.experimentalimportattempt_loadfromutils.datasetsimportLoadImagesAndLabelsfromutils.generalimportcheck_file,check_img_sizefromutils.plotsimportplot_resultsfromutils.torch_utilsimportselect_device# 设置参数device='0'# GPU 编号batch_size=16imgsz=640epochs=100weights='yolov5s-seg.pt'# 预训练权重(可选)data='data.yaml'name='crack_segmentation'# 启动训练!python train.py \--batch-size{batch_size}\--epochs{epochs}\--img640\--data{data}\--weights{weights}\--name{name}\--device{device}\--workers4\--patience10\--save-period10\--project runs/segment \--exist-ok

✅ 输出路径:runs/segment/crack_segmentation/


📊 五、评估结果与 PR 曲线解读

你提供的Precision-Recall Curve(PR 曲线)显示:

特征解读
初始段接近 (0,1)在低召回率下,模型具有很高的精确度(误检少)
下降趋势平缓随着召回率提升,精确度下降较慢 → 模型鲁棒性强
在 Recall ~0.8 时 Precision ~0.7表明模型在保持较高召回的同时仍能维持良好精度

理想 PR 曲线特征

  • 越靠近左上角越好
  • AUC(曲线下面积)越高越好(>0.9 优秀)

❌ 若曲线陡降,说明模型存在大量误检或漏检。


🧪 六、推理测试(检测 + 分割)

# detect.pyimporttorchfrommodels.experimentalimportattempt_loadfromutils.datasetsimportLoadImagesfromutils.generalimportnon_max_suppression,scale_coordsfromutils.plotsimportplot_one_box,plot_masks# 加载模型model=attempt_load('runs/segment/crack_segmentation/weights/best.pt',map_location='cpu')model.eval()# 推理图片image_path='test.jpg'img=cv2.imread(image_path)img=cv2.cvtColor(img,cv2.COLOR_BGR2RGB)# 推理withtorch.no_grad():pred=model(torch.tensor(img).permute(2,0,1).float().unsqueeze(0)/255.0)[0]# NMSpred=non_max_suppression(pred,conf_thres=0.5,iou=0.45,classes=None,agnostic=False)# 可视化fordetinpred:iflen(det):for*xyxy,conf,clsindet:# 绘制边界框plot_one_box(xyxy,img,color=(0,255,0),label='crack')# 绘制掩码(mask)mask=det[0][...,5:]# 获取 maskplot_masks(img,mask,xyxy)

📈 七、如何提升性能?

1.数据增强

# train.py 中添加--mosaic0.5--mixup0.5--hsv_h0.015--hsv_s0.7--hsv_v0.4

2.调整学习率

--lr00.001# 初始学习率--warmup_epochs3

3.使用更大数据量

  • 当前 4000 张数据足够训练,但若想更高精度,建议扩充至 8000+ 张

4.模型选择

模型参数量精度推荐场景
yolov5s-seg移动端/边缘设备
yolov5m-seg平衡性能
yolov5l-seg很高服务器部署

📂 八、导出模型(ONNX / TensorRT)

# export_model.pyfrommodels.experimentalimportattempt_loadimporttorch model=attempt_load('runs/segment/crack_segmentation/weights/best.pt')model.export(format='onnx')# 导出 ONNXmodel.export(format='engine')# 导出 TensorRT(需 CUDA)

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询