室内墙面缺陷检测数据集全解析:VOC/YOLO格式与训练实操指南 做室内墙面缺陷检测的AI项目最难的不是模型选型而是数据本身。墙面问题的呈现方式千奇百怪剥落可能是一整片脱落也可能只是边缘起翘滴痕是细长的流挂还带着颜色差污渍的边界模糊到人眼都难以圈定。如果你正准备训练一个能自动识别墙面问题的检测模型用带VOC和YOLO双标注格式的3011张图、6个类别来起步是最省力气的路径。这套数据覆盖面比较典型既有油漆剥落这样的面状缺陷也有滴痕这种条状目标还包括表面不平这种需要借助光影才能看出来的立体问题基本覆盖了室内墙体质量评估、家装验收、二手房勘测等场景里高频出现的问题类型。这篇就围绕这套墙面检测数据集展开从类别拆解、标注格式细节、实操训练建议到排查经验把从数据到模型落地的关键环节捋一遍。无论你是刚入门目标检测还是已经在做建筑相关视觉项目下面这些内容都能直接用到。1. 项目概述与需求拆解1.1 核心场景定位墙面缺陷检测到底解决什么问题建筑墙面的传统质检方式是人工巡检拿着强光手电和靠尺一间一间看发现空鼓还要用小锤敲击听声音。这种方式费时费力而且检查结果受个人经验影响很大同一个墙面不同人打分可能截然不同。墙面问题数据集的价值就是把这一套依赖人工经验的判断过程标准化、自动化。室内墙面检测自动化的核心应用场景有几个一是批量房产勘测比如长租公寓运营商收房时快速判断墙面整体状况二是施工质量复核装修公司交付前自查或者在进场时确认上一道工序是否达标三是保险理赔评估中的定损环节四是老旧建筑定期体检中作为前端信息采集的辅助判断。这些都是需要快速、客观评估墙面状态的场景而人工方式在效率上很难满足批量化的需求。3011张图的规模放在目标检测任务里算是中等偏小的数据集但它对应的是单场景、有限类别的细分任务这个体量配合合适的训练策略完全够用。实际上墙面缺陷的形态复杂度远低于通用物体检测同一面墙的剥落和另一面墙的剥落在视觉特征上有很强的共性模型的泛化压力不像做自动驾驶或者遥感影像那么大。1.2 六类目标初步判定与语义边界标题中明确点出的类别是油漆剥落、滴痕、污渍、表面不平这四类六类别中的另外两类按照建筑墙面检测的通用实践和市面上相似数据的惯例来推断大概率是开裂和发霉这两类常见墙面问题。先明确这套数据的六类目标各自是什么形态。剥落是墙面涂层成片脱离基底露出腻子层或水泥层特征是边界不规则且颜色跳变剧烈滴痕是液态涂料或胶体在墙面流挂形成的痕迹特征是竖向条状、有厚度感末端常常有泪滴状积聚污渍是一般性污染涵盖手印、脚印、墨水渍、油烟渍等特征是颜色异常但无立体感表面不平指墙面平整度不达标可能整体凹凸也可能局部鼓起凹陷在平光条件下虽然颜色接近但能靠阴影判断出来开裂是墙面出现线状或网状裂缝裂缝宽度从发丝级到毫米级都有发霉是墙体在潮湿环境下滋生的霉菌群落特征是深色斑块常有黑、绿、灰等颜色伴随絮状边界。六类之间在视觉上确实有交叉地带这也是标注阶段最容易产生分歧的地方。比如剥落周围经常伴随开裂大片霉斑边缘会有类似于污渍的痕迹滴痕老化之后与污渍难以区分。这类语义边界问题需要数据集在标注规范里给出明确优先级规则实际操作中以“最显著的主要缺陷”作为标注依据。2. 数据集格式与结构细节解析2.1 VOC格式目录结构与读取方式VOC格式在目标检测领域的地位相当于通用交换格式它的核心是每张图片对应一个同名的XML文件XML里记录图片尺寸、目标类别和真实框坐标。这套数据的目录结构应当是标注者按VOC规范整理好的标准布局dataset/ ├── Annotations/ # 存放XML标注文件与JPEGImages一一对应 │ ├── img_0001.xml │ ├── img_0002.xml │ └── ... ├── JPEGImages/ # 存放原始图片JPG或PNG格式 │ ├── img_0001.jpg │ ├── img_0002.jpg │ └── ... └── ImageSets/ # 存放数据集划分文件 └── Main/ ├── train.txt # 训练集图片名列表 ├── val.txt # 验证集图片名列表 └── test.txt # 测试集图片名列表单个XML标注文件的内容大致是annotation folderJPEGImages/folder filenameimg_0001.jpg/filename size width1280/width height720/height depth3/depth /size object namepeeling/name bndbox xmin320/xmin ymin180/ymin xmax589/xmax ymax412/ymax /bndbox /object object namestain/name bndbox xmin641/xmin ymin530/ymin xmax878/xmax ymax689/ymax /bndbox /object /annotation用Python解析VOC格式时我习惯直接用XML解析库逐节点读取不依赖检测框架内置的数据加载器。这样灵活度最高数据清洗或格式转换时不会受到框架限制。XML中读取的四个坐标值都是整数像素坐标左上角和右下角的定义非常明确边界条件要特别注意有些标注工具的坐标从0开始有些从1开始转换时要统一加减一否则模型学到的框会系统性偏移一个像素。这种偏移虽然对检测精度影响不大但如果你后续做像素级后处理或框校准就会很麻烦。2.2 YOLO格式与转换逻辑YOLO格式是目标检测生态中最常见的标注存储方式和VOC格式的核心差异有两个坐标被归一化到0-1之间且单独一个txt文件对应一张图。YOLO格式的一条标注长这样2 0.355469 0.383333 0.410156 0.322222这行数据的含义按顺序解读第一个数字是类别ID第二、三个数字是目标中心点的坐标归一化宽、归一化高第四、五个数字是目标框的宽度和高度归一化宽、归一化高。从VOC转换到YOLO的计算方式是# VOC坐标: xmin, ymin, xmax, ymax # 图片宽高: img_width, img_height x_center ((xmin xmax) / 2) / img_width y_center ((ymin ymax) / 2) / img_height box_width (xmax - xmin) / img_width box_height (ymax - ymin) / img_height反过来从YOLO转VOCxmin int((x_center - box_width / 2) * img_width) xmax int((x_center box_width / 2) * img_width) ymin int((y_center - box_height / 2) * img_height) ymax int((y_center box_height / 2) * img_height)这里有一个高频坑点YOLO格式的归一化坐标是0到1的浮点数但有的转换代码里会直接输出超过1的值。原因很简单——原VOC框本身就越界了比如目标紧贴图片边缘时标注者的框可能部分落在画布外。手工标注时我一般会提醒标注员框坐标不允许超出图像区域在转换代码里加个裁剪逻辑兜底。解压数据集后先写个简单脚本检查有没有坐标范围违规的标注这套检查流程不该跳过。2.3 类别ID确认与names文件匹配YOLO格式的标注文件里只存类别数字ID类别名和ID的对应关系在单独的names文件里维护。拿到这份数据后第一件事就是看类别列表文件确认类别顺序和你后续训练时的配置一致。根据标题推断的类别映射可能是0: peeling(剥落) 1: drip(滴痕) 2: stain(污渍) 3: uneven(表面不平) 4: crack(开裂) 5: mold(发霉)训练时YOLOv系列的模型配置文件里需要维护一份完全一致的类别名列表。这里最容易出问题的情况是数据集的names文件里类别顺序和你在训练脚本里写的顺序不一致或者标签文件里的类别ID与names文件对应错位。如果训练时发现某个类别的检测结果一直很差先怀疑类别ID是否错位尤其当你的训练脚本里给每个类起过自定义名字时。注意拿到数据后第一步先做一次格式体检用脚本把所有标注文件解析一遍统计类别分布、检查坐标越界、确认每张图与标注文件一一对应。这一步花不到五分钟能帮你避开后面好几个小时的踩坑时间。3. 数据集统计与分布特征分析3.1 总体规模与常见数据划分比例3011张图的规模应对六类目标检测任务关键指标不是总量而是每一类的有效样本量。假设平均每张图包含1到2个标注目标总体实例数大约在4000到6000之间。对大目标检测模型来说六类总共4000到6000个实例算偏低但墙面检测这种形态相对固定的任务场景类别内差异不大这个量级经过合理增强后训练出来的模型在相似场景下完全可用。数据划分我建议按7:2:1执行也就是约2108张用于训练、602张用于验证、301张用于测试。划分时一个容易忽略的原则是同一面墙或同一房间的多张连续照片不能同时出现在训练集和验证集否则模型其实是在开卷考试——验证集里出现了与训练集几乎相同的内容最终指标虚高。拿到这套数据后先检查原始采集方式如果是连续拍摄序列按照场景来分组然后整组划分不要让同场景图片被随机割裂到不同集合。YOLO系列训练时框架会自动按比例切分训练集和验证集但我不建议直接用默认的随机切分手动划分后用txt文件控制数据加载路径会更稳妥也能避免某些训练框架在程序重复执行时产生不同的切分结果。3.2 类别不平衡问题的预判与对策六类墙面缺陷的发生概率天然不均衡。剥落、污渍、开裂在真实场景里最常见样本量大概率偏多滴痕通常集中在涂刷施工质量差的墙面样本量中等发霉与房屋潮湿程度强相关表面不平的视觉特征相对隐蔽采集和标注的成本最高样本量可能最少。类别不平衡在目标检测里的应对策略有多种最简单的做法是增加少样本类别的图片复制次数也就是过采样把数量少的类别对应图片在训练时多喂几遍另一种方式是在损失函数层面调整给样本少的类别更大的损失权重。不过在使用YOLO系列时我的经验是尽量少动损失函数优先做数据层面的平衡处理。从标注角度补样本还有一招很多墙面缺陷在同一张图里出现多次比如一面墙上多处长霉斑标注时把这些实例全部标记出来就相当于用一张图贡献了多个正样本。同类的污渍也经常以多实例形式出现批量勘测照片里的重合目标比想象的多。3.3 分辨率与标注框尺寸分布的常见规律室内墙面采集照片的分辨率从1080p到4K都有可能标注时一般会先统一到固定尺寸再标注。墙体缺陷目标的大小分布有一个明显规律剥落和污渍通常是画面中的中大型目标框可能占据整张图的四分之一到三分之一开裂和滴痕则是细长型目标宽度方向的归一化值可能只有0.05到0.1但高度或长度方向的数值很大。细长目标在YOLO系列模型里比较吃亏尤其是多次降采样后特征图上可能只剩下几个像素的响应。训练时如果发现crack和drip这两个类别的召回率一直上不去先把输入分辨率调高是一个简单有效的尝试。在YOLOv8的配置文件里增大输入尺寸从默认的640提升到960或1280对细长框检测有肉眼可见的改善。经验墙面缺陷检测任务和通用目标检测最大的不同在于目标尺度跨度大。贴脸拍的滴痕特写和站在房间角落拍的全景照片里同一个缺陷在像素尺寸上可能差10倍。这种尺度差异靠多尺度训练和自适应缩放来处理数据层面可以在标注时把极大和极小的目标都纳入保持尺度多样性避免模型只见过中尺度目标。4. 六大类别的视觉特征与标注策略4.1 剥落不规则面状缺陷的边界判定剥落类目标在视觉上的特征非常鲜明涂层起翘、成片脱落、边缘呈锯齿状或不规则弧线脱落区域露出不同层次的底色。标注剥落时的核心争议在于边界怎么定——有些区域的涂层已经明显缺失边缘清楚有些区域虽然涂层还在但已经大面积起鼓随时可能剥落。标注规范上应当约定只有已经出现明显涂层缺失的区域才标注为剥落起鼓但未脱落的不算剥落可以并入表面不平。若起鼓区域内部已经出现局部破口就以破口区域为边界标注。剥落框通常是接近矩形的多边形状标注框会比实际缺陷区域大一圈把不规则轮廓包在一个相对紧凑的矩形框里。框画大了会把过多正常墙面包进来给模型引入噪声画小了又把边缘的不规则部分排除在外导致推理时预测框与真实区域贴合不好。实际标注时我要求工人框尽量贴合剥落区域的外接矩形可以比视觉轮廓略大但不能超过目标1.2倍。4.2 滴痕细长条状目标的方向与范围界定滴痕的产生原理是液态涂料在墙面垂直流动过程中固化留下一条颜色与周围明显不同的痕迹。它的形态特点是方向性强、宽度窄、长度大末端常有积聚的滴珠。细长目标在检测框标注中有一个特殊性目标框的面积很大但实际目标像素占比很低。标注滴痕时框的宽度方向要贴合实际痕迹的宽度不能为了“稳妥”把框放宽。反过来说如果存在两条平行的相邻滴痕由于框是矩形可能会把它们框进同一个检测框内模型学到的是两条痕的并集这对训练没有好处。标注规范应当约定相互独立的滴痕目标分别标注如果两条滴痕相隔很近在同一矩形区域内重叠就按一个目标处理不强行拆分。滴痕的颜色差异有时较弱比如白色墙面上半透明的清漆滴痕在采集照片的光照到位的情况下才可见。这种目标对图片整体亮度敏感训练增强里适度加亮度抖动可以让模型对光照变化更鲁棒。4.3 污渍一般性污染的多形态兼容污渍是六类里最“杂”的一类。墨水渍、油渍、咖啡渍、手印、霉斑初期痕迹可能都被归入污渍颜色有深有浅形状有圆有尖。标注上的核心矛盾是污渍和发霉的区分。我的建议是按颜色和纹理来区分霉斑通常是黑、灰、绿等颜色的不规则斑块表面有绒毛质感污渍多呈棕色、黄色、透明或接近黑色的液体渗透痕迹表面质感不明显。如果两者边界实在模糊就归入污渍一类。污渍的框边界同样存在模糊问题。很多污渍是渗透型的边缘没有清晰界线颜色从深到浅逐步过渡。标注时的可行策略是框住视觉上最深、最明显的区域不要把浅色边缘全部包含进来。注意标注墙面缺陷时一定要在规范里写明“标注的是缺陷区域的外接矩形而不是整个问题区域的最小凸包”。这一条看着像废话实际执行时很多标注员会按自己对“这一片全是问题”的主观判断画框导致框的尺寸波动很大严重影响模型收敛。4.4 表面不平最难标注的立体缺陷表面不平是所有墙面缺陷里对标注员考验最大的一类因为它本质上不是颜色或者纹理变化而是表面几何形态的起伏。在正面平光照片里一块轻微凹陷的区域和正常墙面几乎没有颜色差异只能靠侧光产生的阴影或者反射变化来判断。采集时为了捕捉这种缺陷通常需要改变拍摄角度或使用辅助光源。如果数据集里表面不平的样本量明显低于其他类别这并不一定代表实际场景中问题少见只是采集难度高导致的样本偏少这可以通过增加侧光拍摄来补。标注表面不平时框应该覆盖鼓包或凹陷的可见边界区域。对于大面积的波浪状不平整可以在显著起伏的局部位置标多个小框每个框覆盖一个可独立识别的鼓包或凹陷区域。这种“大问题拆小框”的标注方式在训练中能提供更清晰的位置监督信号。4.5 开裂与发霉的补充细节依赖开裂类目标中发丝裂缝在普通分辨率照片里几乎是不可见的。如果数据集中的开裂样本以细裂缝为主模型推理时漏检是正常的因为目标本身就不具备稳定像素特征。补充采集时用侧光照射可以让裂缝形成明显的阴影线如果数据集中以宽裂缝和网状裂缝为主训练出来的模型会倾向于只检出较宽的开裂对细裂缝的预测能力有限。评估模型时对开裂类的mAP建议单独看小目标的指标不要用全部目标的平均分衡量这个类别的效果。发霉类目标的特征是深色斑块带絮状边缘在湿度大的区域蔓延呈大片状或点状分布。标注发霉时按单块连续霉斑作为独立目标标注霉斑之间存在明显空白分隔就拆开。灰尘积累和霉斑初期形态容易混入污渍类判断标准仍然看纹理和颜色倾向。5. 模型训练实操与工程落地建议5.1 数据集格式适配与训练框架配置这套数据集的VOC和YOLO双格式特性让你在框架选择上有较大的自由度。直接用YOLO格式训练YOLOv8或YOLOv11最省事如果你想尝试更复杂的检测框架就使用VOC格式配合数据加载器来接入。以YOLOv8为例训练前的检查和配置流程如下。第一步是写一个校验脚本检查整套数据的完整性import os from pathlib import Path data_dir Path(dataset) img_dir data_dir / images label_dir data_dir / labels labels list(label_dir.glob(*.txt)) imgs list(img_dir.glob(*.jpg)) list(img_dir.glob(*.png)) print(f图片数量: {len(imgs)}) print(f标注数量: {len(labels)}) # 检查同名文件是否一一对应 img_stems {p.stem for p in imgs} label_stems {p.stem for p in labels} missing_labels img_stems - label_stems missing_imgs label_stems - img_stems if missing_labels: print(f缺少标注的图片: {len(missing_labels)}张) if missing_imgs: print(f缺少图片的标注: {len(missing_imgs)}个)第二步是检查标签内容是否合法import numpy as np bad_lines [] for label_path in labels: with open(label_path, r) as f: lines f.readlines() for line in lines: parts line.strip().split() if len(parts) ! 5: bad_lines.append((label_path, line)) continue cls_id, x_center, y_center, w, h parts x_center, y_center, w, h map(float, (x_center, y_center, w, h)) if not (0 x_center 1 and 0 y_center 1 and 0 w 1 and 0 h 1): bad_lines.append((label_path, line)) print(f异常标注行数: {len(bad_lines)}) for path, line in bad_lines[:10]: print(f{path}: {line.strip()})第三步是写YOLO训练用的数据配置文件# wall_defect.yaml path: /path/to/dataset/ train: train.txt # 或 images/train 目录 val: val.txt # 或 images/val 目录 names: 0: peeling 1: drip 2: stain 3: uneven 4: crack 5: mold提示server端训练时注意核对路径。很多复现失败问题不是模型代码的问题而是data.yaml里路径写错或者train.txt里的图片路径是相对路径但在别的工作目录运行导致找不到文件。路径全部改成绝对路径可以省去大量无谓排查。5.2 训练参数选择与数据增强策略基于这套数据集的规模和场景特性我的训练起步建议如下输入分辨率1280x1280或960x960。墙面缺陷尤其是细长的裂缝和滴痕在低分辨率下特征损失严重。训练轮数默认的300轮可能偏多早停法配合验证集上的mAP曲线来判断真正合适的收敛点。墙面检测任务通常在150到200轮左右就能达到不错的效果。Batch size根据显存尽量加大常规24GB显存跑YOLOv8m可以做到16或32。数据增强Mosaic、MixUp等通用增强保持默认HSV扰动中的饱和度和亮度扰动适度增强因为墙面照片在不同光线下的色彩偏移较大。迁移学习使用预训练权重而不是随机初始化预训练模型学到的纹理和边缘特征对墙面缺陷检测有显著帮助尤其能缓解小样本类别训练不足的问题。训练过程中的监控重点有两个一是训练集和验证集的损失曲线是否同步下降如果训练损失还很高但验证损失已经反弹说明过拟合开始需要提前停止或增强正则二是各个类别的PR曲线单独看每个类别而不是只看总的mAP因为类别不平衡会导致多数的剥落和污渍拉高整体指标掩盖少样本类别的低召回问题。5.3 模型部署与推理侧图像预处理训练完模型后实际的部署场景里输入图像通常来自手机、监控截图或者扫描文档与训练数据的拍摄条件有明显差异。推理侧的预处理要注意几点一是缩放方式。YOLO系列的letterbox填充在墙面缺陷检测里要注意填充色对结果的影响。墙面照片通常是浅色的如果填充色用默认灰色在模型看来图像的边缘区域会出现一圈奇怪的色块对紧贴墙角的缺陷检测有一定干扰。实测下来将填充色设置为训练集中最常见的墙面颜色平均值推理结果更稳定。二是重叠检测框的抑制。墙面缺陷的排布经常是密集的比如一面墙上多处剥落区域相邻检测出大量互相重叠的框。NMS的IoU阈值调到0.5以下通常能让相邻的缺陷目标保留得更合理。如果同一个墙面缺陷被预测出两个重叠框且置信度都很高那大概率是NMS阈值设置偏松。三是推理结果的后处理。墙面缺陷检测不同于通用物体检测它对框的精确位置要求更高因为后续可能要自动生成维修工单或者计算缺陷面积占比。一个与实际剥落区域贴合不好的框会让面积估算出现巨大误差。如果实际项目对面积估算有需求建议在检测之后加一个分割后处理步骤比如用检测框裁剪图像后跑一个简单的像素级分割来确定缺陷精确轮廓框回归的精度用经过充分标注的测试集单独评估。6. 常见问题与避坑指南6.1 数据层面的高频坑第一个坑是标注格式转换时坐标越界。VOC转YOLO过程中框边界贴近图像边缘就会产生大于1或小于0的坐标值有些框架训练时会报错有些则是静默把这些标注当作无效样本丢掉。我在一个项目上遇到过标签文件里统计到的有效样本数比实际object数量少几百个的情况排查到最后就是这个问题。解决办法是在转换脚本里统一做数值裁剪同时解析时跳过越界样本并输出日志。第二个坑是类别数量声明不一致。有的模型配置文件里写了6类但实际使用了预训练模型带的80类COCO权重这时需要将模型的检测头层数和参数完全替换否则加载权重时会报shape不匹配或更糟糕的是静默加载成功但分类层的初始化参数混乱。在YOLOv8中修改yaml的nc参数后重新训练即可自动适配。第三个坑是训练集验证集划分时泄露。如果数据采集时同一面墙连续拍了好几张照片手动划分数据时没有按场景隔离验证集的mAP会在训练初期就异常高且不稳定——模型看到的验证图片和训练图片几乎一样。正确做法是根据原始采集目录结构按房间或墙面分组再分组随机划分。6.2 标注与类别混淆的排查训练效果不佳时先可视化一批标注结果确认数据质量而不是急于调整模型结构。可视化方法很简单用opencv读取图片将标注框画出来直接保存成新图片。import cv2 img cv2.imread(img_0001.jpg) with open(img_0001.txt, r) as f: lines f.readlines() h, w img.shape[:2] for line in lines: cls_id, xc, yc, bw, bh map(float, line.strip().split()) x1 int((xc - bw / 2) * w) y1 int((yc - bh / 2) * h) x2 int((xc bw / 2) * w) y2 int((yc bh / 2) * h) cv2.rectangle(img, (x1, y1), (x2, y2), (0, 255, 0), 2) cv2.imwrite(visualized.jpg, img)画出来之后容易发现三类问题一类是框明显偏移目标位置说明标注质量差第二类是框的大小普遍偏大或偏小说明标注规范执行不一致第三类是类别标错比如把滴痕标成了污渍。这一轮可视化检查应该每类随机抽几十张来看不用全看但每个类都必须覆盖到。如果可视化后发现绝大多数标注是准确的模型效果仍然不理想再看数据增强或者模型结构调整。6.3 模型训练结果异常与调参实践训练过程出现mAP为0或极低的情况优先排查三个方向第一个方向是类别ID或标签文件本身有问题。检查训练日志里的batch构成确认每批数据中各个类别的样本分布与预期一致。第二个方向是学习率设置不当。迁移学习时如果整个模型使用同一个学习率尤其是用相对大的学习率比如0.01训练预训练权重可能直接被冲掉。YOLOv8的默认学习率通常安全但如果你改过optimizer或者层级学习率建议先用默认参数跑一版确认代码链路没有问题再调整。第三个方向是损失函数中类别权重失衡。墙面缺陷里如果表面不平或滴痕的样本极少又没有配置任何平衡策略模型可能把所有预测都推到占多数的类别上。检查预测结果的类别分布如果某一类占据了绝大部分预测框这就是样本不平衡的典型表现。关于模型选择我的建议是从轻量级版本开始。墙面缺陷检测对实时性的要求不算苛刻但部署环境常有资源限制。在3011张图这个数据规模下用最小的模型规模起步先跑通流程并得到合理的baseline然后再根据精度和速度的取舍换成更大的模型。直接上大模型并不总能带来预期的精度提升数据规模有限时大模型的过拟合风险反而更高。7. 项目扩展与后续迭代思路墙面检测数据集的价值不止于六类检测本身。完成初始模型版本之后可以根据业务需要和技术演进考虑几条扩展路径。第一条是检测模型升级为实例分割模型。很多墙面质检的后续操作比如统计剥落面积、生成修补工单需要比矩形框更精确的目标轮廓。在现有检测数据基础上补充少量精细轮廓标注后采用分割模型架构迭代数据利用率会更高。第二条是增加新类别。随着时间的推移和场景的拓展墙面可能出现新的问题类型比如泛碱、起泡、盐析等。现有六类的检测框架可以在标注新类别后做增量训练不需要从头训练整个模型。第三条是结合图像质量评估做采集端筛选。对于批量勘测场景用户拍回来的照片不一定都有清晰的缺陷有些照片可能光照过暗或画面模糊。可以先训练一个简单的图片质量过滤器在检测前把模糊无用的图片剔除掉避免浪费推理时间和误报。我个人的体会是数据集的规范和一致性比数据量本身更影响模型最终效果。3011张图如果标注规范、类别边界清晰、格式统一训练效果会远好于一两万张但标注混乱的数据。做墙面缺陷检测这种垂直领域项目时尤其如此——数据集的复用和迭代周期很长一开始把格式规范和类别定义做扎实后续每次扩展都省力。最后分享一个小习惯每次训练前把当前数据集的类别分布、图片数量、标注实例数这些统计信息连同训练参数一起记录下来。墙面缺陷检测这种项目经常要做多轮数据补充和模型迭代没有这些记录做基础时间一长很容易搞混某个模型是用哪版数据训出来的、当时的类别定义是否和现在一致。养成记录每次实验数据的习惯能让后续项目推进顺畅很多。