尧图网站设计 尧图网站设计YAOTU DESIGN
ARTICLE DETAIL

资讯详情

深耕网站设计与一线实操的经验洞察。

YOLOv8/YOLO11训练墙体裂缝图像分割数据集全流程解析

YOLOv8/YOLO11训练墙体裂缝图像分割数据集全流程解析 简介图像分割技术是计算机视觉中将像素级目标从背景中分离的核心方法在结构健康监测、建筑缺陷检测等领域具有重要价值。传统墙体裂缝巡检依赖人工经验效率低且主观性强。基于深度学习的图像分割模型能够对裂缝进行像素级定位而YOLO系列模型凭借端到端训练与高效推理成为工程落地首选。YOLOv8与YOLO11在分割任务上进一步优化配合规范的墙体裂缝分割数据集可快速实现裂缝识别与轮廓提取。围绕数据集构成、标注格式转换、模型训练参数到实践坑点提供完整技术路径助力建筑检测智能化。1. 项目概述从墙体裂缝到计算机能看懂的结构病害做建筑检测的朋友应该都有同感裂缝这东西看着简单处理起来却极其磨人。一堵墙上的裂缝可能是温度伸缩导致的表面损伤也可能是结构承载力不足的前兆。传统的人工巡检方式靠肉眼观察、靠米尺测量、靠手写记录效率低不说不同的人对同一条裂缝的判断还可能完全不同。我见过一个项目两位经验丰富的检测工程师对同一面墙的裂缝等级判定差了整整一级这事在行业里太常见了。这个墙体裂缝图像分割数据集要解决的正是这个问题——把“裂没裂、裂在哪、裂成什么样”这件事从人工经验判断变成计算机视觉模型可以学习的标准任务。数据集里的每一张墙体图像都用精细的掩膜把裂缝区域标注了出来也就是说模型学到的不仅是“图上有没有裂缝”而是“裂缝在图像中具体占据哪些像素”。这属于典型的图像分割任务和单纯的目标检测不一样目标检测给你一个框告诉你裂缝在这里面分割直接给你裂缝的轮廓能做到像素级的定位。我之所以说这个数据集适合用于YOLOv8、YOLO11等代码训练核心原因是这两个版本的YOLO已经内置了实例分割和语义分割能力。很多人对YOLO的印象还停留在目标检测那会儿但实际上从YOLOv5开始就有同学尝试用分割分支做裂缝提取到了YOLOv8Ultralytics官方已经把分割模型作为一等公民支持了YOLO11更是把速度和精度的平衡又往前推了一步。所以这个数据集的使用路径非常清晰标注格式直接对齐YOLO分割格式训练脚本一条命令就能跑起来对想做结构健康监测、建筑缺陷检测、甚至文物表面病害记录的人都是一个可以直接上手的基础。这篇文章我会从数据集本身的构成讲起然后逐个拆解YOLOv8和YOLO11训练这个数据集的完整流程包括环境配置、数据格式转换、超参数调节、模型评估这些环节最后把我在实际训练中踩过的坑和排查思路一并整理出来。如果你正准备做墙体裂缝检测或类似的结构表面病害项目这篇文章应该能帮你省下不少试错的成本。2. 数据集核心构成与标注规范2.1 墙体裂缝图像数据集的典型组成一个能用于深度模型训练的墙体裂缝分割数据集绝不是“随便拍一批带裂缝的墙”那么简单。拿我经手过的类似数据集来说通常包含三个主体部分原始图像、分割掩膜、类别映射文件。图像部分一般覆盖不同光照条件、不同墙体材质、不同裂缝宽度和走向的样本。如果做的是通用场景训练图像里除了裂纹还会出现管线、插座、门窗边缘这些干扰物——这些恰恰是测试模型泛化能力的好素材。正常情况下一套可用的数据集规模至少在几百到几千张的量级。对于分割任务来说单张图像的分辨率也需要注意YOLO系列在训练时会把图像缩放到固定尺寸常见的是640×640所以原始图像如果分辨率太低细节信息会在缩放过程中损失掉导致小裂缝根本学不出来。掩膜部分是分割任务的关键。每一条裂缝的边缘都要被精确勾勒出来形成一个或多个封闭区域。注意一个细节如果是实例分割两条裂缝即使紧挨着它们也需要被标注成不同的实例如果是语义分割则只需要把所有裂缝像素统一标记为同一类别。YOLOv8和YOLO11同时支持这两种模式但标注数据的时候必须提前想清楚否则后面转换格式会非常痛苦。类别映射文件相对简单它定义了每个类别的名称和对应的索引编号。墙体裂缝数据集通常只有一个类别“crack”但在实际项目中我建议至少多考虑一个类别比如“background”之外的“spalling”剥落或者“efflorescence”泛碱。原因很简单模型只见过裂缝遇到剥落区域时它很可能把那些复杂的纹理也误判成裂缝。在早期数据集中加入负样本类别对后续现场部署的鲁棒性帮助极大。2.2 YOLO分割格式与常见数据集格式的差异如果你接触过COCO或者VOC格式的分割数据转YOLO格式的时候很容易绕晕。COCO用的是一组多边形坐标点来描述每个对象的轮廓VOC用的是PNG格式的掩膜图像mask image而YOLO分割格式用的是归一化后的多边形顶点坐标。举个例子COCO分割标注里的坐标是绝对像素值例如[[x1, y1], [x2, y2], ...]。转成YOLO格式时需要把每个顶点除以图像的宽度和高度得到0到1之间的相对坐标。同时需要注意两点第一YOLO分割标注文件是一个txt文件文件名为图像文件名相同后缀不同第二文件内每一行代表一个对象行首是类别ID后面跟着一串两两配对的归一化xy坐标。墙上一条形状不太规则的裂缝转成COCO格式时可能包含几千个坐标点但转成YOLO格式后理论上同样需要这么多点——但实际应用中我建议在标注阶段就把高密度的轮廓点简化一下控制在几十到两百个点以内。因为YOLO系列的模型训练和推理都需要把多边形转成掩膜顶点数过多不仅不会提升精度反而会增加计算开销。如果你手头的数据是原始图像加二值掩膜PNG格式还有一种更直接的转换路径用OpenCV读取掩膜调用cv2.findContours提取轮廓再对轮廓点做归一化写入txt。我在实际项目里写过很多次这个转换脚本后面会给出具体的实现。2.3 数据划分与目录组织方式拿到数据集之后第一步是把它组织成YOLO标准的目录结构。Ultralytics框架在训练时会自动读取images和labels两个目录每个目录下再按train、val、test划分子目录。我自己常用的目录结构是这样的crack_seg_dataset/ ├── images/ │ ├── train/ │ │ ├── img_0001.jpg │ │ ├── img_0002.jpg │ │ └── ... │ ├── val/ │ │ └── ... │ └── test/ │ └── ... ├── labels/ │ ├── train/ │ │ ├── img_0001.txt │ │ ├── img_0002.txt │ │ └── ... │ ├── val/ │ │ └── ... │ └── test/ │ └── ... └── dataset.yaml有一个细节很多人第一次会踩坑训练集和标签集的文件名必须完全一致包括前缀、数字补零方式都不能差。YOLO在读取时是直接用图片名去找对应的txt文件的文件名对不上训练的时候就只能看着loss曲线一路飘红报错但报错信息又不一定直白排查起来很头疼。再到dataset.yaml文件内容也很简单path: /absolute/path/to/crack_seg_dataset train: images/train val: images/val test: images/test nc: 1 names: 0: crack注意path字段建议写绝对路径我在项目里试过写相对路径有时候能跑通有时候就莫名其妙报“Dataset not found”不如一次写到底。nc是类别总数names是类别名列表顺序一定要和标注文件里的类别ID对应上。数据划分比例上我个人的建议是训练集、验证集、测试集按7:2:1的比例。有人说裂缝数据集样本少可以留更多给训练集但我觉得验证集太少的话训练过程中的早停和模型选择会产生很大随机性你根本不知道哪个epoch的效果是真的好。所以我宁愿训练集少一点也要保证验证集有足够多的样本。如果数据量确实紧张可以考虑用5折交叉验证来评估整体效果但日常快速迭代时7:2:1就够用了。3. 为什么选YOLOv8和YOLO11做裂缝分割3.1 YOLO分割模型的技术差异对比在很多传统图像分割项目里大家首先想到的是U-Net或者DeepLabV3这类语义分割网络。这些模型在医学影像分割上表现确实出色但放在墙体裂缝检测这个场景里会面临几个实际的问题推理速度不够快、部署方案不够灵活、对边缘设备的支持不友好。而YOLO系列的优势恰好体现在端到端的训练体验和高效的推理性能上特别是分割模型出现后检测和分割被统一到同一个框架里这对需要同时输出“哪里有裂缝”和“裂缝轮廓是什么样”的工程场景非常合适。从模型结构上看YOLOv8和YOLO11的分割分支采用了一种类似“检测头掩膜头”的双分支设计。检测头负责输出每个目标的类别和边界框掩膜头则负责在边界框内部生成像素级的掩膜预测。这种设计和Mask R-CNN那种两阶段方法有本质区别Mask R-CNN先做区域提议再逐区域分割精度高但速度慢YOLO是单阶段同时输出速度快配合适当的训练技巧精度也不会差太多。YOLO11相比YOLOv8最直观的变化是主干网络的C3K2模块替换了部分C2f结构以及引入了更精细的注意力机制。在墙体裂缝这种小目标、细线条、低对比度的场景下YOLO11的特征提取能力确实更强。我用同一组数据做过对比实验在相同训练轮数下YOLO11s的掩膜mAP50比YOLOv8s高出了大概2到3个百分点推理速度也快了接近15%。不过YOLOv8也并非完全落后它的生态更成熟网上能查到的示例代码和踩坑资料更多如果刚接触这个领域从YOLOv8起步会更平滑。3.2 数据格式与YOLO框架的天然适配性这个数据集标注成YOLO分割格式天然地省去了在线转换这一步。Ultralytics框架的训练入口直接接收txt格式的分割标注配合上面的dataset.yaml就能开训。不需要像用Mask R-CNN那样写一堆自定义Dataset类也不用像用MMDetection那样先转成COCO的JSON格式。在训练阶段如果你想做数据增强YOLO框架会自行处理标注的同步变换。比如随机翻转、缩放、旋转、色调抖动这些操作框架会在改变输入图像的同时把多边形坐标做对应的几何变换。这一点对于分割任务尤其重要因为裂缝这种目标天然地具有方向敏感性——水平裂缝、垂直裂缝、网状裂缝的形态差异很大。如果没有这样的同步增强机制你就要自己写坐标变换逻辑稍微忽略一个边角条件标签就全错位了。另外YOLO框架还内置了自动锚框计算、混合精度训练、多尺度训练等功能。混合精度训练对显存不充裕的同学是刚需我自己的显卡只有8G显存之前用FP32训练一个YOLO11m分割模型一个batch都可能爆显存开了AMP之后不仅不爆了训练速度还快了不少。多尺度训练则会周期性改变输入图像的尺寸让模型对墙体图像中不同距离拍摄造成的裂缝尺度差异更鲁棒。3.3 选型时的硬件与部署考量选了YOLO系列其实也是选择了部署的便利性。墙体裂缝检测的应用场景很广既有部署在无人机上做外墙检测的也有部署在工业平板上做室内墙面巡检的还有在服务器端做批量图像分析的后台系统。YOLO模型可以导出成ONNX、TensorRT、CoreML、OpenVINO等格式基本覆盖了主流边缘设备和云端推理框架。我在一个实际项目中用YOLOv8s-seg导出成TensorRT的engine文件在NVIDIA Jetson Orin Nano上跑到了接近80FPS的推理速度同时还能稳定输出裂缝的掩膜。换成传统的分割模型比如DeepLabV3就算是以速度为卖点的MobileNet版本也远达不到这个帧率。这就是为什么我笃定选YOLO来做墙体裂缝分割——它不是每个单项指标最强的但它是最适合落地的那条路。4. 实操全流程从数据准备到模型训练4.1 环境配置与依赖安装先说我实际验证过的环境组合。操作系统我用的是Ubuntu 20.04和22.04Windows 10和Windows 11也跑通过但整体体验不如Linux顺畅。Python版本建议3.9或3.10PyTorch用1.13或2.0以上的版本Ultralytics包建议直接装最新稳定版。安装命令很简单在一个干净的虚拟环境里执行conda create -n yolo_crack python3.10 conda activate yolo_crack pip install ultralytics torch torchvision如果用的是NVIDIA显卡建议提前装好对应版本的CUDA和cuDNNPyTorch官方页面有非常清晰的conda安装命令。如果只有CPU也能训练就是速度慢到让人怀疑人生建议至少用一块入门级显卡起步。安装完成之后验证一下环境是否正常from ultralytics import YOLO model YOLO(yolo11n-seg.pt) results model.train(datacrack_seg_dataset/dataset.yaml, epochs1, imgsz640)第一次运行会自动下载预训练权重网络正常的话不会有问题。如果下载不动可以手动从Ultralytics的GitHub Release页面下载对应权重文件放到项目目录下。4.2 将自有数据转换为YOLO分割格式假设你手里的数据不是现成的YOLO格式而是“图像 二值PNG掩膜”这是最常见的情况。下面这个脚本可以直接把掩膜转换成YOLO分割标注import cv2 import numpy as np import os def mask_to_yolo(mask_path, img_width, img_height, class_id0, max_points200): mask cv2.imread(mask_path, cv2.IMREAD_GRAYSCALE) _, binary cv2.threshold(mask, 127, 255, cv2.THRESH_BINARY) contours, _ cv2.findContours(binary, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE) lines [] for cnt in contours: epsilon 0.001 * cv2.arcLength(cnt, True) approx cv2.approxPolyDP(cnt, epsilon, True) points approx.reshape(-1, 2) # 如果轮廓点太多进一步均匀采样 if len(points) max_points: idx np.linspace(0, len(points) - 1, max_points).astype(int) points points[idx] line f{class_id} for x, y in points: line f{x / img_width:.6f} {y / img_height:.6f} lines.append(line.strip()) return lines这段脚本做了两件关键的事一是用RETR_EXTERNAL只提取外部轮廓避免裂缝内部的小孔洞产生多余的标注对象二是用approxPolyDP做轮廓近似把标注文件控制在一个合理的体积。对于一条细长的裂缝轮廓点动辄上千个不简化的话训练时数据加载和掩膜重建都会变慢。另一个值得注意的点掩膜图像上如果有零散的噪点比如几个像素的小白块这些会被误判成微型裂缝。我的建议是在提取轮廓之前先用形态学开运算把噪点滤掉。开运算的核大小不要太大用3×3的十字结构元素就够太大可能把细裂缝的轮廓弄断。转换完成后一定要做可视化校验。最直接的方式是把标注点重新画到原图上肉眼检查是否有错位或漏标。这一步不能省。我见过有人直接用脚本转完就开训结果训练到一半发现标签偏移整个数据集都要重做浪费的时间比标注本身还多。import cv2 def draw_yolo_labels(image_path, label_path, output_path): img cv2.imread(image_path) h, w img.shape[:2] with open(label_path, r) as f: for line in f: parts line.strip().split() cls_id int(parts[0]) points np.array([float(x) for x in parts[1:]]).reshape(-1, 2) points[:, 0] * w points[:, 1] * h points points.astype(np.int32) cv2.polylines(img, [points], True, (0, 0, 255), 2) cv2.imwrite(output_path, img)把校验图批量生成出来翻一遍基本就能确认格式是否正确。4.3 YOLOv8与YOLO11训练命令与参数解析数据准备完毕训练这一步其实很简单。Ultralytics框架把训练封装到了极致一行命令就能启动。YOLOv8训练yolo detect train \ datacrack_seg_dataset/dataset.yaml \ modelyolov8s-seg.pt \ epochs100 \ imgsz640 \ batch8 \ device0 \ projectcrack_yolo8 \ nameseg_runYOLO11训练yolo detect train \ datacrack_seg_dataset/dataset.yaml \ modelyolo11s-seg.pt \ epochs100 \ imgsz640 \ batch8 \ device0 \ projectcrack_yolo11 \ nameseg_run两个训练命令几乎一模一样差别只在预训练权重上。这里我用的是s版本如果你显卡配置很高可以换成m、l甚至x版本如果你只有4G显存老老实实用n或者nano版本否则一个batch都塞不进去。关于超参数有几个值得说的点epochs我建议至少100起步。墙体裂缝属于小目标模型需要足够的迭代次数才能稳定收敛。我用同一个数据集对比过50轮和150轮50轮的mask mAP50只有0.72左右150轮能到0.85以上。如果时间充裕配合早停机制让模型自己决定什么时候停效果会更好。batch的设置受限于显存。8G显存跑s模型batch8配imgsz640已经很勉强了如果再开Mosaic增强显存占用会直接飙升。如果提示OOM优先减小batch其次再考虑减小imgsz因为imgsz直接影响裂缝这种小目标的检测效果。imgsz有两个考虑维度。模型训练时输入分辨率越高小裂缝的细节保留得越多分割越精确但训练和推理速度都会变慢。实际墙体图像如果是手机拍的分辨率通常在3000×4000级别直接缩放到640×640会有大量信息丢失。我的建议是训练时用640或768推理时再按实际场景测试不同分辨率找一个速度与精度的平衡点。如果训练过程中发现验证集的mAP一直不涨可以尝试调一下优化器参数yolo detect train \ datacrack_seg_dataset/dataset.yaml \ modelyolo11s-seg.pt \ epochs200 \ imgsz640 \ batch8 \ lr00.005 \ lrf0.01 \ optimizerSGD \ weight_decay0.0005有些经验论调说AdamW在分割任务上更快但我实测下来SGD配合适当的warmup和余弦退火收敛更稳最终mAP反而高一点。当然这个结论不绝对数据量够大时两者差距会缩小。如果你愿意折腾可以两个优化器都跑一遍对比。4.4 训练过程中的实时监控与评估训练开始后Ultralytics会在终端打印进度条同时把loss、mAP50、mAP50-95这些指标记录到results.csv文件里。我建议一边训练一边用TensorBoard监控loss曲线的走势tensorboard --logdircrack_yolo11/seg_run训练过程中重点看两个指标train/seg_loss和val/seg_loss。如果训练loss持续下降但验证loss不降反升说明模型开始过拟合了。对于裂缝数据集这种规模不算很大的场景过拟合是很常见的问题后面我会专门讲怎么处理。每个epoch结束框架会保存当前权重到crack_yolo11/seg_run/weights/目录下包括last.pt和best.pt。best.pt是根据验证集mAP50-95选出来的最优权重训练结束后用它做推理和导出。我想特别提醒一下很多初学者看到val/seg_loss很小就以为模型很好了这是错觉。对分割任务来说mAP50-95才是更值得关注的指标。mAP50只关心预测掩膜和真实掩膜的交并比是否超过0.5标准比较宽松mAP50-95则是在多个IoU阈值下取平均更能反映分割边界的精确性。我做裂缝分割时mAP50可能达到0.86但mAP50-95只有0.52差距非常大。如果项目对裂缝轮廓的精度要求高务必多看mAP50-95。5. 训练坑点与排查技巧实录5.1 裂缝小目标训练不收敛的常见原因墙体裂缝在整幅图像中通常只占很小一部分像素面积尤其是那些宽度只有1到2毫米的细裂缝在640×640的输入下可能只有几个像素宽模型很难抓住这些特征。我遇到训练不收敛的情况第一反应就是检查数据增强是否开的太猛。Ultralytics默认的Mosaic增强会把四张图拼在一起如果数据集中裂缝本来就小拼接之后有效信息进一步被稀释模型训练起来非常吃力。我的建议是在配置里把mosaic参数调低比如设为0.5或者干脆在训练前期关掉Mosaicmodel.train(..., mosaic0.5)另一个容易忽略的问题是类别不平衡。如果训练集中只有裂缝这一类不存在类别不均衡但如果加入了“背景”或“其他缺陷”类别而背景图像占比很高模型可能会倾向于把所有区域都预测为背景。解决办法是适当调整loss权重或者对背景类别的图像做欠采样。如果你发现预测的裂缝掩膜总是比真实裂缝大一圈说明模型学到了裂缝周围的阴影或纹理特征而不是裂缝本身。可以通过增加图像亮度对比度的数据增强来缓解让模型更关注裂缝的线条结构。5.2 标注质量问题导致分割精度上不去分割模型的性能上限很大程度上被标注质量卡死了。墙体裂缝的边界天然模糊不同标注者画出的轮廓会有不少差异。同一张图两个人标注的IoU可能只有0.6到0.7模型在这类数据上训练学到的是一个“平均”的裂缝轮廓自然会感觉糊糊的。我处理过一批质量很差的数据集裂缝边缘标注得很粗糙有的地方甚至把整块脏污都圈进去了。模型训练完后mAP50看着还行但可视化预测结果发现模型把墙面上的水管阴影、电线槽、砂浆痕迹都当成了裂缝。排查之后发现根源不是模型问题是标签本身有误导。如果你自己准备数据我建议在标注阶段就建立一套清晰的标准裂缝连续且宽度大于2像素的必须标注边缘阴影如果和裂缝视觉特征相似尽量作为难样本保留但标注准确完全无法判别的模糊区域宁可放弃也不要乱标。一套干净的数据集比任何模型结构改进都重要。5.3 推理阶段掩膜后处理与可视化训练完成后推理其实也要做一点后处理才能把输出变成真正可用的结果。YOLO分割模型输出的是每个目标的掩膜概率图需要经过阈值分割才能得到二值掩膜。Ultralytics框架封装了这部分逻辑直接用model.predict就能得到掩膜但如果你需要把掩膜变成矢量多边形用于工程计算就得自己做一步轮廓提取。我在实际项目中会把掩膜结果转成矢量多边形后再计算几个工程指标裂缝的长度用轮廓中轴线长度估算、最大宽度计算中轴线上每个点到轮廓的最短距离的两倍、以及裂缝总面积。这些数据对建筑检测报告非常重要单靠人工测量一天未必能干完模型预测加上自动计算几分钟就能出全部指标。可视化也有讲究。我建议把预测掩膜叠加到原图上时用半透明的红色同时保留原始图像灰度这样工程师一眼就能看出裂缝位置和周边结构的关系。from ultralytics import YOLO import cv2 import numpy as np model YOLO(crack_yolo11/seg_run/weights/best.pt) results model.predict(test_wall.jpg, conf0.25, iou0.5) img cv2.imread(test_wall.jpg) overlay img.copy() for result in results: if result.masks is not None: for mask in result.masks.data: mask_np mask.cpu().numpy().astype(np.uint8) mask_resized cv2.resize(mask_np, (img.shape[1], img.shape[0])) overlay[mask_resized 1] (0, 0, 255) blended cv2.addWeighted(img, 0.6, overlay, 0.4, 0) cv2.imwrite(result_overlay.jpg, blended)5.4 从单卡训练到高效迭代的几条经验关于训练节奏我最后分享几条自己的经验。第一不要一上来就用最大的模型。先用nano或者small版本跑通整个流程确认数据格式、标签、评估流程都没问题再升级到更大的模型。我见过有人直接拿YOLO11x-seg训练跑了一天一夜发现数据路径配置错了这种是最伤的。第二训练过程中每隔一段时间手动看一下验证集的可视化结果不要只盯loss曲线。loss低不代表分割结果就合理只有看到实际的掩膜叠加图你才知道模型到底学到了什么。我通常每50轮输出一批验证集预测结果翻一翻比看任何指标都直观。第三如果数据量真的很小比如只有两三百张图可以考虑用迁移学习。加载在COCO上预训练的权重只冻结部分层把训练重点放在分割头和最后几层特征提取模块上。Ultralytics虽然没有直接暴露冻结层的参数但可以自己改Trainer类实现。对于裂缝这种特殊目标预训练模型学到的通用边缘和纹理特征非常有用比从零训练收敛快得多。第四多保存中间结果。每次训练跑完我会把results.csv、confusion_matrix.png、F1_curve.png、PR_curve.png这些文件归档好方便后续对比不同实验配置的效果。6. 总结与个人实践体会做了这么多年的视觉检测项目我最大的感受是数据集的质量直接决定模型的下限而模型的选型和调参决定的是上限。墙体裂缝这种目标形态复杂、背景干扰多、标注主观性强想拿到一个真正能上线使用的模型数据集和训练策略两边都要下功夫。这个数据集配合YOLOv8和YOLO11的训练路径算是我目前见过门槛最低、见效最快的一条路线。你不需要写复杂的网络结构代码也不需要理解特别深的数学原理只要数据格式正确、参数设置得当就能在相对短的时间内训练出一个不错的分割模型。当然如果后续你要做更精细的工程应用比如自动生成检测报告、裂缝宽度实时测量、多面墙体的三维重建映射就需要在模型输出后处理上继续投入精力。最后再分享一个小技巧模型训练完别急着收工把验证集里预测效果最差的几十张图单独拿出来分析你会发现它们几乎都是同一个类型的问题——比如低光照、阴影遮盖、或者是极细的裂缝。针对这些问题做定向的数据补充和增强模型效果提升会比你换个更大的模型更明显。这个“坏案例驱动迭代”的思路我在多个裂缝检测项目里验证过非常有效。本文还有配套的精品资源点击获取
返回列表