filter-inspection / docs /RESULTS.md
daipath's picture
加入完整文档集:复现指南、逐文件说明、结果汇总、诚实性审计、已知边界
0e9808f verified
|
Raw
History Blame Contribute Delete
13.8 kB

全部实验结果

阅读前提:所有 test 数字都是「阈值在 val 上定、test 只评一次」的诚实口径,除非明确标注 oracle。 AUROC 的噪声地板是 ±0.005(Hanley–McNeil 标准误)——排名相邻的模型之间没有统计意义上的差别


数据与切分

A 套(全混合 8:1:1) B 套(跨批次)
train / val / test 2768 / 434 / 409 2787 / 441 / 284
test 良品 / 不良 185 / 224 185 / 99
test 不良率 54.8% 34.9%
test 与 train 的包重叠 10 / 10 0 / 1

3728 张 → 剔除 117 张(rare_class 83 / zero_shapes 28 / no_json 6)→ 3611 张。 288 个分组(pkg‖sess),0 组跨 split

类别 A 套 train/val/test B 套 train/val/test
good 1368 / 193 / 185 1383 / 178 / 185
870 / 135 / 133 942 / 149 / 47
侧面崩 253 / 42 / 40 253 / 50 / 32
163 / 37 / 28 179 / 37 / 12
114 / 27 / 23 129 / 27 / 8

一、分割路线

像素级质量

A val A test B val B test
划痕 Dice 0.6366 0.6578 0.6502 0.5659
崩边 Dice 0.7713 0.8489 0.7652 0.7811
麻点 Dice 0.4580 0.3728 0.4403 0.2609
三类合计 Dice 0.6975 0.7432 0.7021 0.6802
三类合计 IoU 0.5355 0.5913 0.5410 0.5153
AUROC px_any 0.9635 0.9755 0.9706 0.9884
AUROC s_max 0.9779 0.9922 0.9884 0.9749

训练:200 epoch,A 套最佳 epoch 146,最后 20 epoch 的 val Dice 标准差 0.0047 —— 已收敛。

判废检出(A 套 test)

方法 检出 误报 口径
单一像素阈值 71.4% 5/185 honest(val 定阈)
单一像素阈值 49.6% 3/185 oracle(test 调阈,作弊)
7 维几何判据 64.3% 7/185 honest
7 维几何判据 74.6% 3/185 oracle

判废检出(B 套 test)

方法 检出 误报 口径
单一像素阈值 69.7% 5/185 honest
单一像素阈值 65.7% 3/185 oracle
7 维几何判据 76.8% 7/185 honest
7 维几何判据 85.9% 3/185 oracle

几何判据 oracle → honest 掉 10 个点(A 套 74.6% → 64.3%)。 7 个自由度在 434 张 val 上调,过拟合是必然的。这是几何判据路线的天花板。

阈值扫描 —— 本项目最关键的一张表

A 套 test(curve_test.csv):

τ 误报 总检出 划痕 崩边 麻点
10 15/185 99.1% 99.3% 98.5% 100%
100 12/185 98.2% 98.5% 97.1% 100%
200 12/185 94.2% 96.2% 97.1% 73.9%
400 10/185 86.6% 93.2% 97.1% 17.4%
800 8/185 81.3% 87.2% 97.1% 0.0%
1600 5/185 66.1% 64.7% 91.2% 0.0%
3200 1/185 35.7% 26.3% 66.2% 0.0%

崩边极其稳健(τ=1600 仍有 91.2%),麻点在 τ=800 就归零。 麻点连通域太小——test 全部麻点图预测像素合计 6297 px,均摊每图 274 px。

增广消融(A 套,分割)

增广 平均 Dice 单阈值检出 误报
none 0.5947 65.6% 2
weak 0.6136 70.1% 2
mid 0.6061 59.4% 2
strong 0.6086 56.7% 3

