先看一个具体的现象
同一套识别算法,同一批货,同样的灯光和台面:A 型号的收银一体机识别得没脾气,换到 B 型号就开始认错,尤其是包装反光的和现制档口那些散装货。
厂商的解释通常是「算法是同一套,模型也是同一个」。这句话多半是真的,但中间少了一环:同一个模型要跑在不同芯片上,中间得过一道量化。这道工序做得怎么样,结果就不一样。
模型不是「拷」过去的,是「压」过去的
门店设备上跑的模型是低位整数版本——权重按 8 位甚至更低的整数存储和计算。原因很直接:端侧芯片上整数运算有专门的加速单元,浮点运算往往只能退回通用路径,速度和功耗都差一截。
于是有了第二个问题:从浮点压到低位的这块误差,是什么时候处理的?
- 训练完再压(训练后量化,PTQ):拿训练好的模型,配一点校准数据跑一遍,把浮点和整数之间的对应关系定下来。快,通常几小时。
- 训练时就按低位算(量化感知训练,QAT):在训练过程里就模拟这种误差,让模型自己学会绕开它。慢,要重训,但位宽压得越低,两条路的效果差得越明显。
简单说,前一条是让量化去迁就模型,后一条是让模型去迁就量化。压到 8 位,两条路差别往往不大;要压到 4 位附近,后面这条常常是唯一还能保住效果的路。
还有一层:每块芯片的规矩不一样
更容易被忽略的是硬件这一侧。端侧加速器对数值格式的要求并不统一:支持哪些位宽、缩放系数怎么表示、取整是四舍五入还是截断、超出范围怎么处理,各家约定不同。2026 年 10 月 arXiv 上有一篇工作(编号 2610.21695)专门讨论固定功能 CNN 加速器的这套「数值契约」,主题就是量化感知训练怎么让网络去适配它。
换成门店听得懂的话:模型不是插上就能用的通用零件,它得跟芯片对上号。这也说明「同一个模型换台设备就变差」不是玄学。
对一家门店或连锁,这意味着三件事
一、换设备型号是一次算法风险,不只是一次采购。 同型号机器坏了换同型号,风险很小;扩店时换了另一个品牌的收银一体机,识别表现要重新验。部分方案换硬件就要重新训练模型,周期按周算,这个周期要提前知道。
二、责任边界提前划清。 出问题时最容易扯皮的一句话是「你的模型在我们芯片上跑不了」对「你的芯片不支持我们要的算子」。谁负责把模型适配到目标硬件,写进合同,比事后争论有用。
三、别把「算法一样」当结论。 算法一样、模型一样,落到这台设备上的数值实现可能完全不同。
选型时值得问的四个问题
- 给我的模型,是在我这类设备(或同款芯片)上训过、调过的,还是从别处转过来的?
- 我以后换硬件型号,模型要不要重训?谁来做?大概多久?
- 这套模型用到哪些算子?在这块芯片上都有加速支持吗,哪些会退回慢路径?
- 模型是怎么压到低位的——训练时压的,还是训练完压的?
第 4 个问题问出来,对方的回答通常就能说明这套方案是「按硬件做的」,还是「转过来的」。
验收怎么做
不用纠结技术名词,验收动作只有一条:用自己门店的货、在自己门店的目标设备上跑一遍。
- 挑 20 到 30 个商品,必须包含难例:反光包装、现制档口的散装货、联名换装、当季新品。
- 同一批货,在候选的两三台设备上各跑一遍,看结果是否一致。
- 记录错在哪里,而不是只记一个总数。集中在某几个品类上反复错,说明是模型问题;随机散布,更可能是现场条件问题。
什么时候不用管这件事
只采购一个型号、一次部署、不打算换设备的体系,这套复杂度基本用不上。但只要涉及多型号并存,或者有扩店换设备的计划,「压模型这一步是怎么做的」第一次见面就该问。
火眼识别在端侧视觉识别与模型部署上提供配套方案,见 火眼识别官网。