拓冰建站拓冰建站
首页 / 资讯中心 / 正文

深度学习在机器视觉项目中的落地实践:从数据标注到模型部署

用深度学习做机器视觉项目这两年算是彻底从概念验证走进了生产落地。我最早接触这个方向是在做金属零件表面缺陷检测的时候传统算法折腾了大半个月换光源、调阈值、抠特征一到产线上换料型就崩最后硬着头皮上了CNN两天跑通初版识别率直接拉到可用的水平。那次之后我就明白了深度学习不是来抢机器视觉饭碗的它是来补传统算法短板的。这篇文章不聊论文里的花活就讲实际项目里怎么把深度学习落进图像处理流程从选型、标注、训练到部署我把这两年踩过的坑和验证过的方法都整理一遍给正在往这个方向转的同学做个参照。很多人一听到深度学习图像处理第一反应是拿个预训练模型跑一下分类。但机器视觉项目和学术demo完全是两码事你要面对的是产线上的节拍、强干扰的背景、有限的计算资源还有标注成本这种实打实的约束。所以这篇文章会重点讲三件事第一深度学习在视觉项目里到底该用在哪些环节第二一条完整可落地的技术链路长什么样第三那些模型跑到95%准确率但上不了线的坑都在哪里。1. 传统视觉的天花板在哪深度学习补的是哪块短板先说个我在项目里常遇到的场景。某次做手机中框的划痕检测来料批次不同表面纹理差异极大。用传统的Canny边缘提取加形态学处理光源稍微晃一下误检率就飙到30%往上。后来试过调整滤波窗口、动态阈值、背景差分效果都不稳定。最后实在没辙烤了一份深度学习模型进去问题瞬间变成数据够不够而不是算法行不行。这种经历我相信做视觉集成的同行都有过传统算法的上限很清楚——它依赖人工设计的特征而人工特征往往撑不过复杂工况的变化。传统视觉的优势是速度快、可解释性强、在受控环境下极其稳定。在定位、测量、字符识别、二维码读取这些任务上它依然是首选方案。但一旦遇到以下情况传统方法就会显得吃力缺陷类型不固定或无法用灰度、形状、纹理的固定规则描述背景变化大同一类物体在不同光照、角度下成像差异明显目标与背景对比度低边缘提取后噪声远多于有效信息需要理解语义比如判断这个区域的纹理是不是正常纹理而非这里有没有超过某个阈值深度学习模型本质上是在学习一个从像素到语义的非线性映射。它不需要你告诉它划痕是暗的、细的、长的它自己从标注数据里归纳划痕长什么样。这个特性让它特别适合处理那些说不清、但看得懂的视觉任务。我在实际项目里的体会是能把缺陷规则写清楚的就用传统算法写不清楚的交给深度学习。两者不是替代关系而是把合适的工作交给合适的工具。还有一个容易忽略的点深度学习的嵌入式特征提取能力可以复用。你训好一个模型它中间层的特征图可以当成一个高级特征提取器再接到传统分类器上或者直接把这些特征用于图像配准、图像拼接效果都远超直接在原图上做特征点匹配。这也是为什么很多ISP图像信号处理流程里开始引入轻量网络——不仅仅是端到端出结果更多是拿它来优化前级处理质量。2. 视觉项目里真正能用上的四类深度学习任务深度学习在机器视觉里不是只有目标检测一种玩法。根据产线上的实际需求我一般把任务拆成四类对应的网络结构和数据标注方式完全不同。2.1 图像分类最简单但适用范围比你想象中窄图像分类解决的是这张图里有没有某种缺陷的问题。网络输出一个或多个类别标签结构上可以用ResNet、EfficientNet这类标准分类网络。它适合的场景是每个检测对象只需要一个全局判断不需要知道缺陷具体在哪。比如电子元器件的外观良品/不良品判定注塑件的飞边区分这类任务标注成本最低训练也最快。但工业现场的需求往往不止是或否。你告诉我这个零件不合格我得知道问题出在哪个位置才好让后续工位去处理。所以纯分类方案在视觉项目里的占比其实不高更多是作为初筛环节把明显的不良品先踢出去减少后续精检的负载。实际落地时我经常把分类网络做成二段式——先用粗分类把大逻辑过滤掉再在可疑区域上做细粒度分类这样每个模型的难度都降下来了精度也更容易堆上去。2.2 目标检测工业视觉的主力但别直接套用通用模型目标检测要解决的是缺陷/目标在哪里的问题输出边界框加类别。YOLO系列和Faster R-CNN是这里的主流选择前者胜在速度后者胜在精度。工业现场我用YOLO居多因为产线节拍不允许你做两阶段的推理一张图动辄几十毫秒级别的预算YOLO的性价比是碾压级的。不过一定不要直接把在COCO上预训练的权重拿过来用。工业缺陷的形态跟自然图像里的物体差距太大预训练权重只能作为初始化必须在自己的数据集上做充分微调。我在做电池极耳缺陷检测时最初直接用了YOLOv5的COCO权重mAP只有0.3上下后来换成了在自研数据集上从预训练权重微调500个epochmAP才慢慢涨到0.85以上。数据集的质量和数量永远比网络的先进程度更能决定项目成败。2.3 图像分割精度要求高、背景复杂时的答案分割任务把每个像素归到某个类别输出的是mask图。U-Net是工业视觉里最常见的分割网络尤其适合做缺陷面积测量、边缘提取、或者前景和背景分离困难的场景。我做过一个项目要在强反光的金属表面上检测细微的砂眼目标区域占整张图的不到1%检测框级别的方案根本无法工作最后用U-Net输出像素级mask再配合连通域分析做面积过滤才稳定交付。分割模型的标注成本比检测高很多需要在像素级别上画mask。一个甲方的技术负责人跟我说过一句大实话标注一万张检测框图团队两天能干完标注一万张分割图一周都未必够。所以我在项目规划阶段会先问一个问题这个需求真的需要像素级输出吗如果下游只需要判断有没有、在哪一片区域检测框就够了没必要为了技术上的精确去付出过多的标注成本。2.4 异常检测小样本场景的最后底牌工业视觉里最头疼的情况不是缺陷多而是缺陷少。很多良品率超过99%的产线你收集三个月都不一定能攒出一千张带缺陷的图。这时候监督学习基本报废异常检测派上用场。常见方案有两类一类是基于重建的训练一个自编码器只学良品的重建能力推理时重建误差大就认为是异常另一类是基于特征分布的用预训练网络提取特征再通过高斯分布或孤立森林判断是否偏离正常分布。严格来说异常检测不是深度学习的专属领域但深度学习特征提取器的加入让它的能力上限抬高了一大截。我做过一个纺织物表面检测项目缺陷类型至少有七八种每种样本都很少统一训一个多分类模型几乎不可能。最后用了一个在ImageNet上预训练的ResNet做特征提取对良品图建了一个特征库推理时计算余弦距离来判断是否离群效果出乎意料地稳。这类方案特别适合样本收集困难、缺陷类型未知的早期项目阶段。3. 从数据到部署的完整链路一个真实项目的技术拆解深度学习视觉项目跟做传统视觉的流程完全不同。传统视觉的研发重心在算法设计深度学习项目的核心堵点通常不在模型而在数据。一套标准流程大概是数据采集、数据清洗与标注、模型选型与训练、模型评估与迭代、模型转换与部署、产线联调。下面我把每个环节的关键动作和需要避开的坑逐个展开。3.1 数据采集先定覆盖逻辑再谈采集数量采集的第一步不是架相机拍照片而是先想清楚这个模型上线后到底要面对哪些情况。我在项目启动时一定会拉一张清单光照变化的极限范围、来料批次差异、不同产品型号的切换方式、缺陷类型清单。每一个维度都要在数据里体现否则模型上线就是定时炸弹。具体到采集动作我一般建议在真实产线上连续采集至少一周覆盖白天夜晚的光照变化、不同批次来料并且要刻意保留一些边缘样本——比如轻微划痕、疑似缺陷的纹理变化。很多工程师有个坏习惯只采集标准缺陷和标准良品结果模型在验证集上漂亮得不行一到现场就被那些说不清是好是坏的图片打回原形。数据采集的目标是穷尽变化而不是凑够数量。一个容易被忽略的点是成像一致性。深度学习模型对输入的分布非常敏感如果训练用的图像是实验室光纤光源拍的而现场是荧光灯环境同样的缺陷特征在特征空间里可能投影到完全不同的位置。所以采集环境必须和部署环境一致或者至少在训练时做充分的数据增强来模拟环境差异。我在多个项目里验证过把现场光照变化做进训练集比增加两倍正常光照下的样本更有效。3.2 标注质量大于数量标注规范决定模型上限标注不是简单地框出目标就完事。我最看重的一份标注规范长这样类别定义要互斥避免一个缺陷物体同时打上两个标签边界框要贴边但也不要因为贴得更紧而切掉缺陷的实际边缘遮挡、模糊目标要单独标注或剔除不能给模型投喂低质量监督信号每张图需要至少两个人交叉标注分歧样本必须由项目负责人裁定标注标准不统一模型学出来的边界一定是乱的。我见过一个项目两个标注员对划痕的判定口径不一致——一个只标肉眼清晰可见的一个把纹理轻微不连续也算划痕。结果模型训练出来之后活生生成了一台鉴宝仪器只在两个标注风格的交集上有信心边缘样本全翻车。后来重新梳理标注规范花了一周时间把一千多张争议图逐一修正指标立刻回升。工具方面检测类任务我用LabelImg或X-AnyLabeling分割类任务用LabelMe或EISeg。X-AnyLabeling自带SAM预标注能力能大幅减少手动框选的时间但生成的结果一定要人工复核。我的经验是AI辅助标注能把单个目标的标注时间从60秒压到15秒但复核环节不能省否则AI的错误标注会被模型学进去变成一套自我实现的偏见。3.3 模型选型与训练不要盲目追新按资源约束倒推说到模型选型很多人的第一反应是哪个最新的用哪个。实际项目里选模型的第一准则不是精度上限而是推理环境能跑多快。同一个缺陷检测需求在工控机上的预算可能是30ms/图在嵌入式设备上可能只有150ms——这两者对模型体量的限制是完全不同的量纲。我常用的一条选型决策线是这样有NVIDIA独立显卡预算30ms以内优先YOLO系列或者RT-DETR无GPU纯CPU工控机优先轻量化的MobileNet SSD结构显存受限的嵌入式平台优先做模型蒸馏把大模型知识迁移到小模型上极高精度、对速度不敏感比如离线质检可以用Cascade R-CNN或者分割模型训练阶段有两条铁律第一先小规模跑通流程再全量训练。我在第一个项目上吃过亏——一开始直接丢全部数据进去数据管道的bug导致标签和图像错位跑了12个小时才发现浪费了一个工作日。后来都是先拿20%数据跑50个epoch确认loss能正常下降、验证集指标在动才启动全量训练。第二训练集和验证集必须按批次切分而不是按单张随机切分。同一个产品批次的光照、材质高度相似如果同一批次的图同时进了训练集和验证集模型实际上是在背答案验证集的精度参考价值会大打折扣。3.4 模型评估线上指标和线下指标是两套逻辑模型训练完先别急着转换部署。离线评估时除了看mAP一定要加上业务视角的评估维度。比如缺陷检测漏检率比误检率致命得多——漏一个不良品到下游可能导致整批产品退货误检几个良品产线做复检还能挽回。所以在评估阶段我习惯把混淆矩阵拉出来针对漏检样本逐张分析是数据没覆盖到还是模型能力不足再定向补数据或调后处理逻辑。另外还要建立难例集机制。每次训练迭代后把验证集里预测错误的图片单独存下来形成一个小型的难例池用于下一轮训练的数据增强或主动学习。这个习惯在一个半导体外观检测项目里帮了我大忙——第一轮模型在金属毛刺上频繁漏检难例池里全是毛刺样本我针对性做了数据增强和补充标注第二轮复测毛刺召回率从68%直接跳到93%。4. 部署环节深度学习在视觉项目里真正的分水岭模型训练只是完成了研发环节真正决定项目能不能交付的是部署。我把部署拆成三个部分模型转换、推理框架选型、业务逻辑封装。这三个环节每走一步都会踩到不同的坑而且越往后越和纯深度学习没关系更像是一个系统工程问题。4.1 模型转换与加速不只是换一个格式那么简单PyTorch训练的模型不能直接端到端部署通常要先转成通用格式再走推理引擎。我常用的链路是PyTorch导出ONNX再用ONNX Runtime或TensorRT加载。这个过程中最常见的坑是算子兼容性——某些在PyTorch里表现正常的操作比如特定的上采样方式或者自定义算子导出到ONNX时可能直接报错或者转换后精度掉一截。所以我在设计网络结构阶段就会预留部署意识尽量使用标准算子避免自定义层如果非用不可确保在导出时有对应的替代实现。还有一个经验导出后必须做精度验证。同一个输入在PyTorch里的输出和ONNX Runtime里的输出差异如果超过1e-3就要检查哪一步转换出了问题。不要嫌这个步骤繁琐我见过不少同行跳过精度对比直接上线结果推理结果和离线验证完全对不上排查了大半天才发现是量化导致的精度损失。4.2 推理框架选型按部署场景做选择部署环境五花八门我把常见选项和使用场景整理如下部署环境推荐推理框架备注NVIDIA GPU工控机TensorRT精度和速度综合最优支持FP16/INT8量化跨平台CPU部署OpenVINO对Intel CPU优化明显部署简单通用CPU/GPU环境ONNX Runtime兼容性最好适合快速落地嵌入式ARM平台RKNN / NCNN针对移动端和边缘NPU优化模型需针对性转换纯C工业相机集成OpenCV DNN模块部署简单但不支持复杂模型结构说到TensorRT我特别提一下量化的问题。FP16量化通常对精度影响不明显可以放心开INT8量化则需要在标定集上仔细验证因为工业场景的缺陷特征往往非常细腻INT8量化很容易把细微纹理的区分度抹平。我在一个PCB焊点检测项目里试过INT8量化mAP掉了近8个点直接放弃。后来改成FP16加TensorRT的层融合推理速度提升了大约30%精度几乎无损这才是性价比最高的组合。4.3 业务逻辑封装模型输出不是最终答案模型输出的边界框或者mask在进入产线逻辑之前还要做大量后处理。比如缺陷检测的最终判定往往不是网络说缺陷就是缺陷而是要结合面积、位置、形状做工程约束。U-Net输出的mask要经过连通域分析、面积过滤、形态学开闭运算才能变成PLC可以理解的触发信号。YOLO输出的多个重叠框要经过NMS去除重复再按置信度分数和业务经验设定最终阈值。这个环节最考验经验因为每个项目的业务规则都不一样。比如一个零件规定划痕长度超过3mm算缺陷那模型的输出只是一个可能是划痕的区域具体量测和判定还要靠后处理来完成。我一般的做法是网络负责语义识别后处理负责工程判定两者各司其职可解释性和稳定性都更好。产线上出问题需要回溯时你也能明确区分是模型看错了还是后处理规则有漏洞避免一团浆糊式的debug。5. 混合方案大多数工业项目的最佳解不是全深度学习写到这里必须泼一盆冷水纯深度学习的端到端方案在工业视觉里并不总是最优解。我做过这么多项目最后的交付版本里几乎都保留了相当比例的传统算法深度学习和传统视觉在产线上是各干各的活最终组合成一套完整的方案。5.1 深度学习做语义传统算法做测量最经典的组合方式深度学习先把目标从复杂背景里找出来传统算法再对找出来的区域做精确测量。比如瓶盖的密封缺陷检测先用YOLO把瓶盖区域检测出来裁剪出ROI之后再用传统边缘提取和圆拟合测量密封圈的完整性。这样做的好处是深度学习无需输出像素级精度的结果对标注和训练的要求都大幅降低而传统算法在已知ROI内做测量稳定性也远高于在全图上直接跑。还有一个常见场景是OCR识别。现在很多视觉项目里的字符识别已经转向了深度学习OCR方案比如PaddleOCR或者基于CRNN的定制模型。但实际生产环境下字符位置本身还要靠传统模板匹配先定位。我做过一个药瓶标签日期识别项目文本区域在瓶身上的位置会随旋转发生偏移先用形状匹配把标签区域锁住再做透视矫正最后才送入OCR网络。没有前级的传统处理OCR的准确率根本扛不住。5.2 传统算法做前置过滤深度学习只处理真正难的部分深度学习模型推理再快也架不住产线每秒几十张的吞吐量。如果所有图像都要过一遍深度学习模型对算力的要求会很高。聪明的做法是先用传统算法做快速过滤把明显良品直接放行只有疑似不良的少数图像才进模型精检。比如汽车零部件的外观检测我先用灰度直方图和纹理统计做一级筛选能把大约60%的良品直接放行剩下40%的图像再进深度学习模型整体算力开销下降明显。这种两级检测还有一个隐藏优势传统前置过滤的误检召回可以设置得比较宽松——宁可多放几张疑似图进深度学习也不要漏掉真正的缺陷。因为深度学习模型承担了最终判定责任传统算法只是帮忙降低待处理数据的体量。用这个架构做过一个金属件表面检测项目产线节拍从每件1.2秒压到0.45秒精度还能维持在可交付水平。5.3 传统算法做数据增强用性价比极高的方式白嫖样本还有一个很多人没意识到的技巧传统图像处理算法可以作为数据增强的生成器。旋转、翻转、亮度扰动这些常规增强手段谁都会用但工业场景更需要的是模拟真实干扰。我经常用传统算法合成一些干扰样本——比如用高斯噪声模拟传感器噪声用模糊模拟失焦用频域滤波模拟不同材质表面的纹理变化。把这些合成样本混进训练集模型的泛化性提升非常明显。高阶一点的做法是用生成式方法做图像增强把真实缺陷和正常图像的背景融合制造大批量伪缺陷样本。这种增强方式在电气元件针脚检测项目里效果显著——真实缺陷样本只有600多张融合增强后得到5000多张模型的召回率大概提升了10个百分点。但要注意合成样本比例不要超过总数据量的50%否则模型会习惯合成样本的平滑感在真实图像上反而不适应。6. 数据才是决定项目成败的真正瓶颈我见过太多团队在模型结构上反复较劲却忽略了数据本身的准备程度。说实话在工业视觉这个场景里算法和模型结构带来的边际收益远不如数据质量的提升来得直接。数据这块有几个关键动作值得单独展开来讲。6.1 小样本困境数据不够时能做什么很多视觉项目的真实处境是客户说帮我做个检测但缺陷样本一年也攒不了多少。面对小样本困境有几个实用的操作路径迁移学习是默认选项。用预训练模型作为起点哪怕是缺陷检测这种与自然图像差异巨大的任务预训练权重提供的底层纹理特征依然有效。数据增强必须做足。除了常规的几何变换要专门针对工业场景做增强比如添加光照渐变、高斯噪声、运动模糊、对比度扰动。如果缺陷样本实在有限可以考虑用传统算法先合成一批粗样本再人工修正。比如用图像拼接把真实缺陷粘贴到不同背景上。半监督学习和伪标注也值得尝试。用良品数据训练一个初步的异常检测模型再用它对未标注数据打伪标签人工筛选部分高置信度的伪缺陷加入训练集。这里面最难的不是技术而是心态。很多团队在小样本条件下会本能地追求更复杂的模型但实际上复杂模型更容易过拟合。我做过一个项目一万五千张图里只有两百多张有缺陷最开始用YOLOX-large训练到后期过拟合得相当厉害验证集mAP反而在下降。后来换成参数量小得多的YOLOv5s配合充分的增强最终精度反而高一截。小样本场景下模型简洁、增强丰富、训练克制比更大更强更管用。6.2 数据标注的脏数据问题一个影响被低估的因素标注错误对模型精度的影响很多人心里没数。我的经验是标注错误率超过5%模型精度就很难超过90%。这不是玄学模型会学着把错误标注的区域当成真实目标在一些边缘样本上产生严重的误检。所以在项目流程里一定要安排一个标注质量抽检环节。我的常规做法是从标注完成的数据里随机抽取5%~10%做二次审核如果错误率超过2%打回重标。这个动作看起来增加了工作量但省下来的都是后续训练调试的时间。另一个习惯是每次训练完模型自信地预测错的那个类别大概率对应着标注质量最差的类别——用模型反推标注问题是很实用的debug手段。6.3 数据版本管理项目混乱的根源往往在这深度学习项目里数据在持续更新、模型在持续迭代如果数据没有版本管理复现一个历史结果会变得极其困难。我在多个项目里吃过亏模型上线一个月后客户反馈某个缺陷类型误检偏高我需要回溯训练数据分布却发现自己已经不记得当时训练集的脏数据清洗到什么程度了。所以现在我的每个项目都会做三件事第一原始数据统一存储不轻易删除任何清洗操作都在副本上进行第二每次训练用到的数据版本都打标签记录用清单记录图像数量、类别分布、增强策略第三模型权重和对应的评估报告绑定存储随时可以回放这个模型是用哪些数据、训了多少轮、验证指标是多少。这三点看起来简单但真正做到位的团队并不多而它们恰恰是项目长期维护的基石。7. 工具链选型参考从标注到部署的常用组合工具链的选择直接影响开发效率和项目交付的顺畅度。我按项目流程把常用工具整理成一份清单供新手参考也提醒有经验的同行注意工具之间的衔接问题。数据采集阶段我常用的相机SDK是Halcon和基于GenICam标准的通用采集工具需要做图像预处理的还会接OpenCV来写实时预览和触发逻辑。标注阶段目标检测用LabelImg或者X-AnyLabeling分割类用LabelMe或EISeg。训练阶段主流的深度学习框架是PyTorch配合Ultralytics的YOLO系列工具能大幅缩短建模周期。如果你想用Halcon自带的深度学习工具也可以但它的模型自由度比开源框架小很多适合快速验证原型不适合深度定制。部署阶段前面说过TensorRT、OpenVINO、ONNX Runtime各有定位。这里补充一点如果项目要求深度集成到现有的视觉软件里比如基恩士或者康耐视的生态那这些厂商自带的深度学习工具会更省事因为它们直接输出到自己的软件流程中。缺点是绑定商业授权模型的定制空间也有限。我在一个3C行业的项目里前期用开源方案做足了验证后期为了保护客户产线的兼容性还是把模型移植到了商业视觉平台里。整个迁移过程比想象中烦琐但对方的售后支持和产线稳定性确实值得这笔授权费。另外提一下OpenCV在深度学习链路里的角色。很多人以为OpenCV是传统算法的代名词但实际上它的DNN模块可以直接加载ONNX模型跑推理用来做快速原型验证或CPU环境下的轻量部署很合适。但注意OpenCV DNN模块对算子的支持不如专用推理框架全面复杂网络容易报错或精度下降。我的建议是用OpenCV DNN做流程验证、UI演示没问题正式上线还是优先考虑专用推理框架。8. 项目交付前一定要做的五件事项目从模型能跑到能交付之间还有一段路要走。我有几个固定动作每一步都是在真实项目里踩过坑才养成的习惯。第一做长时稳定性的压力测试。让模型在产线环境连续跑8个小时以上记录推理延迟的变化、显存占用、CPU温度、偶发报错。深度学习模型在没有内存泄漏的框架里一般不会出问题但量化后的模型、边缘设备上的推理有时会因为缓存机制积累导致性能衰减这种问题只有长时间跑才能暴露出来。第二用现场数据而非实验室数据做最终验收。很多项目在办公室验证时模型精度98%到了现场变成90%原因几乎都是现场光照、振动、来料状态和实验室差异太大。所以验收前最后的测试集一定要从现场实际生产流程里采集覆盖至少3天的生产波动。第三建立误检召回的可视化报告。产线调试阶段我会让程序自动记录每张被判为缺陷的图并整理成PDF报告。这个报告既要给工程师看也要给甲方生产负责人看——他们需要确认这个系统抓出来的东西确实是他们关心的缺陷而不是一些没用的纹理变化。信任是所有视觉项目交付里最要紧的一环。第四写清楚模型更新的操作手册。模型上线不代表项目终止产线新增产品型号、来料材质变化都需要模型迭代。交付文档里必须写明如何采集新数据、如何增量训练、如何验证、如何回滚。我把模型更新流程做成了一套半自动化的脚本来处理新数据到达后自动切分训练集和验证集训练完成后输出对比报告确认无误再由现场工程师一键替换。有了这套流程客户的运维压力大幅下降模型也不会因为没人敢更新而逐渐失效。第五规划一个模型漂移的监控机制。工业场景的数据分布是会变的传感器老化、来料批次更换、环境季节变化都会让模型精度慢慢下滑。我的做法是在系统里内置一个轻量的统计模块周期性计算模型预测结果的置信度分布一旦发现分布偏移超过阈值就自动报警提醒工程团队重新评估模型。这个机制帮我提前发现过两次模型劣化避免了批量不良品流到客户端的大事故。9. 关于图像处理前置优化的一点心得最后聊一个容易被忽视、但非常影响最终识别效果的话题图像处理在深度学习前面的作用。很多初学者直接把原始图像丢给网络然后疯狂调模型结构却忽略了ISP和图像预处理对模型性能的增益。业界常说的Garbage in, garbage out在深度学习视觉里同样成立。光照不均匀对深度学习模型的影响虽然不像对传统边缘提取那么大但依然会显著降低模型性能。我的习惯是在模型前端加一些轻量的图像处理步骤比如去噪、畸变校正、光照归一化。这些步骤不改变图像的语义内容但能让模型把注意力放在真正的特征上而不是被环境变量干扰。以光照归一化为例常见做法是估计背景光照并做分块校正或者用CLAHE这类对比度增强算法。我在一个塑胶件外观检测项目里做了对比实验同一套模型输入原始图像时mAP为0.82加了光照归一化预处理后mAP达到0.87推理时间几乎没增加。这类前处理trick投入产出比惊人而很多团队却在模型结构上反复试错绕了远路。图像缩放方式也值得留意。工业相机输出的原始分辨率往往远高于模型输入尺寸比如500万像素的图缩放到640x640。直接resize会丢失很多微小缺陷的细节我的做法是先用滑动窗口把原图切成若干重叠patch或者用ROI检测先定位目标区域再裁剪缩放。此外保持原始图像的保存格式也很重要——尽量用无损格式存储数据避免反复JPEG压缩带来的纹理损失这些细节在缺陷检测场景里都会真实影响模型精度。做视觉项目这些年我最大的体会是深度学习在机器视觉里确实很能打但它不是银弹而是整个系统工程中的一个环节。数据质量、部署策略、业务逻辑、传统算法的配合每一项都决定项目最终能否交付。如果看完这篇文章你只记住一句话那就是模型是工具数据是基础场景是约束交付才是目标。按这个顺序想问题大多数项目都不会跑偏。
分享:

看完干货,该让你的企业上线了

免费需求沟通 · 48 小时内出具建站方案 · 河南本地可上门