weak 最好,strong 更差。 缺陷本身是细微低对比结构,强增广会把它抹掉。


二、分类路线(推荐)

完整榜单(42 个模型,按 test AUROC)

rec@3 = val 误报 ≤3 时的阈值搬到 test 后的检出率;fp@3 = test 上实际误报数。

# split task backbone size aug norm loss 参数M val AUROC test AUROC rec@3 fp@3 imp_test imp_line10
1 A bin efficientnet_b0 320 mid imnet ce 4.01 0.9951 0.9976 94.6% 3 1.40% 13.4%
2 A bin efficientnet_b0 320 cutmix gwz ce 4.01 0.9922 0.9975 95.5% 4 1.83% 16.9%
3 A bin mobilenetv3_large_100 320 weak gwz ce 4.20 0.9917 0.9969 94.6% 3 1.40% 13.4%
4 A bin efficientnet_b0 384 mid gwz ce 4.01 0.9966 0.9968 96.4% 7 3.14% 26.1%
5 A bin edgenext_small 320 mid gwz ce 5.28 0.9952 0.9968 96.4% 6 2.70% 23.2%
6 A bin efficientnet_b0 224 mid gwz ce 4.01 0.9924 0.9961 96.0% 4 1.83% 16.9%
7 A bin mobilenetv3_large_100 320 none gwz ce 4.20 0.9869 0.9959 89.7% 2 0.99% 9.8%
8 A bin efficientnet_b0 320 mid gwz ce_nols 4.01 0.9951 0.9955 98.7% 7 3.07% 25.7%
9 A bin efficientnet_b0 448 mid gwz ce 4.01 0.9971 0.9943 96.9% 4 1.81% 16.7%
10 A cls4 mobilenetv3_large_100 320 weak gwz ce 4.21 0.9815 0.9940 78.6% 1 0.56% 5.8%
11 A bin vit_small_patch16 224 mid gwz ce 21.67 0.9872 0.9937 93.3% 3 1.42% 13.5%
12 A bin regnety_016 320 mid gwz ce 10.32 0.9950 0.9931 96.0% 7 3.15% 26.2%
13 A cls4 mobilenetv3_large_100 320 mid gwz ce 4.21 0.9908 0.9928 86.2% 2 1.03% 10.2%
14 A bin efficientnet_b0 320 mid gwz ce 4.01 0.9936 0.9918 97.3% 4 1.80% 16.7%
15 A bin efficientnet_b0 320 mid gwz focal 4.01 0.9962 0.9917 96.9% 5 2.25% 20.1%
16 A bin mobilenetv3_large_100 320 mid gwz ce 4.20 0.9974 0.9913 99.1% 8 3.48% 28.2%
17 A bin resnet34 320 mid gwz ce 21.29 0.9923 0.9911 94.2% 3 1.40% 13.4%
18 A bin efficientnet_b0 320 mid zscore ce 4.01 0.9950 0.9910 91.1% 3 1.45% 13.8%
19 A bin efficientnet_b0 320 photo gwz ce 4.01 0.9938 0.9908 93.8% 6 2.78% 23.7%
20 A cls4 mobilenetv3_large_100 320 strong gwz ce 4.21 0.9903 0.9906 88.8% 3 1.49% 14.1%
21 A bin efficientnet_b0 320 mixup gwz ce 4.01 0.9926 0.9895 92.9% 5 2.35% 20.8%
22 A bin convnext_nano 320 mid gwz ce 14.95 0.9865 0.9893 85.7% 4 2.04% 18.5%
23 A bin efficientvit_b1 320 mid gwz ce 7.50 0.9930 0.9893 93.8% 6 2.78% 23.7%
24 A cls4 mobilenetv3_large_100 320 none gwz ce 4.21 0.9768 0.9892 83.9% 4 2.08% 18.8%
25 A bin resnet18 320 mid gwz ce 11.18 0.9936 0.9890 92.4% 5 2.36% 20.8%
26 A bin efficientnet_b0 256 mid gwz ce 4.01 0.9958 0.9884 97.3% 4 1.80% 16.7%
27 A bin repvgg_a1 320 mid gwz ce 12.81 0.9938 0.9878 93.8% 6 2.78% 23.7%
28 A bin efficientnet_b0 320 geo gwz ce 4.01 0.9945 0.9873 92.9% 4 1.89% 17.3%
29 A cls4 resnet34 320 mid gwz ce 21.29 0.9786 0.9867 74.6% 1 0.60% 6.1%
30 B cls4 mobilenetv3_large_100 320 none gwz ce 4.21 0.9911 0.9862 91.9% 8 8.08% 29.8%
31 B bin resnet34 320 mid gwz ce 21.29 0.9932 0.9862 94.9% 7 6.93% 26.4%
32 B cls4 mobilenetv3_large_100 320 mid gwz ce 4.21 0.9880 0.9855 89.9% 5 5.32% 21.3%
33 B bin mobilenetv3_large_100 320 weak gwz ce 4.20 0.9921 0.9853 87.9% 8 8.42% 30.7%
34 A bin mobilenetv3_large_100 320 strong gwz ce 4.20 0.9883 0.9847 81.3% 3 1.62% 15.2%
35 B cls4 resnet34 320 mid gwz ce 21.29 0.9915 0.9825 91.9% 5 5.21% 20.9%
36 B cls4 mobilenetv3_large_100 320 weak gwz ce 4.21 0.9937 0.9816 89.9% 6 6.32% 24.5%
37 B cls4 mobilenetv3_large_100 320 strong gwz ce 4.21 0.9781 0.9815 60.6% 4 6.25% 24.3%
38 B bin mobilenetv3_large_100 320 none gwz ce 4.20 0.9898 0.9814 85.9% 7 7.61% 28.4%
39 B bin mobilenetv3_large_100 320 strong gwz ce 4.20 0.9951 0.9805 100% 9 8.33% 30.5%
40 B bin mobilenetv3_large_100 320 mid gwz ce 4.20 0.9974 0.9761 99.0% 10 9.26% 33.0%
41 A bin efficientnet_b0 320 cutmix gwz focal 4.01 0.8868 0.9050 51.3% 5 4.17% 32.2%
42 A bin convnext_tiny (DINOv3) 320 mid gwz ce 27.82 0.5132 0.5335 0.0% 0

