ViDi红色工具监督模式:缺陷检测中的数据标注、训练与部署实战 📅 发布时间:2026/9/17 12:57:59 👁 浏览次数: 简介面向工业视觉与自动化质检工程师的康耐视ViDi红色工具监督模式缺陷检测操作文档系统性梳理训练图片分OK/NG整理与重命名、新建项目与布局调整、添加红色工具及图片、ROI设置、图片标签与显示过滤筛选、参数配置、缺陷标注、模型训练及切换量产模式的完整工作流。资源包为1个docx格式文档大小1.57MB以分步骤图文说明的形式呈现重点涵盖样本标注要点、英文单引号过滤操作、训练完成后的模型检验与运行库创建以及供C#调用部署衔接等实操细节适合正在推进深度学习视觉项目落地、需要明确操作路径的技术人员按步骤复现。已有365人学习下载文档脉络清晰便于快速建立对ViDi红色工具监督模式从数据准备到模型封装全流程的认知。通过该文档还可掌握量产模式下用新图片验证检测效果、导出运行库供C#二次调用等关键操作减少上手的试错成本。1. 为什么监督模式下的红色工具才是缺陷检测的关键很多人第一次接触康耐视ViDi时习惯直接拖一个红色工具Red Tool到流程里丢几十张图点训练然后就开始抱怨“检出率不行”或者“误检太多”。实际上红色工具本身只是一台像素级分割引擎它能不能在缺陷检测里站稳脚跟起决定性作用的是监督模式下的训练数据质量和标注一致性。换句话讲缺陷检不出来多半不是算法不行而是你在数据准备阶段就把结果锁死了。这篇文章说的“监督模式”是指每个训练样本都要给出像素级标签——也就是说你在图上把缺陷区域精确涂出来告诉算法“这里有缺陷位置就在这些像素上”。这和蓝色工具做整图分类、绿色工具做无监督异常定位有本质区别。红色工具的输出是一张概率图每个像素属于哪个缺陷类别、属于背景的概率是多少都会明确算给你。正因为输出是像素级的它能把缺陷的形状、面积、边缘信息完整保留下来后续无论是做面积筛选还是连通域分析都有充足的余地。这篇内容不卖概念我按一线实施的习惯把从标注、训练、参数调试到部署上线的完整步骤拆开讲每个环节都给到可以直接复制的命令和配置参数。适合正在用ViDi做工业视觉项目、或者准备把ViDi引入产线的工程师。2. ViDi红色工具监督模式的数据集准备与标注规范2.1 监督模式到底“监督”什么像素级标签的意义红色工具在监督模式下做的事情本质上是一个图像分割任务输入一张图输出每个像素的类别概率。你给它的标签图Ground TruthGT上每一个像素要么属于某个缺陷类别要么属于背景。训练时网络逐像素计算分类损失把“缺陷像素”和“背景像素”在特征空间里划出边界来。所以说监督模式的质量下限不取决于模型取决于GT图上缺陷区域画得准不准、边界贴不贴合。现实中常见的错误是把GT画成方形框把所有缺陷框在里面。这样画网络会默认矩形框内全是缺陷训练出来的模型对真实缺陷的形状根本没有任何认知。真正合理的方式是沿着缺陷的实际轮廓逐点描边把缺陷的真实形状贴出来。比如焊锡桥连、划痕、凹坑这一类不规则缺陷精准的边缘标注直接决定最终缺陷边缘的锐利程度。因为红色工具推理时依赖轮廓特征如果训练时边缘就很含糊推理时轮廓必然发虚。另外监督模式下GT图的类别数量不宜过多。我一般建议控制在35个缺陷类别以内每类做独立的标签值。类别太多会让网络在特征空间里难以区分相近外观的缺陷也会显著增加标注工作量。如果某个缺陷类型外观差异很大比如既有线性划痕又有片状脏污就拆成两个类别分别标注而不是硬塞进同一个类。2.2 自建数据集的目录结构与样本量估算康耐视ViDi Studio对数据集的组织方式有具体要求。在ViDi Studio中创建红色工具训练集常见的做法是建立一个根目录下辖每个类别一个子目录每个子目录里放好该类别对应的原图和标签图。标签图命名与原图一致后缀不同。例如dataset ├── defect_class_A │ ├── 001.png │ ├── 001_label.png │ ├── 002.png │ └── 002_label.png ├── defect_class_B │ ├── 003.png │ └── 003_label.png代码说明这里的标签图001_label.png是同尺寸的单通道灰度图缺陷区域的像素值等于类别ID比如defect_class_A的所有缺陷像素值设为1defect_class_B设为2背景像素值全部为0。为什么要这样组织而不是把所有图放在一个大目录里因为ViDi在导入数据集时会按子目录区分语义类别后续在工具配置里选择类别名称时直接对应目录名省去手动映射的麻烦。标注工具方面ViDi Studio自带标注功能可以直接在图像上用画笔工具涂抹缺陷区域。更精细的标注我会用LabelMe或者像素标注工具导出多边形再通过脚本转成ViDi要求的标签图。标注时建议先做一轮预标注把所有缺陷按视觉外观粗分类别再逐类别精修边缘。这样能保证同一类别内标注风格一致。2.3 标注规范与一致性检查脚本标注一致性是红色工具监督模式最容易翻车的地方。同一个缺陷不同的人去标或者同一个人不同批次标如果边界差异超过23个像素训练出来的模型就会在边缘上产生不确定性。这种不确定性在复杂背景下会放大成误检或漏检。我一般在标注完成后会跑一遍简单的一致性检查脚本验证标签图的数量、尺寸、类别值和覆盖率。脚本如下import cv2 import os import numpy as np img_dir dataset classes {0: background, 1: defect_A, 2: defect_B} for cls_name in os.listdir(img_dir): cls_path os.path.join(img_dir, cls_name) if not os.path.isdir(cls_path): continue for fname in os.listdir(cls_path): if fname.endswith(_label.png): label_path os.path.join(cls_path, fname) label cv2.imread(label_path, cv2.IMREAD_GRAYSCALE) unique_values np.unique(label) invalid [v for v in unique_values if v not in classes.keys()] if invalid: print(f非法像素值: {label_path} - {invalid}) if label.max() 0: print(f空标注: {label_path})代码说明这段脚本遍历数据集目录对每一张标签图检查两件事——像素值是否落在合法的类别范围内以及图像是否全为背景值。出现非法像素值时说明标注工具导出时引入了噪点比如抗锯齿边缘产生的中间灰度值需要重新二值化出现空标注则要检查是不是导出时漏掉了缺陷区域。这个步骤虽然简单但能避免训练时因为标签数据不干净导致模型收敛困难。关于样本量经验值是每个类别至少包含150300张含有缺陷的图。如果产线条件允许缺陷形态变化很大的类别可以加到500张以上。这个量级对于ViDi红色工具来说足够学到稳定的特征表达。另外同一批次的数据要尽量覆盖不同光照、不同角度、不同产品型号。工业现场的光照变化是模型鲁棒性最大的敌人数据里没有覆盖到的情况算法在线上无论如何都扛不住。3. 红色工具训练参数配置与模型训练流程3.1 ViDi Studio中创建红色工具任务的完整流程在ViDi Studio中新建工具时工具类型选择Red Tool然后挂载上一步准备好的数据集。挂载后ViDi会自动扫描子目录结构并将类别列在类别管理器中。此时可以手动确认类别映射是否正确然后把类别分配到训练集、验证集和测试集。划分比例我一般用70%训练、20%验证、10%测试。测试集是训练过程中模型完全没见过的用来做最终的能力评估不能参与任何调参决策。红色工具在监督模式下有“Structured”和“Unstructured”两种训练模式这个选项需要在创建工具时选定。Structured模式适用于表面纹理具有规律性、周期性或方向性的场景比如拉丝金属表面、纹理布面、木纹面板Unstructured模式适用于背景纹理随机、无规律的场景比如纯色塑料件、玻璃表面、PCB板基材。选错了模式训练曲线会表现得很挣扎模型收敛速度慢且最终精度明显偏低。我自己经常遇到有人拿Unstructured去训练木材表面缺陷结果模型对木纹本身产生了大量误检。木材纹理是典型的有方向性周期纹理应该用Structured模式。3.2 Patch Size、Epochs与类别均衡的调参要点ViDi红色工具训练时最关键的三个参数是Patch Size、Epochs和裁剪策略。Patch Size决定了网络每次看到的图像区域大小直接影响网络能感知的最小缺陷尺寸和上下文信息量。Patch Size设置得越小网络看到的视野越窄能感知到的细节越小但上下文信息不足容易把纹理变化误判成缺陷Patch Size越大上下文信息充足但小缺陷在patch中占比变小容易漏检。常规经验如下缺陷尺寸推荐Patch Size说明小于5×5像素32×32或64×64网络必须看到足够大的缺陷占比5×5到20×20像素64×64或128×128平衡细节与上下文大于20×20像素或细长形缺陷128×128或192×192兼顾长条形缺陷的连续性如果产线上同时存在大缺陷和小缺陷一般的做法是训练多个红色工具大缺陷用大Patch小缺陷用小Patch最后在ViDi流程里把多个工具的检测结果做叠加。一个工具想同时干所有事通常会两头不讨好。Epochs方面ViDi默认是50个epoch起步。我一般在数据质量确认无误后先把Epochs设为100打开训练曲线实时观察损失值变化。如果损失值在最后20个epoch内还在明显下降就继续加训练轮数如果验证集损失已经出现上升趋势说明开始过拟合需要停止或者增加数据增强。ViDi内部自带数据增强策略训练时默认会对图像做平移、旋转、缩放等变换这些增强逻辑是内置的不需要额外配置。类别均衡方面需要特别关注缺陷类别之间的样本量差异过大问题。假如缺陷A有500张图缺陷B只有50张图训练时网络会倾向于把B类缺陷预测成A类。处理方式有两种一是尽量扩充B类数据量二是在类别管理器中为B类设置更高的损失权重。ViDi支持为每个类别单独配置权重系数我一般会把样本量少的类别权重调到1.52.0。这个数值现场调整即可观察验证集的混淆矩阵来确认是否还有类别倾向性。3.3 开始训练与训练曲线判读配置完成后点击训练按钮ViDi会首先做数据预处理把图像缩放到内部统一尺寸随后进入训练流程。训练过程中右侧面板会实时更新损失曲线和验证集准确率。判读训练曲线有一个实用的方法提示如果训练损失曲线在最初10个epoch内快速下降然后趋于平缓说明模型收敛正常。如果损失曲线呈锯齿状波动且不下降优先检查标签图是否干净再考虑降低学习率。ViDi的训练学习率是内部自动适配的用户侧能调的并不多。如果遇到收敛问题优先排查数据的标注一致性和类别间样本量比例这两项的杀伤力远大于任何超参数。训练完毕后ViDi会为每个类别输出验证集上的准确率和IoUIntersection over Union指标。IoU是衡量分割精度的核心指标它计算的是预测缺陷区域和真实缺陷区域的交集除以并集。IoU高于0.7说明分割质量可以接受高于0.85说明模型对该类别已经学得很扎实。如果某个类别IoU低于0.5基本可以判定“这个类别没学会”需要回到数据层面补样本或重标。4. 模型验证、部署推理与VisionPro集成4.1 在ViDi Studio中运行验证集评估训练完成后先不要急着导出模型。把本轮训练保留的测试集样本逐张跑一遍推理重点看三类情况漏检、误检、边缘质量。在ViDi Studio中打开工具的“Evaluate”选项卡选择测试集图像列表ViDi会逐张显示原图、GT标签、预测结果三者的叠加视图。颜色编码上绿色区域表示正确预测的缺陷像素红色区域表示误检蓝色区域表示漏检。这一步的观察要点是什么如果误检区域集中在背景纹理复杂的位置就回到训练模式选择上去检查如果漏检区域集中在缺陷边缘大概率是标注边缘不够精确需要重新精修GT如果误检和漏检都很少但缺陷形状整体偏移那要考虑是不是图像采集时光照不均匀导致缺陷位置在推理时产生了位移。确认测试集表现稳定后把测试结果导出为报告。报告中包含每张图的IoU值、误检率、漏检率。这些数据在生产验收时就是最直观的交付物。4.2 使用Python SDK调用Red Tool完成推理ViDi训练好的模型最终是要脱离Studio环境部署到产线上的。康耐视提供ViDi Suite和独立运行时ViDi Redistor其中Redistor是免费分发许可的运行时组件可以在不安装Studio的情况下加载训练好的模型做推理。常见做法是把训练好的工具导出为.vred或.vac格式的部署文件部署到工控机上通过ViDi的SDK远程调用。一个典型的Python调用实现如下import vidi import cv2 import numpy as np # 连接到本地ViDi Redistor服务 session vidi.connect(localhost, port8070) # 加载已训练好的红色工具模型 tool session.load_tool(C:/models/pcb_defect.vred) # 读取待检测图像 img cv2.imread(C:/images/sample_001.png) img_rgb cv2.cvtColor(img, cv2.COLOR_BGR2RGB) # 执行推理 result tool.process(img_rgb) # 获取输出分割掩膜 mask result.get_image(Red Tool)代码说明这个脚本通过ViDi的Python SDK连接本地Redistor服务加载模型后对单张图像执行推理。process方法内部完成了图像预处理、patch分割、模型前向计算和结果拼接返回的分割掩膜就是每个缺陷类别的像素级分类结果。拿到掩膜后可以直接用OpenCV对掩膜做连通域分析计算每个缺陷闭合区域的面积、长宽比、位置坐标从而根据产线标准做OK/NG判定。SDK方式适合自研上位机逻辑的集成场景。如果现场用的是康耐视自家的VisionPro平台更省事的做法是在VisionPro QuickBuild环境中直接添加ViDi工具组件把图像源接到ViDi Red Tool上输出端接面积筛选脚本。VisionPro里的ViDi工具封装了与Studio相同的推理内核两者使用同一套模型文件不需要额外写胶水代码。我在焊锡检测项目里就是用的这套组合相机采集图像VisionPro做图像预处理ViDi Red Tool检测焊锡桥连和虚焊区域最后用面积阈值过滤掉微小噪点整个流程在QuickBuild里连线完成调试了不到半天就上了线。4.3 推理速度评估与瓶颈定位红色工具推理时是把输入图像按Patch Size切块后逐一送入网络的所以推理耗时和图像分辨率高度相关。一张1200×800的图像如果Patch Size是128×128大约需要80个patch的推理时间。实测在普通工控机CPU少量GPU加速条件下单张推理耗时通常在200600毫秒之间。如果产线节拍要求小于300毫秒需要重点关注推理耗时。定位瓶颈的方式很简单在SDK里对process调用做分段计时统计图像预处理耗时、模型推理耗时、后处理耗时三个部分。模型推理耗时占比通常在70%以上是主要优化对象。降低耗时的直接手段有降低输入图像分辨率、增大Patch Size、开启GPU推理。注意增大Patch Size虽然减少了patch数量但如果缺陷尺寸偏小增大会直接牺牲检出率所以这个参数要结合检测目标谨慎调整。5. 现场维护的兜底技巧用概率图定位误检根因ViDi Red Tool部署到现场之后一定会在某个时间点出现“训练时没见过的状况”。最常见的是产品型号更换后背景纹理发生了微调模型开始在某些区域产生连续误检。这时候一般不要直接重新训练整个模型先做一次快速诊断。在SDK接口中可以通过参数获取到更富信息量的中间输出——每个像素的概率得分图。结合概率图做阈值后处理是现场调误检最快的方法。默认情况下ViDi会输出每个缺陷类别的二值掩膜内部概率阈值通常在0.5附近。如果现场误检增多查看误检区域的概率得分如果误检区域的概率普遍在0.50.7之间说明模型对这部分区域本来就不够确定只需调高后处理阈值到0.7以上大部分误检就会被滤掉同时不会影响真正缺陷的检出。如果误检区域的概率得分超过了0.9那就说明新样本和训练集之间的特征差异已经大到阈值不可调需要把这类误检图加回训练集微调模型。另一个预防性维护技巧是定期做数据回流。产线运行期间按天收集误检图像和临界的NG图像每周汇总一次补充进训练集重新训练。这个习惯能让模型随产线变化持续进化而不是上线即定型。ViDi支持增量训练新数据加入后保留原有模型参数继续迭代1020张新图就能完成一次快速微调。最后给所有使用ViDi红色工具的工程师一条我自己的经验法则不要追求STUDIO里的训练精度拉到99%真正上线后的表现是由数据覆盖度决定的。在测试集上做到IoU 0.85以上并且连续3天无误报就已经具备上线条件了。剩下的交给产线数据回流逐步逼近最优状态。本文还有配套的精品资源点击获取