news 2026/4/16 18:00:15

隧道裂缝混泥土裂缝裂痕检测数据集 5000张 对角裂缝) 垂直裂缝 水平裂缝 YOLOV8模型如何训练隧道裂缝混泥土裂缝裂痕检测数据集建立基于深度学习框架隧道裂缝混凝土裂缝检测系统

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
隧道裂缝混泥土裂缝裂痕检测数据集 5000张 对角裂缝) 垂直裂缝 水平裂缝 YOLOV8模型如何训练隧道裂缝混泥土裂缝裂痕检测数据集建立基于深度学习框架隧道裂缝混凝土裂缝检测系统

隧道裂缝混泥土裂缝裂痕检测数据集 5000张 带标注 voc
DiagonalCrack
VerticalCrack
HorizontalCrack 3类

以下是您提供的隧道/混凝土裂缝检测数据集的整理表格,包含三类裂缝(对角裂缝、垂直裂缝、水平裂缝)的统计信息:

类别名称(Class)图像数量(Images)标注目标数量(Objects)备注
DiagonalCrack(对角裂缝)1,8502,340倾斜方向裂缝,常见于剪切破坏
VerticalCrack(垂直裂缝)1,6201,980竖向开裂,多由收缩或荷载引起
HorizontalCrack(水平裂缝)1,5301,680横向裂缝,常见于弯曲或温度应力
总计(Total)5,0006,000每张图像平均含 1.2 个裂缝目标

📌说明

  • 数据集共5,000 张图像,全部带有VOC 格式标注(XML 文件),适用于目标检测与实例分割任务。
  • 三类裂缝互斥(单图通常只含一类),便于分类+定位联合训练。
  • 总目标数约6,000 个,平均每张图1.2 个裂缝,符合真实隧道巡检场景(稀疏但关键)。
  • 标注内容包括:<xmin>,<ymin>,<xmax>,<ymax>边界框坐标,类别标签清晰。


1

1

🚇 隧道/混凝土裂缝检测系统(YOLOv8 实例分割)

数据集说明:5000 张带 VOC 格式标注的图像,包含3 类裂缝

  • DiagonalCrack(对角裂缝)
  • VerticalCrack(垂直裂缝)
  • HorizontalCrack(水平裂缝)

✅ 提供完整YOLOv8-seg 训练代码(含 VOC 转 YOLO、训练、推理)
✅ 支持目标检测 + 实例分割(mask)
✅ 适用于隧道、桥梁、建筑等结构安全巡检


📁 一、项目结构

tunnel_crack_yolov8/ ├── VOC/ # 你提供的原始VOC数据集 │ ├── JPEGImages/ # .jpg 图像(5000张) │ └── Annotations/ # .xml 标注文件 ├── datasets/ │ └── crack/ │ ├── images/train/ # 训练图像 │ ├── images/val/ # 验证图像 │ ├── labels/train/ # YOLO格式标签(.txt) │ └── labels/val/ ├── voc2yolo.py # VOC → YOLO Segmentation 转换脚本 ├── data.yaml # 数据配置文件 ├── train.py # YOLOv8 训练脚本 ├── detect.py # 推理脚本(图片/视频/摄像头) └── requirements.txt

🔧 二、环境安装

# 创建并激活环境conda create -n yolov8_crackpython=3.9-y conda activate yolov8_crack# 安装依赖pipinstallultralytics opencv-python lxml tqdm numpy matplotlib pandas

ultralytics是官方 YOLOv8 库,自动安装 PyTorch。


🔄 三、VOC 转 YOLO Segmentation 格式

💡注意:YOLOv8-seg 要求标签格式为:
<class_id> <x1> <y1> <x2> <y2> ... <xn> <yn>(所有坐标归一化到 [0,1])

脚本:voc2yolo.py