这张表本身带选择偏差:在 test 上横比 42 个模型再挑最好是有偏的。 按 val 预先选定的无偏结果是 mobilenetv3_large_100 mid gwz(val 0.9974)→ test 0.9913。 与榜首 0.9976 差 0.0063,这个差值就是选择偏差的量级

四分类逐类召回(cls4_resnet34_mid_320,A 套 test)

GT 类别 张数 判对 召回 主要混淆去向
划痕 133 117 88.0% → 崩边 8
崩边 68 64 94.1% → 划痕 1、麻点 2
良品 185 176 95.1% → 划痕 6
麻点 23 21 91.3% → 划痕 1、崩边 1

整体 acc **92.4%**,bal_acc **92.1%**,AUROC 0.9867。

eval.jsonconfusion 的方向是 外层 = 预测类,内层 = 真实类。读反会得到 94.4/84.2/96.2/80.8 这组完全不同的数字。

TTA×8(4 旋转 × 2 翻转,A 套 test AUROC)

模型 原始 TTA Δ
mobilenetv3_large_100 weak 0.9969 0.9982 +0.0013
efficientnet_b0 mid 0.9918 0.9949 +0.0032
vit_small mid 0.9937 0.9948 +0.0011
resnet34 mid 0.9911 0.9932 +0.0021
convnext_nano mid 0.9893 0.9909 +0.0016
efficientnet_b0 cutmix/focal 0.9050 0.9418 +0.0368
mobilenetv3_large_100 none 0.9959 0.9925 −0.0034
mobilenetv3_large_100 mid 0.9913 0.9907 −0.0006

