1. 项目概述与核心思路1.1 这个项目到底要解决什么问题前阵子接手了一个桥梁缺陷识别的落地项目,方案定型的时候选了YOLO26算法作为检测核心。项目名称写得很直白:基于YOLO26的智慧桥梁缺陷识别、桥梁裂缝巡检、混凝土建筑安全评估,外加无人机巡检数据集的持续扩充。先说结论:这个项目的本质不是"训练一个能找出裂缝的模型",而是"把视觉检测模型嵌进一条完整的工程质量巡检链路里"。桥梁巡检、铁路桥梁缺陷识别、混凝土安全评估这些词堆在一起,背后是同一个痛点——传统人工巡检效率太低、主观性太强、数据不可追溯。一段十米长的箱梁,人工搭架上去敲敲打打,看裂缝、测剥落、量渗水痕迹,两个人一下午只能覆盖几十米;换成无人机飞一遍,配合高分辨率相机和缺陷识别模型,单次巡检覆盖率直接翻了几倍,而且每一处疑似缺陷都有坐标、有截图、有置信度,事后可以随时调出来复核。这个项目适合谁参考?如果你是做计算机视觉的工程师,想了解缺陷检测类目标在工业场景下的数据标注、模型调优和部署落地;如果你是土木工程口的技术人员,想搞清楚深度学习检测结果怎么和现有巡检流程结合;甚至你只是对无人机巡检感兴趣,想看看这类项目实际跑起来会遇到哪些坑——这篇文章里都有我踩过的记录。1.2 为什么选YOLO26而不是传统方案目标检测算法这个领域,每年都有新版本冒出来。YOLO系列从最初的v1一路迭代到v26,名字跨度很大,但核心思路一直是:单阶段检测,一次前向推理同时输出目标的类别和位置。相比两阶段检测器(先提候选框再逐框分类),单阶段在速度上天然占优,这对无人机巡检场景非常关键。我在项目调研阶段对比过三条技术路线:传统图像处理方案:边缘检测加形态学操作提取裂缝,优点是无需标注数据、部署成本低,但对光照变化、阴影、混凝土纹理噪声极其敏感,实际场景下误检率能到百分之四五十,基本不可用。经典深度检测模型:比如早期版本的YOLO或Faster R-CNN,精度尚可但推理速度瓶颈明显,无人机挂载的边缘设备跑起来很吃力。YOLO26方案:在检测头、特征融合、训练策略上做了不少迭代,对小目标和细长目标的支持比早期版本好很多,而且官方预训练权重在COCO上的表现已经验证了特征提取能力,迁移到缺陷检测场景只需要微调。另外还有个现实因素:项目要求最终部署在无人机机载边缘计算设备上,推理延迟必须控制在几十毫秒级别。YOLO26的模型体积和计算量可以通过调整宽度倍率、深度倍率自由缩放,从轻量版到高精度版都能覆盖,给了我们很大的调优空间。这个"按需裁剪"的能力,是很多两阶段模型不具备的。2. 数据准备与预处理实践2.1 数据集的构成与采集方案标题里提到"无人机桥梁巡检数据集第10409期",这个编号其实是我们团队内部的数据集版本号。视觉模型训练这个行当,数据版本管理太重要了——同一批桥梁,不同天气、不同相机参数、不同飞行高度拍出来的数据分布都不一样,如果版本混了,模型训出来有问题都说不清楚是数据的问题还是算法的问题。我们这套数据集,原始素材来自三类来源:无人机巡检视频抽帧:用大疆级别的四旋翼搭载可见光相机,在桥梁底面、墩柱、箱梁腹板、翼缘等部位拍摄,航线规划保证相邻帧重叠率在70%以上,抽帧后得到连续的缺陷表面图像。手持相机补拍:无人机视角有死角,尤其是支座附近、梁端伸缩缝区域、墩顶复杂的转接位置,需要人工手持相机贴近补拍。历史病害台账图片:过去几年巡检记录里留存的问题照片,这些数据虽然分辨率参差不齐,但贵在真实——它们代表的是"历史确凿发生的病害"。采集过程有几个关键参数值得记一下。飞行高度一般控制在3-5米,距离结构表面2-3米,这样拍摄的GSD(地面采样距离)大约在0.5-1mm/pixel。裂缝识别的有效宽度阈值我们定在0.2mm,低于这个宽度的裂缝,在图像上往往只有几个像素宽,再怎么调模型也很难稳定识别;高于0.2mm的裂缝,只要采集质量过关,模型都能抓出来。2.2 标注规范的制定与执行数据标注是这类项目里最脏最累、但最不能省的环节。我们团队折腾过外包标注、自己标注、半自动标注辅助三种方式,最后稳定下来的流程是:先用一个第一版模型做预标注,把明显的大目标框出来;然后标注员在预标注结果基础上修正,重点补充漏检的小裂缝;最后技术负责人按比例抽检,抽检不合格的批次全部返工。标注规范里必须明确的东西包括:类别定义:我们最终只保留了四类——裂缝、混凝土剥落、渗水痕迹、露筋锈蚀。一开始想细分裂缝走向(横向缝、纵向缝、网状缝),后来发现标注一致性太差,模型也学不明白,果断合并为一个类别。框定规则:裂缝属于典型的长条形目标,标注框要尽量贴合目标最小外接矩形,不能为了"框住多一点上下文"而故意拉大框,否则会引入大量背景噪声。遮挡与边界情况:裂缝延伸到图像边缘的,按实际可见部分标注;无人机运动模糊导致局部不可辨的,整张图直接丢弃而不是硬标。数据总量上,第10409期数据集最终包含约1.8万张图像,有效标注实例约3.2万个。类别分布其实挺不均的——裂缝占了六成,渗水痕迹和剥落各占两成左右,露筋锈蚀最少。这个分布直接影响了后面的采样策略和损失函数设计。2.3 数据增强策略与踩坑记录缺陷检测的数据增强和通用目标检测不太一样。通用场景里的翻转、缩放、颜色抖动直接套用没问题,但有几个操作需要特别当心。第一个坑是随机裁剪。YOLO训练默认有Mosaic增强,四张图拼一起再随机裁剪,这对于常规目标很好,但裂缝这类细长目标被Mosaic切成两段后,模型容易学出"半截裂缝也算一个目标"的错误认知。我们最终把Mosaic的enable概率降到了0.3,同时限制裁剪区域必须包含至少一个完整的目标实例,否则重新裁剪。第二个坑是亮度扰动。桥梁底面光照条件复杂,既有强反光区域又有深阴影区域,适当的亮度抖动、对比度抖动能提升模型鲁棒性。但抖动幅度过大的话,本来就不明显的细微裂缝会被直接"抖没"。我们把亮度扰动幅度控制在原始值的±15%以内,对比度扰动控制在±10%以内,实测这个范围既能模拟不同光照条件,又不至于破坏目标特征。第三个比较有效的增强是RandomErasing(随机擦除)。这个操作随机擦掉图像中的一小块区域,强制模型不要依赖局部纹理做判断。对混凝土表面这种纹理高度相似的场景特别管用,能显著降低"看哪儿都像裂缝"的误检率。所有增强参数都不是拍脑袋定的,我们的做法是每调一轮增强策略,跑一次短训练(20个epoch),看验证集上的mAP和误检率变化。虽然多花了一些训练时间,但比凭感觉调要靠谱得多。3. YOLO26模型适配与关键参数调优3.1 模型结构的针对化改造YOLO26的官方版本是通用目标检测模型,直接拿来跑桥梁缺陷会碰到几个适配问题,需要针对性地改结构。第一处改造在检测头。通用模型默认有三个检测尺度,分别对应大中小目标。裂缝这种目标在某些图像里可能只有十几像素长宽,属于"极小目标",靠最小的检测头依然不够。我们在下采样倍率最小的特征图后面又引出第四条检测分支,专门负责极小目标。付出的代价是整体计算量上涨约15%,推理速度从原来的42ms涨到48ms,还在可接受范围内。第二处改造是注意力机制的引入。混凝土裂缝和背景纹理在颜色、亮度上高度相似,模型容易混淆。我们在主干网络的最后两个Stage后面加了SE注意力模块,让网络自动加大在"有明显方向性纹理"的区域上的注意力权重。这个改动幅度很小,但带来的mAP提升差不多有1.8个百分点,性价比很高。第三处是Anchor-Free头的微调。YOLO26的检测头直接回归目标中心点和宽高,对于细长裂缝,宽高比极端情况下能达到1:20以上,普通回归分支对这种极端目标不太友好。我们给宽高回归分支单独加了一个缩放因子,让极端长宽比的预测更容易收敛。训练过程中明显感觉到裂缝类的边框回归损失降得更快了。3.2 训练参数与损失函数的设计训练配置这个环节,给出一组可以直接复用的参数:参数数值说明输入尺寸1280x1280桥梁图像分辨率高,低尺寸会丢失裂缝细节优化器SGD,momentum=0.937大batch下比Adam更稳初始学习率0.01,cosine衰减前3个epoch用warmup从0.001升到0.01Batch size16单卡训练,大输入尺寸下batch不宜再大Epochs300配合早停策略EMA衰减0.9999平滑权重,提升最终精度损失函数方面,分类损失用BCE,回归损失用CIoU。箱体回归的一个细节:我们给CIoU损失中的宽高项单独加了一个权重系数,从默认的0.05调到了0.15。原因是裂缝的定位精度要求比常规目标高得多——框偏几个像素,在真实世界对应的是几毫米的偏差,直接影响病害尺寸判断的准确性。还有一个关键点是类别不平衡。露筋锈蚀的样本数量很少,训练时容易学成"背景"。我们的办法:一是按类别设置采样权重,稀有类别的采样概率乘以1.5;二是在损失函数里给稀有类别加权重,交叉熵的类别权重设为裂缝:剥落:渗水:露筋 = 0.5:1.0:1.0:2.0。这个策略跑完,露筋类的recall从61%提到了83%,代价是precision略降了2个百分点,总体是划算的。3.3 预训练权重与迁移策略YOLO26的官方权重虽然是在自然图像上训的,但迁移到工程场景依然有价值。我们用官方COCO预训练权重做初始化,冻结前40层主干,只训练检测头和后面几个特征融合层,跑了50个epoch;然后解冻全部层,用较低学习率(0.002)再训250个epoch。这个"两阶段训练"策略比从头训练节省了大约一半的收敛时间,更重要的是,预训练模型已经具备的通用边缘、纹理、形状特征确实能帮助模型更好地理解混凝土表面的纹理结构。有一个需要提醒的点:加载预训练权重时,如果改了模型结构(比如加了注意力模块、多加了检测分支),权重文件里对应的层名对不上,要写一个映射函数来处理。这个坑我们踩过——第一次加载权重时没做映射,直接报错,后面写了个简单的字典替换才解决。4. 模型训练评估与工程化部署4.1 训练过程的关键指标追踪训练过程不是只看loss曲线就完事,要盯四张图:train loss、val loss、val mAP@0.5、val mAP@0.5:0.95。实际训练中遇到的一个典型情况:前50个epoch,train loss和val loss都在降,但val mAP几乎不动。刚开始以为是模型容量不够,后来排查发现是mosaic增强概率太高导致验证集和训练集分布差异过大。把mosaic概率从默认的0.8降到0.3后,mAP开始稳定上涨。这算是一次很典型的增强策略与评估指标不匹配的问题。训练到第180个epoch时,val mAP@0.5达到了0.873,之后开始震荡。第210个epoch达到了全局最高的0.881,但这时候val loss已经微幅回升。我们启用了EarlyStopping,patience设30个epoch,最终选择第210个epoch的权重作为最终模型。实测下来选这个权重比选最后epoch的权重在测试集上高了差不多1个百分点。各类别的最终效果:裂缝:mAP@0.5 0.862,recall 0.877。细长目标能到这个水平,算是符合预期。渗水痕迹:mAP@0.5 0.915。渗水痕迹有明显颜色特征,模型学得最好。混凝土剥落:mAP@0.5 0.846。剥落区域边缘不规则,检测难度比想象中大。露筋锈蚀:mAP@0.5 0.788。样本少,且锈蚀区域常与渗水痕迹伴生,存在一定的类间混淆。4.2 从PyTorch到TensorRT的部署转换训练用的PyTorch模型最终要部署到无人机机载边缘计算卡上。我们的目标平台是一块中高端的嵌入式GPU,算力大约是桌面级显卡的四分之一到三分之一,内存6GB。直接用PyTorch推理显然不合算,走了一遍TensorRT加速流程。流程分四步:PyTorch权重转成ONNX格式,注意固定输入尺寸为1280x1280,动态batch在工程上没必要,设成固定1。用onnx-simplifier清洗ONNX图,去掉一些PyTorch导出时遗留的冗余算子。加载ONNX到TensorRT,构建engine。精度模式先试FP16,实测mAP掉0.6个点,在可接受范围;再试INT8量化,mAP掉2.3个点,有点心疼,但推理速度确实快了一倍。最终方案选了FP16,推理速度从PyTorch的48ms降到了约17ms,完全满足实时要求。部署环节最大的坑在Torch和CUDA版本匹配。PyTorch 2.x导出的ONNX里某些算子在老版本TensorRT上不支持或者行为不一致,最后我们统一固定了PyTorch 2.0.1、CUDA 11.8、TensorRT 8.5.3的组合,才把各种莫名其妙的推理错误消除掉。4.3 集成到无人机巡检系统的整体链路模型只是中间环节。实际巡检系统的完整链路是:无人机按预定航线自动飞行,机载相机实时推流到边缘计算设备。边缘计算设备上的YOLO26模型对每帧图像做检测,置信度高于0.35的检测结果记录为疑似缺陷。每个疑似缺陷附带以下信息:GPS坐标(通过无人机飞控模块获取)、拍摄时间戳、当前飞行姿态角、缺陷截图。为了节省存储和回传带宽,我们做了一个关键设计:不是每一帧原始图像都存储,而是只保存含有疑似缺陷的帧和对应的检测结果显示图。正常帧只保留飞行轨迹记录,不保留图像。这个策略让单次巡检的数据量从原来的几十GB降到了几百MB级别。进一步的,在地面站里做二次筛选。机载端因为算力限制,用的是轻量版模型;地面站跑的是完整版模型,对机载端上报的所有疑似缺陷重新推理一次,剔除置信度低于阈值或者类别与上下文不符合的结果。这套两级筛选机制,能把最终交给工程师确认的疑似缺陷数量压缩到真正值得看的范围。5. 工程落地:无人机巡检与质量监管闭环5.1 现场巡检方案与航线规划模型训练完了、部署跑通了,真正的考验才开始——到现场跑真实巡检任务。航线规划这件事,光在地图上画航线远远不够。桥梁结构复杂,无人机在不同部位需要不同的飞行策略:桥面以上:相对简单,沿着桥面边缘走,相机朝下拍桥面裂缝和伸缩缝。注意避让路灯、标志牌等金属结构,防止GPS信号被遮挡。箱梁内部:空间狭小,GPS信号基本消失,必须用视觉定位或室内定位辅助。无人机进入箱梁作业有一定风险,要确保桨叶不会碰到箱壁,一般靠人工操控低速推进。桥墩和支座:需要环绕拍摄,航线上设计好每个关键点位的拍摄朝向角,保证墩柱表面无死角覆盖。飞行速度是个需要权衡的参数。飞太快,相邻帧重叠率不够,容易漏检;飞太慢,巡检效率上不去。我们实测下来,缺陷重点区域的飞行速度控制在2-3m/s比较合适,配合20fps左右的推理帧率,相邻帧之间在结构表面的移动距离只有约10-15cm,足以保证目标不丢。5.2 与工程质量监管流程的衔接模型识别出疑似缺陷只是第一步,真正产生价值的是后续的处理流程。现场巡检结束后,地面站生成一份结构化的巡检报告,按桥梁部件分类,每个部件下列出该部件的所有疑似缺陷。每一条疑似缺陷包含:缺陷类型、位置坐标、缺陷尺寸估算(基于GSD换算)、检测置信度、原始图像和标注框可视化。这份报告对接质检工程师的复核工作流。工程师在平板上逐条查看,对每条疑似缺陷标记"确认""排除"或"待现场复核"。确认的缺陷自动进入缺陷台账,待复核的缺陷会在下一次巡检中重点复查。这里有个值得说的细节:我们在巡检报告里给每条缺陷算了一个"严重度评分",综合了缺陷类型、尺寸、所在结构部位三个因素。比如桥墩底部的裂缝,评分自动高于桥面铺装层的裂缝,因为前者对结构安全的影响更大。这个评分机制最开始做得过于简单,后来根据结构工程师的反馈调整了两轮权重,才被团队内部认可。5.3 运营效率与成本分析这套系统跑了两个月的试点,说几个真实的效率对比数据:传统人工巡检一段2公里长的铁路桥梁,需要封闭检查通道,搭设移动检修平台,4人小组大约需要4个工作日完成全覆盖检查。无人机巡检方案:1名飞手加1名安全员,2个工作日完成图像采集,再花1个工日在工作站上复核和导出报告。总人工工日缩减到原来的三分之一,而且巡检全程有影像留痕,单个缺陷的定位精度可以精确到米级。基于这些数据,我们做过一个粗略的成本测算:硬件投入(无人机、挂载相机、边缘计算设备、地面站)大约占整个项目预算的三分之一,算法开发和数据工程占三分之一,现场实施和人员培训占三分之一。硬件成本的下降空间很大,消费级无人机的技术成熟度已经很高,真正贵的是定制化改造和软件开发;算法端的成本主要在数据标注和反复迭代上,这部分短期内很难压缩。6. 常见问题与排查技巧实录6.1 裂缝漏检的排查方向模型上线后发现裂缝漏检率上升,先别急着改模型,按下面顺序排查:第一查图像质量。无人机运动模糊、曝光过度、对焦不实,都会让裂缝特征消失。这个原因引起的漏检,模型再调优也没用,只能改善采集条件。第二查输入尺寸。YOLO26训练时输入1280x1280,推理时如果为了提速改了输入尺寸,小裂缝很可能检测不到。我们的经验是:输入尺寸低于1088之后,裂缝类mAP掉得很快。第三查数据分布。新巡检的桥梁如果混凝土表面颜色、纹理和训练集差异很大,模型可能出现"域偏移"问题。解决的办法是收集新场景数据,做增量训练。第四查阈值设定。置信度阈值设高了会漏检,设低了会误检。我们的做法是机载端阈值设低(0.25),宁可多报;地面站复核阈值设高(0.35),宁可错杀。6.2 裂缝误检的来源与对策误检比漏检更影响实际使用体验,因为工程师需要消耗大量精力去核对"疑似缺陷"是不是真的缺陷。最常见的误检来源有三个:模板缝和施工缝:这类结构缝在外观上和裂缝很像,但其实是正常的构造设计。我们最终的解决方案不是靠模型,而是在后处理逻辑里加了一个"区域排除"功能——导入桥梁设计图纸,把已知伸缩缝、施工缝的位置坐标标记出来,检测结果落在这些区域内的一律挂起,除非置信度特别高(比如0.8以上)。混凝土表面划痕和污渍:划痕和裂缝在图像上很难区分。硬要区分的话,可以引入多角度拍摄信息,同一个位置从不同角度观察,裂缝的形态变化规律和划痕不一样,但这个方案对数据采集要求太高,我们暂时没做。阴影边缘和光照不均:桥梁底面的阴影边缘在图像上会形成"伪裂缝"。准确说是阴影边缘的亮度梯度非常大,卷积网络提取到的特征和裂缝有些相似。解决的办法之一是训练数据里多加入含阴影的图像,让模型见过足够多"阴影假阳性"的样本。6.3 数据标注返工与版本管理标注返工是数据工程里的隐形时间黑洞。我们统计过,第10409期数据集中,因为标注质量问题导致的返工批次大约占了总批次的15%。返工的主要原因包括:漏标小裂缝:单张图上裂缝数量多的时候,标注员容易漏掉最细的裂缝,这是返工比例最高的原因。框形不规范:部分标注框没有贴合目标最小外接矩形,框得过大或过小,机检抽检时一眼就能看出来。类别标错:渗水痕迹和剥落有时候会同时出现,有些标注员会把同时含有两种病害的区域只标一个类别。规避措施:每批次标注完成后,用程序做一次自动抽检。抽检的规则很简单——用当前最优模型跑一遍这批数据,找出模型有高置信度检测但标注文件里没有标注的目标,再看这些目标是不是被漏标了。这套"模型辅助质检"的方法,可以把漏标率降低一大半。另外,数据版本管理建议用独立工具或明确的命名规范管理,不要只靠文件夹名区分。我们早期的版本混乱问题,就是靠着在数据集文件夹根目录放一个version.json文件解决的,里面记录版本号、创建日期、标注规范版本、统计信息、变更说明。6.4 模型在边缘设备上的性能监控模型部署到边缘设备后,不是万事大吉,要持续监控性能。尤其要注意两个指标:推理帧率是否掉速。现场环境温度升高、GPU频率自动降低,可能导致推理帧率从稳定的20fps掉到12fps左右。我们会在地面站显示当前实时的推理帧率,低于阈值时预警,提示飞手降低飞行速度或暂停作业等待设备降温。推理结果分布是否异常。某一天如果所有类别的检测数量都突然大幅增加,很可能是采集环境发生了变化(比如雾天、直射阳光强烈),而不是结构真的出了大问题。我们设置了一个简单的"异常检测告警"——统计每帧平均检测数量,如果连续30帧的平均检测数超过正常范围的3倍标准差,系统自动提示检查采集条件。7. 模型迭代思路与项目复用空间7.1 数据驱动的模型迭代机制视觉模型的迭代不是一次性交付就结束的,数据驱动的闭环迭代才是工程价值持续变现的关键。我们建立了"周度数据回流+月度模型更新"机制:每一次现场巡检产生的检测结果,尤其是工程师复核过的"确认/排除"标注,都会回流到训练数据池。这些数据是模型迭代最宝贵的资源——它们是真实场景、真实光照、真实缺陷形态的带标签数据,比初期采集整理的数据更具针对性。每月做一次增量训练,用过去4周回流的新数据加上初始训练集,全量训练一个新版本。从第10409期到第10418期(后续连续九期数据集),模型的mAP@0.5从0.862提升到了0.904,误检率下降了约22%。成长曲线不是线性的,中间有两期的mAP反而略有下降,排查后发现是新增数据里引入了某个特定桥梁的特殊表面纹理导致的,回滚之后重新调整数据配比才恢复正常。这也验证了一件事:缺陷检测类模型的性能天花板不在算法结构,而在数据的质量、覆盖度和持续回流能力。7.2 迁移到其他建筑结构缺陷场景这套系统最初的场景是桥梁巡检,但整套技术框架可以迁移到很多类似场景。我们在项目后期做过两个方向的试探:一是隧道衬砌检测。隧道内壁的裂缝、渗水、剥落和桥梁缺陷在视觉特征上有不少相似之处,但光照条件更差,补光要求更高。迁移的方式很简单:用桥梁数据预训练模型,补充隧道场景数据微调。因为底层特征已经学好了,只用大约2000张隧道图片就能跑出一个能用的初版模型。二是高层建筑外墙检测。这个场景需要配合爬壁机器人或变焦相机,图像分辨率要求更高,但检测目标类型基本类似。相比桥梁场景,外墙场景的难点在于玻璃幕墙反光、窗户边框造成的伪影、遮阳结构遮挡,这些都是需要在数据层面解决的问题。还有更远的扩展方向——比如把单体缺陷检测升级为"多尺度巡检":先广域扫描识别疑似区域,再对存疑区域做高分辨率精细化识别,这类似于医学影像里的"初筛+精查"逻辑,我对这个方向比较看好,也计划在下一年度验证。7.3 YOLO26在这个项目里能做到的上限聊到最后,说点个人体会。YOLO26这套算法在这个项目里的实际发挥,我认为是"超出预期但不算惊喜"。超出预期的是它的训练收敛速度和小目标检测能力,比前几代确实有明显进步,对裂缝这种极端细长的目标,mAP能到0.86以上,这在三四年前是难以想象的。不算惊喜的地方在于它本质上仍然是通用目标检测框架,对于"缺陷检测"这种强专业场景,它没有一个专门的损失项去约束"裂缝应该是连续的、有方向性的"这类结构先验。想突破这个上限,往分割方向走是必然的,实例分割或者全景分割能把缺陷的轮廓和走向完整表达出来,而不只是一个框。在项目收尾阶段,我们其实已经跑通了Mask分支的实验版本,在裂缝分割任务上的mIoU做到0.74,效果不错,但尚未达到工程部署的稳定性标准。后续大概会把YOLO26检测作为第一级快速筛查,再做分割作为第二级精细化分析,两级联动,在速度和精度之间取得更好的平衡。如果重新把这个项目做一遍,我最想改变的一点是:在项目启动初期就建立更完善的数据回流机制,而不是等到模型上线后才补课。视觉项目数据的价值是递进式的,早一天做好回流设计,模型的成长曲线就早一天变得陡峭。这个经验,值得所有想入坑缺陷检测的团队参考。
1. 项目概述与核心思路1.1 这个项目到底要解决什么问题前阵子接手了一个桥梁缺陷识别的落地项目,方案定型的时候选了YOLO26算法作为检测核心。项目名称写得很直白:基于YOLO26的智慧桥梁缺陷识别、桥梁裂缝巡检、混凝土建筑安全评估,外加无人机巡检数据集的持续扩充。先说结论:这个项目的本质不是"训练一个能找出裂缝的模型",而是"把视觉检测模型嵌进一条完整的工程质量巡检链路里"。桥梁巡检、铁路桥梁缺陷识别、混凝土安全评估这些词堆在一起,背后是同一个痛点——传统人工巡检效率太低、主观性太强、数据不可追溯。一段十米长的箱梁,人工搭架上去敲敲打打,看裂缝、测剥落、量渗水痕迹,两个人一下午只能覆盖几十米;换成无人机飞一遍,配合高分辨率相机和缺陷识别模型,单次巡检覆盖率直接翻了几倍,而且每一处疑似缺陷都有坐标、有截图、有置信度,事后可以随时调出来复核。这个项目适合谁参考?如果你是做计算机视觉的工程师,想了解缺陷检测类目标在工业场景下的数据标注、模型调优和部署落地;如果你是土木工程口的技术人员,想搞清楚深度学习检测结果怎么和现有巡检流程结合;甚至你只是对无人机巡检感兴趣,想看看这类项目实际跑起来会遇到哪些坑——这篇文章里都有我踩过的记录。1.2 为什么选YOLO26而不是传统方案目标检测算法这个领域,每年都有新版本冒出来。YOLO系列从最初的v1一路迭代到v26,名字跨度很大,但核心思路一直是:单阶段检测,一次前向推理同时输出目标的类别和位置。相比两阶段检测器(先提候选框再逐框分类),单阶段在速度上天然占优,这对无人机巡检场景非常关键。我在项目调研阶段对比过三条技术路线:传统图像处理方案:边缘检测加形态学操作提取裂缝,优点是无需标注数据、部署成本低,但对光照变化、阴影、混凝土纹理噪声极其敏感,实际场景下误检率能到百分之四五十,基本不可用。经典深度检测模型:比如早期版本的YOLO或Faster R-CNN,精度尚可但推理速度瓶颈明显,无人机挂载的边缘设备跑起来很吃力。YOLO26方案:在检测头、特征融合、训练策略上做了不少迭代,对小目标和细长目标的支持比早期版本好很多,而且官方预训练权重在COCO上的表现已经验证了特征提取能力,迁移到缺陷检测场景只需要微调。另外还有个现实因素:项目要求最终部署在无人机机载边缘计算设备上,推理延迟必须控制在几十毫秒级别。YOLO26的模型体积和计算量可以通过调整宽度倍率、深度倍率自由缩放,从轻量版到高精度版都能覆盖,给了我们很大的调优空间。这个"按需裁剪"的能力,是很多两阶段模型不具备的。2. 数据准备与预处理实践2.1 数据集的构成与采集方案标题里提到"无人机桥梁巡检数据集第10409期",这个编号其实是我们团队内部的数据集版本号。视觉模型训练这个行当,数据版本管理太重要了——同一批桥梁,不同天气、不同相机参数、不同飞行高度拍出来的数据分布都不一样,如果版本混了,模型训出来有问题都说不清楚是数据的问题还是算法的问题。我们这套数据集,原始素材来自三类来源:无人机巡检视频抽帧:用大疆级别的四旋翼搭载可见光相机,在桥梁底面、墩柱、箱梁腹板、翼缘等部位拍摄,航线规划保证相邻帧重叠率在70%以上,抽帧后得到连续的缺陷表面图像。手持相机补拍:无人机视角有死角,尤其是支座附近、梁端伸缩缝区域、墩顶复杂的转接位置,需要人工手持相机贴近补拍。历史病害台账图片:过去几年巡检记录里留存的问题照片,这些数据虽然分辨率参差不齐,但贵在真实——它们代表的是"历史确凿发生的病害"。采集过程有几个关键参数值得记一下。飞行高度一般控制在3-5米,距离结构表面2-3米,这样拍摄的GSD(地面采样距离)大约在0.5-1mm/pixel。裂缝识别的有效宽度阈值我们定在0.2mm,低于这个宽度的裂缝,在图像上往往只有几个像素宽,再怎么调模型也很难稳定识别;高于0.2mm的裂缝,只要采集质量过关,模型都能抓出来。2.2 标注规范的制定与执行数据标注是这类项目里最脏最累、但最不能省的环节。我们团队折腾过外包标注、自己标注、半自动标注辅助三种方式,最后稳定下来的流程是:先用一个第一版模型做预标注,把明显的大目标框出来;然后标注员在预标注结果基础上修正,重点补充漏检的小裂缝;最后技术负责人按比例抽检,抽检不合格的批次全部返工。标注规范里必须明确的东西包括:类别定义:我们最终只保留了四类——裂缝、混凝土剥落、渗水痕迹、露筋锈蚀。一开始想细分裂缝走向(横向缝、纵向缝、网状缝),后来发现标注一致性太差,模型也学不明白,果断合并为一个类别。框定规则:裂缝属于典型的长条形目标,标注框要尽量贴合目标最小外接矩形,不能为了"框住多一点上下文"而故意拉大框,否则会引入大量背景噪声。遮挡与边界情况:裂缝延伸到图像边缘的,按实际可见部分标注;无人机运动模糊导致局部不可辨的,整张图直接丢弃而不是硬标。数据总量上,第10409期数据集最终包含约1.8万张图像,有效标注实例约3.2万个。类别分布其实挺不均的——裂缝占了六成,渗水痕迹和剥落各占两成左右,露筋锈蚀最少。这个分布直接影响了后面的采样策略和损失函数设计。2.3 数据增强策略与踩坑记录缺陷检测的数据增强和通用目标检测不太一样。通用场景里的翻转、缩放、颜色抖动直接套用没问题,但有几个操作需要特别当心。第一个坑是随机裁剪。YOLO训练默认有Mosaic增强,四张图拼一起再随机裁剪,这对于常规目标很好,但裂缝这类细长目标被Mosaic切成两段后,模型容易学出"半截裂缝也算一个目标"的错误认知。我们最终把Mosaic的enable概率降到了0.3,同时限制裁剪区域必须包含至少一个完整的目标实例,否则重新裁剪。第二个坑是亮度扰动。桥梁底面光照条件复杂,既有强反光区域又有深阴影区域,适当的亮度抖动、对比度抖动能提升模型鲁棒性。但抖动幅度过大的话,本来就不明显的细微裂缝会被直接"抖没"。我们把亮度扰动幅度控制在原始值的±15%以内,对比度扰动控制在±10%以内,实测这个范围既能模拟不同光照条件,又不至于破坏目标特征。第三个比较有效的增强是RandomErasing(随机擦除)。这个操作随机擦掉图像中的一小块区域,强制模型不要依赖局部纹理做判断。对混凝土表面这种纹理高度相似的场景特别管用,能显著降低"看哪儿都像裂缝"的误检率。所有增强参数都不是拍脑袋定的,我们的做法是每调一轮增强策略,跑一次短训练(20个epoch),看验证集上的mAP和误检率变化。虽然多花了一些训练时间,但比凭感觉调要靠谱得多。3. YOLO26模型适配与关键参数调优3.1 模型结构的针对化改造YOLO26的官方版本是通用目标检测模型,直接拿来跑桥梁缺陷会碰到几个适配问题,需要针对性地改结构。第一处改造在检测头。通用模型默认有三个检测尺度,分别对应大中小目标。裂缝这种目标在某些图像里可能只有十几像素长宽,属于"极小目标",靠最小的检测头依然不够。我们在下采样倍率最小的特征图后面又引出第四条检测分支,专门负责极小目标。付出的代价是整体计算量上涨约15%,推理速度从原来的42ms涨到48ms,还在可接受范围内。第二处改造是注意力机制的引入。混凝土裂缝和背景纹理在颜色、亮度上高度相似,模型容易混淆。我们在主干网络的最后两个Stage后面加了SE注意力模块,让网络自动加大在"有明显方向性纹理"的区域上的注意力权重。这个改动幅度很小,但带来的mAP提升差不多有1.8个百分点,性价比很高。第三处是Anchor-Free头的微调。YOLO26的检测头直接回归目标中心点和宽高,对于细长裂缝,宽高比极端情况下能达到1:20以上,普通回归分支对这种极端目标不太友好。我们给宽高回归分支单独加了一个缩放因子,让极端长宽比的预测更容易收敛。训练过程中明显感觉到裂缝类的边框回归损失降得更快了。3.2 训练参数与损失函数的设计训练配置这个环节,给出一组可以直接复用的参数:参数数值说明输入尺寸1280x1280桥梁图像分辨率高,低尺寸会丢失裂缝细节优化器SGD,momentum=0.937大batch下比Adam更稳初始学习率0.01,cosine衰减前3个epoch用warmup从0.001升到0.01Batch size16单卡训练,大输入尺寸下batch不宜再大Epochs300配合早停策略EMA衰减0.9999平滑权重,提升最终精度损失函数方面,分类损失用BCE,回归损失用CIoU。箱体回归的一个细节:我们给CIoU损失中的宽高项单独加了一个权重系数,从默认的0.05调到了0.15。原因是裂缝的定位精度要求比常规目标高得多——框偏几个像素,在真实世界对应的是几毫米的偏差,直接影响病害尺寸判断的准确性。还有一个关键点是类别不平衡。露筋锈蚀的样本数量很少,训练时容易学成"背景"。我们的办法:一是按类别设置采样权重,稀有类别的采样概率乘以1.5;二是在损失函数里给稀有类别加权重,交叉熵的类别权重设为裂缝:剥落:渗水:露筋 = 0.5:1.0:1.0:2.0。这个策略跑完,露筋类的recall从61%提到了83%,代价是precision略降了2个百分点,总体是划算的。3.3 预训练权重与迁移策略YOLO26的官方权重虽然是在自然图像上训的,但迁移到工程场景依然有价值。我们用官方COCO预训练权重做初始化,冻结前40层主干,只训练检测头和后面几个特征融合层,跑了50个epoch;然后解冻全部层,用较低学习率(0.002)再训250个epoch。这个"两阶段训练"策略比从头训练节省了大约一半的收敛时间,更重要的是,预训练模型已经具备的通用边缘、纹理、形状特征确实能帮助模型更好地理解混凝土表面的纹理结构。有一个需要提醒的点:加载预训练权重时,如果改了模型结构(比如加了注意力模块、多加了检测分支),权重文件里对应的层名对不上,要写一个映射函数来处理。这个坑我们踩过——第一次加载权重时没做映射,直接报错,后面写了个简单的字典替换才解决。4. 模型训练评估与工程化部署4.1 训练过程的关键指标追踪训练过程不是只看loss曲线就完事,要盯四张图:train loss、val loss、val mAP@0.5、val mAP@0.5:0.95。实际训练中遇到的一个典型情况:前50个epoch,train loss和val loss都在降,但val mAP几乎不动。刚开始以为是模型容量不够,后来排查发现是mosaic增强概率太高导致验证集和训练集分布差异过大。把mosaic概率从默认的0.8降到0.3后,mAP开始稳定上涨。这算是一次很典型的增强策略与评估指标不匹配的问题。训练到第180个epoch时,val mAP@0.5达到了0.873,之后开始震荡。第210个epoch达到了全局最高的0.881,但这时候val loss已经微幅回升。我们启用了EarlyStopping,patience设30个epoch,最终选择第210个epoch的权重作为最终模型。实测下来选这个权重比选最后epoch的权重在测试集上高了差不多1个百分点。各类别的最终效果:裂缝:mAP@0.5 0.862,recall 0.877。细长目标能到这个水平,算是符合预期。渗水痕迹:mAP@0.5 0.915。渗水痕迹有明显颜色特征,模型学得最好。混凝土剥落:mAP@0.5 0.846。剥落区域边缘不规则,检测难度比想象中大。露筋锈蚀:mAP@0.5 0.788。样本少,且锈蚀区域常与渗水痕迹伴生,存在一定的类间混淆。4.2 从PyTorch到TensorRT的部署转换训练用的PyTorch模型最终要部署到无人机机载边缘计算卡上。我们的目标平台是一块中高端的嵌入式GPU,算力大约是桌面级显卡的四分之一到三分之一,内存6GB。直接用PyTorch推理显然不合算,走了一遍TensorRT加速流程。流程分四步:PyTorch权重转成ONNX格式,注意固定输入尺寸为1280x1280,动态batch在工程上没必要,设成固定1。用onnx-simplifier清洗ONNX图,去掉一些PyTorch导出时遗留的冗余算子。加载ONNX到TensorRT,构建engine。精度模式先试FP16,实测mAP掉0.6个点,在可接受范围;再试INT8量化,mAP掉2.3个点,有点心疼,但推理速度确实快了一倍。最终方案选了FP16,推理速度从PyTorch的48ms降到了约17ms,完全满足实时要求。部署环节最大的坑在Torch和CUDA版本匹配。PyTorch 2.x导出的ONNX里某些算子在老版本TensorRT上不支持或者行为不一致,最后我们统一固定了PyTorch 2.0.1、CUDA 11.8、TensorRT 8.5.3的组合,才把各种莫名其妙的推理错误消除掉。4.3 集成到无人机巡检系统的整体链路模型只是中间环节。实际巡检系统的完整链路是:无人机按预定航线自动飞行,机载相机实时推流到边缘计算设备。边缘计算设备上的YOLO26模型对每帧图像做检测,置信度高于0.35的检测结果记录为疑似缺陷。每个疑似缺陷附带以下信息:GPS坐标(通过无人机飞控模块获取)、拍摄时间戳、当前飞行姿态角、缺陷截图。为了节省存储和回传带宽,我们做了一个关键设计:不是每一帧原始图像都存储,而是只保存含有疑似缺陷的帧和对应的检测结果显示图。正常帧只保留飞行轨迹记录,不保留图像。这个策略让单次巡检的数据量从原来的几十GB降到了几百MB级别。进一步的,在地面站里做二次筛选。机载端因为算力限制,用的是轻量版模型;地面站跑的是完整版模型,对机载端上报的所有疑似缺陷重新推理一次,剔除置信度低于阈值或者类别与上下文不符合的结果。这套两级筛选机制,能把最终交给工程师确认的疑似缺陷数量压缩到真正值得看的范围。5. 工程落地:无人机巡检与质量监管闭环5.1 现场巡检方案与航线规划模型训练完了、部署跑通了,真正的考验才开始——到现场跑真实巡检任务。航线规划这件事,光在地图上画航线远远不够。桥梁结构复杂,无人机在不同部位需要不同的飞行策略:桥面以上:相对简单,沿着桥面边缘走,相机朝下拍桥面裂缝和伸缩缝。注意避让路灯、标志牌等金属结构,防止GPS信号被遮挡。箱梁内部:空间狭小,GPS信号基本消失,必须用视觉定位或室内定位辅助。无人机进入箱梁作业有一定风险,要确保桨叶不会碰到箱壁,一般靠人工操控低速推进。桥墩和支座:需要环绕拍摄,航线上设计好每个关键点位的拍摄朝向角,保证墩柱表面无死角覆盖。飞行速度是个需要权衡的参数。飞太快,相邻帧重叠率不够,容易漏检;飞太慢,巡检效率上不去。我们实测下来,缺陷重点区域的飞行速度控制在2-3m/s比较合适,配合20fps左右的推理帧率,相邻帧之间在结构表面的移动距离只有约10-15cm,足以保证目标不丢。5.2 与工程质量监管流程的衔接模型识别出疑似缺陷只是第一步,真正产生价值的是后续的处理流程。现场巡检结束后,地面站生成一份结构化的巡检报告,按桥梁部件分类,每个部件下列出该部件的所有疑似缺陷。每一条疑似缺陷包含:缺陷类型、位置坐标、缺陷尺寸估算(基于GSD换算)、检测置信度、原始图像和标注框可视化。这份报告对接质检工程师的复核工作流。工程师在平板上逐条查看,对每条疑似缺陷标记"确认""排除"或"待现场复核"。确认的缺陷自动进入缺陷台账,待复核的缺陷会在下一次巡检中重点复查。这里有个值得说的细节:我们在巡检报告里给每条缺陷算了一个"严重度评分",综合了缺陷类型、尺寸、所在结构部位三个因素。比如桥墩底部的裂缝,评分自动高于桥面铺装层的裂缝,因为前者对结构安全的影响更大。这个评分机制最开始做得过于简单,后来根据结构工程师的反馈调整了两轮权重,才被团队内部认可。5.3 运营效率与成本分析这套系统跑了两个月的试点,说几个真实的效率对比数据:传统人工巡检一段2公里长的铁路桥梁,需要封闭检查通道,搭设移动检修平台,4人小组大约需要4个工作日完成全覆盖检查。无人机巡检方案:1名飞手加1名安全员,2个工作日完成图像采集,再花1个工日在工作站上复核和导出报告。总人工工日缩减到原来的三分之一,而且巡检全程有影像留痕,单个缺陷的定位精度可以精确到米级。基于这些数据,我们做过一个粗略的成本测算:硬件投入(无人机、挂载相机、边缘计算设备、地面站)大约占整个项目预算的三分之一,算法开发和数据工程占三分之一,现场实施和人员培训占三分之一。硬件成本的下降空间很大,消费级无人机的技术成熟度已经很高,真正贵的是定制化改造和软件开发;算法端的成本主要在数据标注和反复迭代上,这部分短期内很难压缩。6. 常见问题与排查技巧实录6.1 裂缝漏检的排查方向模型上线后发现裂缝漏检率上升,先别急着改模型,按下面顺序排查:第一查图像质量。无人机运动模糊、曝光过度、对焦不实,都会让裂缝特征消失。这个原因引起的漏检,模型再调优也没用,只能改善采集条件。第二查输入尺寸。YOLO26训练时输入1280x1280,推理时如果为了提速改了输入尺寸,小裂缝很可能检测不到。我们的经验是:输入尺寸低于1088之后,裂缝类mAP掉得很快。第三查数据分布。新巡检的桥梁如果混凝土表面颜色、纹理和训练集差异很大,模型可能出现"域偏移"问题。解决的办法是收集新场景数据,做增量训练。第四查阈值设定。置信度阈值设高了会漏检,设低了会误检。我们的做法是机载端阈值设低(0.25),宁可多报;地面站复核阈值设高(0.35),宁可错杀。6.2 裂缝误检的来源与对策误检比漏检更影响实际使用体验,因为工程师需要消耗大量精力去核对"疑似缺陷"是不是真的缺陷。最常见的误检来源有三个:模板缝和施工缝:这类结构缝在外观上和裂缝很像,但其实是正常的构造设计。我们最终的解决方案不是靠模型,而是在后处理逻辑里加了一个"区域排除"功能——导入桥梁设计图纸,把已知伸缩缝、施工缝的位置坐标标记出来,检测结果落在这些区域内的一律挂起,除非置信度特别高(比如0.8以上)。混凝土表面划痕和污渍:划痕和裂缝在图像上很难区分。硬要区分的话,可以引入多角度拍摄信息,同一个位置从不同角度观察,裂缝的形态变化规律和划痕不一样,但这个方案对数据采集要求太高,我们暂时没做。阴影边缘和光照不均:桥梁底面的阴影边缘在图像上会形成"伪裂缝"。准确说是阴影边缘的亮度梯度非常大,卷积网络提取到的特征和裂缝有些相似。解决的办法之一是训练数据里多加入含阴影的图像,让模型见过足够多"阴影假阳性"的样本。6.3 数据标注返工与版本管理标注返工是数据工程里的隐形时间黑洞。我们统计过,第10409期数据集中,因为标注质量问题导致的返工批次大约占了总批次的15%。返工的主要原因包括:漏标小裂缝:单张图上裂缝数量多的时候,标注员容易漏掉最细的裂缝,这是返工比例最高的原因。框形不规范:部分标注框没有贴合目标最小外接矩形,框得过大或过小,机检抽检时一眼就能看出来。类别标错:渗水痕迹和剥落有时候会同时出现,有些标注员会把同时含有两种病害的区域只标一个类别。规避措施:每批次标注完成后,用程序做一次自动抽检。抽检的规则很简单——用当前最优模型跑一遍这批数据,找出模型有高置信度检测但标注文件里没有标注的目标,再看这些目标是不是被漏标了。这套"模型辅助质检"的方法,可以把漏标率降低一大半。另外,数据版本管理建议用独立工具或明确的命名规范管理,不要只靠文件夹名区分。我们早期的版本混乱问题,就是靠着在数据集文件夹根目录放一个version.json文件解决的,里面记录版本号、创建日期、标注规范版本、统计信息、变更说明。6.4 模型在边缘设备上的性能监控模型部署到边缘设备后,不是万事大吉,要持续监控性能。尤其要注意两个指标:推理帧率是否掉速。现场环境温度升高、GPU频率自动降低,可能导致推理帧率从稳定的20fps掉到12fps左右。我们会在地面站显示当前实时的推理帧率,低于阈值时预警,提示飞手降低飞行速度或暂停作业等待设备降温。推理结果分布是否异常。某一天如果所有类别的检测数量都突然大幅增加,很可能是采集环境发生了变化(比如雾天、直射阳光强烈),而不是结构真的出了大问题。我们设置了一个简单的"异常检测告警"——统计每帧平均检测数量,如果连续30帧的平均检测数超过正常范围的3倍标准差,系统自动提示检查采集条件。7. 模型迭代思路与项目复用空间7.1 数据驱动的模型迭代机制视觉模型的迭代不是一次性交付就结束的,数据驱动的闭环迭代才是工程价值持续变现的关键。我们建立了"周度数据回流+月度模型更新"机制:每一次现场巡检产生的检测结果,尤其是工程师复核过的"确认/排除"标注,都会回流到训练数据池。这些数据是模型迭代最宝贵的资源——它们是真实场景、真实光照、真实缺陷形态的带标签数据,比初期采集整理的数据更具针对性。每月做一次增量训练,用过去4周回流的新数据加上初始训练集,全量训练一个新版本。从第10409期到第10418期(后续连续九期数据集),模型的mAP@0.5从0.862提升到了0.904,误检率下降了约22%。成长曲线不是线性的,中间有两期的mAP反而略有下降,排查后发现是新增数据里引入了某个特定桥梁的特殊表面纹理导致的,回滚之后重新调整数据配比才恢复正常。这也验证了一件事:缺陷检测类模型的性能天花板不在算法结构,而在数据的质量、覆盖度和持续回流能力。7.2 迁移到其他建筑结构缺陷场景这套系统最初的场景是桥梁巡检,但整套技术框架可以迁移到很多类似场景。我们在项目后期做过两个方向的试探:一是隧道衬砌检测。隧道内壁的裂缝、渗水、剥落和桥梁缺陷在视觉特征上有不少相似之处,但光照条件更差,补光要求更高。迁移的方式很简单:用桥梁数据预训练模型,补充隧道场景数据微调。因为底层特征已经学好了,只用大约2000张隧道图片就能跑出一个能用的初版模型。二是高层建筑外墙检测。这个场景需要配合爬壁机器人或变焦相机,图像分辨率要求更高,但检测目标类型基本类似。相比桥梁场景,外墙场景的难点在于玻璃幕墙反光、窗户边框造成的伪影、遮阳结构遮挡,这些都是需要在数据层面解决的问题。还有更远的扩展方向——比如把单体缺陷检测升级为"多尺度巡检":先广域扫描识别疑似区域,再对存疑区域做高分辨率精细化识别,这类似于医学影像里的"初筛+精查"逻辑,我对这个方向比较看好,也计划在下一年度验证。7.3 YOLO26在这个项目里能做到的上限聊到最后,说点个人体会。YOLO26这套算法在这个项目里的实际发挥,我认为是"超出预期但不算惊喜"。超出预期的是它的训练收敛速度和小目标检测能力,比前几代确实有明显进步,对裂缝这种极端细长的目标,mAP能到0.86以上,这在三四年前是难以想象的。不算惊喜的地方在于它本质上仍然是通用目标检测框架,对于"缺陷检测"这种强专业场景,它没有一个专门的损失项去约束"裂缝应该是连续的、有方向性的"这类结构先验。想突破这个上限,往分割方向走是必然的,实例分割或者全景分割能把缺陷的轮廓和走向完整表达出来,而不只是一个框。在项目收尾阶段,我们其实已经跑通了Mask分支的实验版本,在裂缝分割任务上的mIoU做到0.74,效果不错,但尚未达到工程部署的稳定性标准。后续大概会把YOLO26检测作为第一级快速筛查,再做分割作为第二级精细化分析,两级联动,在速度和精度之间取得更好的平衡。如果重新把这个项目做一遍,我最想改变的一点是:在项目启动初期就建立更完善的数据回流机制,而不是等到模型上线后才补课。视觉项目数据的价值是递进式的,早一天做好回流设计,模型的成长曲线就早一天变得陡峭。这个经验,值得所有想入坑缺陷检测的团队参考。