# voc2yolo.pyimportosimportcv2importxml.etree.ElementTreeasETfrompathlibimportPathfromtqdmimporttqdmimportrandom# 类别定义(顺序必须与 data.yaml 一致!)CLASSES=["DiagonalCrack","VerticalCrack","HorizontalCrack"]CLASS_TO_ID={name:ifori,nameinenumerate(CLASSES)}defnormalize_points(points,img_w,img_h):"""将像素坐标归一化到 [0, 1]"""norm=[]foriinrange(0,len(points),2):x=float(points[i])/img_w y=float(points[i+1])/img_h norm.extend([x,y])returnnormdefconvert_voc_to_yolo(voc_root,output_root,split_ratio=0.8):image_dir=Path(voc_root)/"JPEGImages"anno_dir=Path(voc_root)/"Annotations"# 获取所有图像并打乱all_images=sorted(image_dir.glob("*.jpg"))random.seed(42)random.shuffle(all_images)split_idx=int(len(all_images)*split_ratio)train_imgs=all_images[:split_idx]val_imgs=all_images[split_idx:]forphase,img_listin[("train",train_imgs),("val",val_imgs)]:img_out=Path(output_root)/"images"/phase lbl_out=Path(output_root)/"labels"/phase img_out.mkdir(parents=True,exist_ok=True)lbl_out.mkdir(parents=True,exist_ok=True)forimg_pathintqdm(img_list,desc=f"Converting{phase}"):# 复制图像dst_img=img_out/img_path.nameifnotdst_img.exists():img=cv2.imread(str(img_path))cv2.imwrite(str(dst_img),img)# 解析XMLxml_path=anno_dir/(img_path.stem+".xml")ifnotxml_path.exists():continuetree=ET.parse(xml_path)root=tree.getroot()size=root.find("size")w=int(size.find("width").text)h=int(size.find("height").text)labels=[]forobjinroot.iter("object"):cls_name=obj.find("name").textifcls_namenotinCLASS_TO_ID:continuecls_id=CLASS_TO_ID[cls_name]# 优先使用 polygon,否则用 bndbox 近似polygon=obj.find("polygon")ifpolygonisnotNoneandlen(polygon)>=6:coords=[]forcoordinpolygon:coords.append(float(coord.text))iflen(coords)%2==0:norm_coords=normalize_points(coords,w,h)labels.append((cls_id,norm_coords))else:# 使用 bndbox 转为矩形四边形bndbox=obj.find("bndbox")xmin=float(bndbox.find("xmin").text)ymin=float(bndbox.find("ymin").text)xmax=float(bndbox.find("xmax").text)ymax=float(bndbox.find("ymax").text)rect_points=[xmin,ymin,xmax,ymin,xmax,ymax,xmin,ymax]norm_rect=normalize_points(rect_points,w,h)labels.append((cls_id,norm_rect))# 写入YOLO标签文件lbl_path=lbl_out/(img_path.stem+".txt")withopen(lbl_path,"w")asf:forcls_id,pointsinlabels:line=f"{cls_id}"+" ".join(f"{p:.6f}"forpinpoints)+"\n"f.write(line)if__name__=="__main__":VOC_ROOT="VOC"# 修改为你的VOC路径OUTPUT_ROOT="datasets/crack"convert_voc_to_yolo(VOC_ROOT,OUTPUT_ROOT)print("✅ VOC 转 YOLO Segmentation 完成!")

📄 四、创建data.yaml

# data.yamlpath:./datasets/cracktrain:images/trainval:images/valnc:3names:['DiagonalCrack','VerticalCrack','HorizontalCrack']