TTA 不是稳赢:8 个里 2 个变差。且多数增益(+0.001~+0.003)在噪声地板以内。 唯一明确有效的是那个本来就没训好的模型(+0.037)。


三、分割 vs 分类 · 同口径对决

A 套 test B 套 test
分割 · 单阈值 71.4% @ 误报 5 69.7% @ 误报 5
分割 · 7 维几何 64.3% @ 误报 7 76.8% @ 误报 7
分类 · resnet34 94.2% @ 误报 3 94.9% @ 误报 7
分类 · efficientnet_b0 97.3% @ 误报 4

B 套误报同为 7 时:分割 76.8% vs 分类 94.9%。 A 套分类只花 3–4 个误报就到 94–97%,分割花 7 个误报只有 64%。

即便让分割作弊(阈值直接在 test 上调),最好也只有 A 74.6% / B 85.9%,仍追不上诚实的分类。

麻点上的差距最悬殊:分割在任何低误报阈值下 **0%**,分类 91.3% 且不需要任何几何工程。


四、诚实性审计

审计 数值 判读
批次指纹强度(pkg_acc 92.7% 作弊空间
未见类「碎」检出(sui 92.2%–100% 学的是通用缺陷特征 ✓
跨批次泛化(A→B AUROC) 0.9911 → 0.9862(−0.005 噪声量级 ✓
冻结特征:kNN vs 线性探针 0.9634 vs 0.9461 无可解锁捷径 ✓✓
eta2(包解释良品分数方差) A 0.05–0.06 / B 0.000 极低 ✓
良品分数分布 185 张中 169 张恰好为 0 非零的多是真缺陷 ✓

详见 AUDIT.md


五、业务指标(产线不良率相关)

部署模型的阈值标定表(A 套 test,185 良品 / 224 不良)

档位 阈值 test 误报 test 检出 不良桶良品率 产线10%口径 每万片冤杀 每万片漏检
最严 0.787 4/185 95.5% 1.83% 16.9% 195 45
保守 0.509 8/185 98.7% 3.49% 28.3% 389 13
平衡(默认) 0.459 8/185 99.1% 3.48% 28.2% 389 9
宽松 0.411 9/185 99.1% 3.90% 30.6% 438 9
高召回 0.242 11/185 99.6% 4.70% 35.0% 535 4

分数分布是双峰的,0.51~0.79 之间几乎是空的。真正有意义的只有「最严 0.787」和「平衡 0.459」两档。

产线不良率 10% 的诚实口径(p10_honest.json

阈值在 val 上定、test 只评一次:

A 套 B 套
test 检出率 22.3% 51.5%
test 误报 1/185 0/185
不良桶良品率 17.89% 0.00%
放行桶纯度(NPV) 92.02% 94.89%
每万片漏检 777 485
每万片冤杀 49 0

目标 1%–5% 在 A 套全部不可达。 B 套达到了,但代价是检出率只有 51.5%。

我此前报过 A 套 0% —— 那是在 test 上选阈值的结果,是错的。诚实口径是 17.89%。

precision 随不良率的变化(同一模型同一阈值):

产线不良率 不良桶良品率
54.8%(本 test) 1.83%
10% 16.9%
5% 29.5%
2% 51.6%

任何 precision 数字必须绑定不良率。 详见 CAVEATS.md


六、推理性能

CPU GPU (RTX 4090)
吞吐 ~22 张/秒 ~3600 张/秒
1 万张耗时 ~7 分钟 ~3 秒
分发体积 138 MB 1.3 GB

模型:判废 mobilenetv3_large_100(16.8 MB ONNX,4.2M 参数), 类型 resnet34(85.1 MB ONNX,21.3M 参数),均 320×320 输入。