1. 验收标准
项目验收时最常听到的,其实是"拿去现场一测就出问题"——因为只要有一个问题说不准,客户就很难认可整套系统的"准"。
这句话背后,其实是一个很朴素的问题:检测系统的"准",究竟该怎么证明?
很多团队在演示阶段表现亮眼,一到客户现场却频频翻车:光照变了、料号换了、操作员换了、相机重新标定了,结果就开始飘。客户并非不讲道理,他们真正需要的,是一条可复现、可量化、可追溯的证据链。
所谓可复现,是指换个人、换个时间、换个工位,按同样的流程再测一遍,能得出同样的结论;所谓可量化,是指"准"不能停留在"看着还行"的感性判断,而要落到漏检率、过杀率、%GR&R 这些具体数字上;所谓可追溯,是指每一个数字背后都能找到对应的原始图像、参数版本和测试记录,出了问题能倒查到底。
这三者缺一不可。只有可复现没有可量化,客户依然不知道"到底有多准";只有可量化没有可追溯,一旦结果有争议就变成各说各话;而三者都具备,验证才从"我们觉得没问题"变成"数据证明没问题"。
这篇文章将谈谈一套靠谱的视觉检测系统,必须用数据来验证。下面从出货前的准备、现场调试的要点,到重复性测试、盲测、GR&R 分析这三板斧,给出一套可以直接照搬的标准性能验证流程。
2. "准"的维度
客户口中的"准",其实混杂着好几件事。做验证之前,必须先把指标拆开,否则测出来的数据根本无法解释——你说"准确率 99%“,客户问的是"那换个人测还准吗”“跑一个月还准吗”,答不上来,这个 99% 就没有说服力。
下面这张表把"准"拆成五个维度,每个维度对应不同的测试方法和指标,后续章节的验证流程正是围绕它们展开的。
| 维度 | 含义 | 典型指标 |
|---|---|---|
| 准确性(Accuracy) | 判定结果与真实标签的一致程度 | 漏检率、过杀率、准确率、混淆矩阵 |
| 重复性(Repeatability) | 同一对象、同一条件反复测,结果是否一致 | 判定一致率、测量值标准差 |
| 再现性(Reproducibility) | 换人、换设备、换时间,结果是否一致 | 操作员间方差、设备间方差 |
| 稳定性(Stability) | 长时间运行、环境波动下是否漂移 | 连续运行 N 小时的指标漂移量 |
| 鲁棒性(Robustness) | 面对边界样本、异常样本的表现 | 边界样本通过率、误判分布 |
关键认知:准确率高不代表系统可靠。一个系统可能对当前这批样本准确率 99.9%,但重复性极差——同一盘光纤测 100 次,结果在 99.5% 到 99.9% 之间跳。这种系统客户是不敢用的,因为他不知道下一次测出来会是什么。
更麻烦的是,这种不稳定性在演示阶段往往看不出来。演示时通常只测几件、环境也最理想,恰好落在系统"表现最好"的区间;一旦进入批量生产,样本量放大、连续运行时间拉长,那些偶发的翻转和漂移就会被成倍放大,最终表现为产线频繁误判、客户反复投诉。
所以判断一套系统靠不靠谱,不能只看它"最好能到多少",而要看它"最差会掉到多少",以及这个波动范围是否稳定可控。
所以验证流程的设计原则是:先证明稳定,再证明准确,最后证明可迁移。
- 先证明稳定:用重复性测试确认系统自身不抖,这是一切的前提;- 先证明稳定:用重复性测试确认系统自身不抖,这是一切的前提;
- 再证明准确:用盲测确认系统在未知样本上的判定能力,这是客户最关心的结果;
- 最后证明可迁移:用 GR&R 确认换人、换设备后结论依然成立,这是系统能否长期落地的关键。
顺序不能颠倒。跳过稳定性直接谈准确率,等于在流沙上盖楼;而只做单机测试不谈可迁移性,系统一旦上产线就会原形毕露。
3. 出货前
很多团队把验证当成验收时的一次性动作,这是最大的误区。验证能力应该在设计阶段就内建,否则现场根本测不出来。
3.1 数据可追溯
系统必须能保存每一次检测的原始图像、时间戳、参数快照、判定结果和置信度。没有原始图,任何"结果不一致"的争议都无法定位原因。
建议的最小留存策略:
- 原始图像:至少保留最近 7 天全量,异常样本永久留存
- 参数快照:每次参数变更记录版本号与变更人
- 判定日志:包含算法版本、模型哈希、阈值配置
3.2 参数冻结与版本管理
出货前必须冻结一版"基准配置",并给它一个明确的版本号。现场任何调参都要走变更记录,否则验证数据没有意义——你测的到底是哪个版本的系统?
3.3 标准样本集(Golden Sample Set)
这是整个验证流程的地基。需要准备一套带已知答案的样本集,覆盖:
- 正常样本(OK):覆盖不同批次、不同外观波动
- 缺陷样本(NG):覆盖所有缺陷类型,且每类至少 30 例以上
- 边界样本(Borderline):肉眼都难判的,用来测系统的判定边界
- 干扰样本:脏污、反光、划痕等易误判的"假缺陷"
样本集要固化封存,标注好标签来源(人工复判 + 客户确认),并记录样本的物理标识,方便现场复测时一一对应。
3.4 自测清单
| 检查项 | 要求 | 输出物 |
|---|---|---|
| 重复性自测 | 同一批样本连续测 100 次 | 一致率报告 |
| 盲测 | 用封存样本集,测试人员不知标签 | 混淆矩阵 |
| 环境敏感性 | 模拟现场光照/温度波动 | 指标漂移曲线 |
| 长时间稳定性 | 连续运行 24 小时 | 漂移趋势图 |
| 参数恢复 | 断电重启后配置是否一致 | 配置比对记录 |
4. 现场调试
现场翻车,八成不是算法问题,而是条件没对齐。调试阶段的核心任务是:让现场条件尽可能逼近出货前的验证条件。
4.1 光学与机械条件固化
- 相机、镜头、光源的位置必须机械定位,不能靠手感调
- 打光角度、亮度、色温记录成参数,写入配置
- 工件定位方式(治具、传送带速度、触发方式)与验证时保持一致
4.2 环境因素记录
现场的光照、温度、振动、粉尘都会影响结果。至少记录:
- 环境光强度(是否有窗户直射、车间照明变化)
- 设备运行温度
- 传送带速度波动范围
4.3 现场基线复测
系统上线后第一件事,不是急着跑生产,而是用封存的标准样本集跑一遍,与出货前的数据对比。如果差异超过预设阈值,先排查条件差异,而不是直接调参。
经验法则:现场复测结果与出货前偏差超过 0.5 个百分点,就必须先做条件排查,禁止直接改阈值"凑结果"。
5. 重复性测试
重复性测试回答的问题是:同一个东西,测 100 次,结果一样吗?
5.1 测试方法
以光纤盘检测为例:
- 取一盘已知结果的光纤(最好是包含若干缺陷的混合盘)
- 保持位置、光照、参数完全不变
- 连续检测 100 次,记录每次的判定结果与测量值
- 统计判定一致率与测量值的标准差
5.2 判定标准
| 指标 | 合格线(建议) | 说明 |
|---|---|---|
| 判定一致率 | ≥ 99.5% | 100 次中判定结果翻转不超过 0 次为佳 |
| 测量值标准差 | ≤ 公差带的 1/10 | 尺寸类检测适用 |
| 置信度波动 | 波动范围 ≤ 5% | 反映模型输出的稳定性 |
5.3 常见问题
- 结果翻转:通常是阈值卡在分布边缘,需要重新评估阈值设定
- 测量值漂移:可能是光源发热导致亮度变化,或相机温漂
- 偶发异常:检查是否有外部干扰(人员走动、设备振动)
重复性不过关,后面所有测试都不用做了——一个自己都测不准的系统,谈不上准。
6. 盲测
盲测回答的问题是:面对不知道答案的样本,系统判得对吗?
6.1 为什么要盲测
如果测试人员知道样本标签,会不自觉地"挑好样本"、或者对异常结果做主观解释。盲测通过信息隔离,保证测试的客观性。
6.2 盲测的组织方式
- 由第三方(或客户方)从标准样本集中随机抽取 N 个样本,打乱顺序
- 样本只标注编号,不标注 OK/NG
- 系统检测,输出结果
- 测试结束后,用封存的标签比对,生成混淆矩阵
6.3 样本量建议
样本量太小,统计上没有意义。建议:
- 缺陷样本:每类缺陷 ≥ 30 例(满足基本统计要求)
- 正常样本:≥ 100 例
- 总样本量:≥ 300 例,覆盖所有缺陷类型
6.4 结果解读
盲测输出的是混淆矩阵:
| 实际 OK | 实际 NG | |
|---|---|---|
| 判定 OK | TP(正确放行) | FN(漏检) |
| 判定 NG | FP(过杀) | TN(正确拦截) |
重点关注两个指标:
- 漏检率(FN Rate):漏检的代价通常远高于过杀,是客户最敏感的指标
- 过杀率(FP Rate):过杀高会导致产线频繁停机,客户体验差
这两个指标需要和客户提前约定验收标准,而不是测完再谈。
7. GR&R 分析
GR&R(Gauge Repeatability and Reproducibility,量具重复性与再现性)是制造业质量体系里的经典方法,用来回答:测量系统的变异,有多少来自系统本身,有多少来自人和设备?
7.1 GR&R
视觉系统本质上是一个"量具"。如果不同操作员操作、不同设备运行,结果差异很大,那这个系统的测量能力就是不可信的。
GR&R 把总变异拆成三部分:
- 重复性(EV, Equipment Variation):同一操作员、同一设备,重复测量的变异
- 再现性(AV, Appraiser Variation):不同操作员之间的变异
- 零件变异(PV, Part Variation):样本本身的真实差异
7.2 标准 GR&R 试验设计
经典做法是 10×3×3:
- 10 个样本(覆盖不同状态)
- 3 个操作员
- 每个操作员对每个样本测 3 次
- 共 90 次测量,顺序随机打乱
对视觉系统来说,"操作员"可以是不同的上料人员或不同的调试人员,"设备"可以是不同的工位或不同批次的相机。
7.3 计算与判定
用方差分析(ANOVA)法计算:
import numpy as np
import pandas as pd
# 数据结构:operator, part, trial, value
# 每个 operator 对每个 part 测 trial 次
def grr_anova(df):
"""
df: DataFrame,列包括 operator, part, value
使用 ANOVA 法计算 GR&R
"""
# 双因素方差分析(操作员 × 零件,含交互)
grand_mean = df['value'].mean()
# 零件均值
part_means = df.groupby('part')['value'].mean()
# 操作员均值
op_means = df.groupby('operator')['value'].mean()
# 单元格均值
cell_means = df.groupby(['operator', 'part'])['value'].mean()
n_op = df['operator'].nunique()
n_part = df['part'].nunique()
n_trial = len(df) / (n_op * n_part)
# 平方和
ss_part = n_op * n_trial * ((part_means - grand_mean) ** 2).sum()
ss_op = n_part * n_trial * ((op_means - grand_mean) ** 2).sum()
ss_cell = 0.0
for (op, part), mean in cell_means.items():
ss_cell += n_trial * (mean - grand_mean) ** 2
ss_interaction = ss_cell - ss_part - ss_op
ss_total = ((df['value'] - grand_mean) ** 2).sum()
ss_error = ss_total - ss_cell
# 均方
df_part = n_part - 1
df_op = n_op - 1
df_inter = df_part * df_op
df_error = n_op * n_part * (n_trial - 1)
ms_part = ss_part / df_part
ms_op = ss_op / df_op
ms_inter = ss_interaction / df_inter
ms_error = ss_error / df_error
# 方差分量
var_repeat = ms_error
var_op = max(0.0, (ms_op - ms_inter) / (n_part * n_trial))
var_inter = max(0.0, (ms_inter - ms_error) / n_trial)
var_part = max(0.0, (ms_part - ms_inter) / (n_op * n_trial))
var_grr = var_repeat + var_op + var_inter
var_total = var_grr + var_part
return {
'repeatability': var_repeat,
'reproducibility': var_op + var_inter,
'grr': var_grr,
'part': var_part,
'total': var_total,
'pct_grr': 100 * np.sqrt(var_grr) / np.sqrt(var_total) if var_total > 0 else 0
}
# 示例:构造 10 样本 × 3 操作员 × 3 次 的数据
np.random.seed(42)
records = []
for op in ['A', 'B', 'C']:
for part in range(1, 11):
base = part * 10.0 # 零件真实值
for trial in range(3):
value = base + np.random.normal(0, 0.5) + np.random.normal(0, 0.3)
records.append({'operator': op, 'part': part, 'value': value})
df = pd.DataFrame(records)
result = grr_anova(df)
for k, v in result.items():
print(f"{k}: {v:.4f}")
7.4 判定标准
业界通用的 %GR&R 判定:
| %GR&R | 结论 |
|---|---|
| < 10% | 测量系统优秀,可接受 |
| 10% ~ 30% | 有条件接受,视应用重要程度而定 |
| > 30% | 不可接受,需改进测量系统 |
对视觉检测系统,建议把门槛定得更严一些:%GR&R < 10% 才算合格,因为视觉系统的重复性理论上应该远好于人工。
7.5 常见问题定位
- 重复性差(EV 大):设备本身不稳定,检查光源、相机、机械定位
- 再现性差(AV 大):不同操作员/工位差异大,检查操作规范、标定一致性
- 交互作用大:某些操作员对某些样本的判定系统性偏移,需要针对性培训或排查
8. 完整验证流程
把上面的内容串起来,一套完整的验证流程如下:
验证报告
一份能让客户信服的报告,至少包含:
- 系统信息:硬件配置、软件版本、参数快照
- 样本信息:样本集构成、标签来源、样本量
- 测试条件:环境参数、操作人员、测试时间
- 测试数据:原始数据表 + 统计结果
- 结论:各项指标是否达标,与验收标准的对比
- 遗留风险:未覆盖的场景、已知的边界情况
9. 现场沟通
技术做完了,还得会表达。跟客户沟通时,建议按这个逻辑讲:
第一句:我们不承诺"绝对准",我们承诺"可验证的准"。
任何视觉系统都有边界,说"100% 准确"是不专业的。专业的说法是:在约定的样本范围和条件下,我们的指标是 X,并且这个 X 可以被复现。
第二句:我们的准,是测出来的,不是调出来的。
现场调参凑结果是最容易翻车的做法。真正的可靠性来自:标准样本集 + 重复性测试 + 盲测 + GR&R,四道关卡都过了,数据才站得住。
第三句:验证报告是交付物的一部分。
把验证报告作为正式交付物,客户拿到的不只是一套设备,还有一套可以自己复现的验证方法。这本身就是信任的来源。
10. 总结
回到最初的问题:客户买回去一套系统,怎么证明它是准的?
答案不是"我们的算法很先进",而是:
- 出货前:建立标准样本集,冻结版本,完成重复性、盲测、稳定性自测
- 现场:先对齐条件,再做基线复测,偏差超阈值先排查不调参
- 验证:重复性测试证明稳定,盲测证明准确,GR&R 证明可迁移
- 交付:用数据说话,把验证报告作为正式交付物
一套靠谱的视觉系统,必须用数据验证。而一套能被数据验证的系统,才是客户敢长期用的系统。
最后一句送给所有做视觉的同行:能被复现的准确,才叫准确。
本文提出一套面向工业落地的光纤视觉检测系统性能验证标准流程,涵盖出货前准备(数据可追溯、参数冻结、Golden样本集)、现场调试(光学/机械条件固化、环境记录、基线复测)、重复性测试、盲测(300+样本量、漏检率/过杀率评估)及GR&R分析(%GR&R<10%判定标准)。强调以可复现、可量化、可追溯为三大核心原则,确保系统在真实产线中稳定、准确、可迁移。

745

被折叠的 条评论
为什么被折叠?



