设备上的模型,本来就是压过的
门店收银一体机没有独立显卡,靠的是芯片里的 AI 加速单元。这类硬件对低位整数(比如 8 位整数)有专门的加速通道,对高精度浮点数只能退回通用计算,慢很多。
再叠上两个约束:无风扇设备的散热能力有限,功耗不能放开;内存也有限,权重占的空间直接决定模型能不能装下。
所以市面上跑在收银机上的识别模型,几乎都做过压缩——把参数从高精度浮点压到低位整数。差别不在「压没压」,而在压得怎么样。
效果掉在哪
压缩带来的精度损失,主要看两处:
权重好压,激活值难压。 权重是训练完就固定的,可以离线慢慢统计分布;而每一层实际输出的数值随着输入画面变化,范围只能估计。为了不把偶尔出现的大数值截断,被迫放大取值范围,正常数值就被挤进很粗的格子里,效果就掉了。
误差会累积。 每层塞进格子都有一点偏差,逐层传下去会叠加;如果舍入总是偏向同一边,模型输出还会出现系统性偏移,表现为「总是把某几类商品认成另一类」,而不是随机出错。
工程上有对应的处理办法,比如把每次舍掉的误差记下来、在后续步骤里补回去。门店不需要了解细节,但要认识到一点:压缩后的效果好不好,很大程度上取决于这一步的工程水平,而不是设备参数表上写了什么。同一个模型、同样的硬件,不同团队的压缩结果可能差得很远。
门店该怎么验收
别只问「压缩后准确率掉了几个点」。要问用什么数据、在什么条件下测的,并且自己参与测试。一份可用的验收清单:
- 用门店自己的商品测,不用厂商提供的样本图。样本图通常是理想光照、单件摆放、正面拍摄,参考价值有限。
- 按品类分开统计。无条码品类(果蔬、烘焙、卤味)和有条码商品分开看。有条码商品本来靠扫码,混在一起平均会掩盖无条码品类的真实表现,而后者才是识别能力的关键。
- 按真实场景测,至少覆盖:商品互相遮挡、多件堆叠、反光包装(卤味盒、塑封)、夜间灯光下。
- 看错误的类型,不只看错误的次数。认错成同类商品(价差几毛)和认错成完全不相干的商品(价差几十块),损失完全不同。要按金额影响分级看。
- 先量基线再上线。用两周时间记录现有的人工收银时长、错扫情况,上线后再对比。没有基线,事后无法判断到底改善了没有。
几个常见的误区
误区一:硬件越贵识别越准。 硬件决定能不能跑、跑多快;识别准不准取决于模型和它见过的数据。便宜的设备配上好的模型,往往比贵的设备配通用模型效果好。
误区二:规模大的供应商压缩做得一定好。 压缩是具体到每个模型、每个平台的工作,没有哪家能靠通用工具一次性做好所有品类。
误区三:准确率是一个数字。 它是一个分布。同一台设备,白天和夜间、单件和堆叠、常见品和新品,结果可能都不在同一个水平上。选型时让对方给出分场景的评估方法,比给出一个总分更有价值。
一个可执行的结论
压缩本身不是问题,问题是不做验收。把测试放到自己的商品和真实环境里,按品类和场景拆开看,并且留下基线数据——做到这三点,压过的模型到底行不行,几家供应商放在一起就能比出来。