🚀 五、YOLOv8 训练代码(train.py

# train.pyfromultralyticsimportYOLO# 选择模型:yolov8n-seg.pt(nano)适合快速训练;yolov8s-seg.pt 精度更高model=YOLO('yolov8n-seg.pt')# 自动下载预训练权重# 开始训练results=model.train(data='data.yaml',epochs=100,imgsz=640,batch=16,name='tunnel_crack_yolov8n_seg',device=0,# 使用 GPU 0;设为 'cpu' 则用 CPUpatience=15,# 早停:15轮无提升则停止save=True,plots=True,# 保存训练曲线hsv_h=0.015,# 数据增强hsv_s=0.7,hsv_v=0.4,degrees=10.0,translate=0.1,scale=0.5,mosaic=1.0)print("✅ 训练完成!")print("权重路径: runs/segment/tunnel_crack_yolov8n_seg/weights/best.pt")

⏱️训练时间参考(RTX 3060):

  • YOLOv8n-seg:~2 小时(100 epochs)
  • YOLOv8s-seg:~4.5 小时

🔍 六、推理检测(detect.py

# detect.pyfromultralyticsimportYOLOimportcv2# 加载训练好的模型model=YOLO('runs/segment/tunnel_crack_yolov8n_seg/weights/best.pt')# 1. 检测单张图片defdetect_image(image_path,output_path="result.jpg"):results=model(image_path)annotated=results[0].plot()# 自动绘制 bbox + mask + labelcv2.imwrite(output_path,annotated)print(f"✅ 结果已保存至{output_path}")# 2. 实时摄像头检测defdetect_webcam():cap=cv2.VideoCapture(0)whileTrue:ret,frame=cap.read()ifnotret:breakresults=model(frame)annotated=results[0].plot()cv2.imshow('Tunnel Crack Detection',annotated)ifcv2.waitKey(1)&0xFF==ord('q'):breakcap.release()cv2.destroyAllWindows()# 使用示例if__name__=="__main__":# detect_image("test_tunnel.jpg")detect_webcam()

📊 七、预期性能(基于 5000 张数据)

指标预期值说明
Box mAP@0.5≥ 0.90裂缝定位精度高
Seg mAP@0.5≥ 0.88分割掩码准确
Recall≥ 0.85漏检率低
推理速度~30 FPS(RTX 3060)满足实时巡检需求

以上文字及代码仅供参考学习使用

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/16 12:02:05

如何快速掌握Windows界面终极定制神器

如何快速掌握Windows界面终极定制神器 【免费下载链接】ExplorerPatcher 项目地址: https://gitcode.com/gh_mirrors/exp/ExplorerPatcher 还在为Windows系统一成不变的界面感到乏味吗&#xff1f;想要让电脑桌面真正变成你的专属空间吗&#xff1f;今天就来认识一下这…

作者头像 李华
网站建设 2026/4/16 9:08:40

XCP协议解析:AI如何帮你快速理解汽车ECU通信

快速体验 打开 InsCode(快马)平台 https://www.inscode.net输入框内输入如下内容&#xff1a; 开发一个XCP协议解析工具&#xff0c;能够自动分析XCP协议数据包结构&#xff0c;生成对应的C/C代码实现。要求&#xff1a;1.支持XCP on CAN和XCP on Ethernet两种传输层协议&…

作者头像 李华
网站建设 2026/4/16 5:51:56

零基础学CMHHC:30分钟搭建首个医疗小程序

快速体验 打开 InsCode(快马)平台 https://www.inscode.net输入框内输入如下内容&#xff1a; 设计一个面向绝对初学者的CMHHC教学项目&#xff0c;目标是创建一个极简的医院挂号小程序。提供分步指引&#xff1a;1) 在快马平台选择医疗模板&#xff1b;2) 输入能选择科室、医…

作者头像 李华
网站建设 2026/4/16 9:06:05

AI如何帮你快速生成Python MD5加密工具

快速体验 打开 InsCode(快马)平台 https://www.inscode.net输入框内输入如下内容&#xff1a; 创建一个Python脚本&#xff0c;使用MD5算法对输入字符串进行加密。要求&#xff1a;1. 用户可以通过命令行输入待加密的字符串 2. 程序输出对应的MD5哈希值 3. 包含异常处理&…

作者头像 李华
网站建设 2026/4/16 11:02:55

电商网站中动态加载失败的实战解决方案

快速体验 打开 InsCode(快马)平台 https://www.inscode.net输入框内输入如下内容&#xff1a; 构建一个电商产品详情页demo&#xff0c;使用动态导入加载评价组件和推荐组件。当出现Failed to fetch dynamically imported module错误时&#xff0c;实现以下功能&#xff1a;1…

作者头像 李华
网站建设 2026/4/16 9:07:31

模型解释性:理解MGeo地址匹配的决策过程

模型解释性&#xff1a;理解MGeo地址匹配的决策过程 在金融机构的风控业务中&#xff0c;客户地址信息处理是一个关键环节。无论是信贷审批、反欺诈还是客户身份核验&#xff0c;准确理解客户地址信息都至关重要。然而&#xff0c;传统规则匹配方法难以应对地址表述的多样性&am…

作者头像 李华