🔍搜索⌘K

拿旧模型去数样本,结果测的是工具的错

问题

我在标一批新数据。标之前得先想清楚一件事:这批图里到底有多少张真有我要识别的目标(也就是”正样本”),有多少是空的。

因为这直接决定要标多少张。如果正样本特别少,比如 1000 张里只有 50 张有,那我标 1000 张其实没多大用,正样本太少根本训不稳。所以我想先测一下真实的正负比例。

手上有个以前训过的模型,我寻思这不是现成的能力吗——拿它跑一遍这批新图,检出来的算正样本、没检出来的算负样本,不就出来了?挺快的,几分钟的事。

现象

跑完一轮,结果很难看。

我抽了 480 张(24 个格子、每格 20 张)跑旧模型,检出的目标加起来只有中位 5%。也就是 20 张图里平均才检出 1 张,而且大多数格子一张都检不出,最高的一格也就 70%。

这数字太低了。低到我第一反应是”这批数据是不是有问题,臂大部分时间根本不在画面里”。

但接着我就觉得不对劲——我记得同一个模型换成现在这个新机位去跑,检出率本来就只有 6%~17%。而我这次是拿它来数样本的,它自己在这批数据上就认不准。它检不出来到底是”目标真不在”,还是”它本来就认不准”?

这两件事我根本没区分开。

怎么解决

这次测量的方法整个作废。不是数字不好看的问题,是这把尺子本身不准,用不准的尺子量出来的是尺子的误差,不是被量的东西。

想明白了这一点,反过来去看别的东西就通了:

  • 目标不是一直在画面里的。我看了下旋转周期,一个臂完整转一圈差不多 49 分钟,自然状态下”画面里没臂”的空档可以很长(另一个机位实测最长空档接近 20 分钟)。所以真实的正样本比例可能只有 10%~30%,比我原先拍脑袋假设的 35% 低不少。
  • 那批”我以为可以省掉不用标”的方案,风险就露出来了——如果 3200 张里只有 20% 是正的,也就 640 张正样本,平均每格才 20 出头,对只识别一个目标的小模型来说偏少,很可能训不稳。这个隐患当初看不出来,就是因为它藏在一个没验证过的假设里。
  • 正确的做法是先手标一小批(比如 100 张,跨不同格子、昼夜各半随机抽),花十来分钟,人工数出真实的正负比例,再决定总量要标多少。这个比例本身还有个附带好处:标完自然就知道每个机位的臂什么时候出现在画面里,而这正好是上线后”多久没看到臂就报警”那个参数的校准依据。

还有个更省力的办法:与其盲抽,不如按时间分层。已知每个机位的旋转周期,用数据索引里的时间戳反推哪些时段臂大概率在画面里,刻意多抽这些时段的帧,把正样本比例从自然值提到一半左右。同样一份标注量,能拿到的正样本多几倍。

结论

想用现成的工具去测”数据本身是什么样”,前提是那个工具在这个场景下够准。它连目标都认不准的时候,测出来的数字量的是它自己的水平,不是数据的构成。这种结论看着有数字、有样本量,实际上完全不能用——而且它比没有数字更危险,因为一个具体的错数字会让人直接拿它去推算别的决策。

反过来,遇到”这个比例大概多少”这类问题,先花十几分钟手动标 100 张测出来,比拿一个没验证过的模型跑几千张更快也更真。凡是依赖实测的量,先测再用,别先假设一个数再让方案建在它上面。