← 返回 PaperDaily 大模型与智能体

微控制器上跑模型遇「天灾」只能躺平?FORGE用前向重校准白捡20.9个点,能耗仅6.8%

这可能是目前唯一能在「已部署、折叠BN、纯int8卷积」的MCU模型上跑起来的测试时自适应方法。没有梯度、没有额外前向,只在ESP32-S3上多花6.8%推理能耗就找回20.9个准确率点,实测能量数据都给你测好了,做端侧部署的值得一看。

微控制器上跑模型遇「天灾」只能躺平?FORGE用前向重校准白捡20.9个点,能耗仅6.8%

paperdaily_reaction_gif


原论文信息如下:
论文标题:
FORGE: Forward-Only Test-Time Adaptation for Integer-Only Vision Models on Microcontrollers
发表日期:
2026年09月(arXiv预印本)
发表单位:
巴基斯坦国立科技大学(NUST SEECS)、FAST-NUCES
原文链接:
https://arxiv.org/pdf/2609.01683v1.pdf
开源代码链接:
论文未提供开源代码
开源数据集链接:
使用公开数据集 CIFAR-10/100-C、Tiny-ImageNet-C,无新增数据集
项目链接:
论文未提供项目主页
演示链接:
论文未提供在线演示

先讲个反常识的事儿:你把一个训练好的卷积神经网络塞进单片机(MCU),为了省内存和算力,得把网络里的批量归一化层(BN)直接“融化”进前面的卷积层里,再把权重全部量化成 int8。这一套操作下来,模型是能跑了,但它也“瞎”了——遇到没见过的模糊、噪声、光线变化,模型直接躺平,而且你想在现场临时救它一把都不行。为什么?因为 BN 层没了,那些原本能在测试时帮你自适应(TTA)的统计量也一起没了。今天聊的这篇 FORGE,干的事就是:在 BN 已经被折叠、纯 int8 卷积的部署模型上,只靠前向计算做测试时自适应,在 ESP32-S3 上实测只多花 8.3 毫焦(约 6.8% 推理能耗),就能找回 20.9 个准确率点。

很多搞端侧 AI 的朋友应该都有这种感觉:论文里的测试时自适应(TTA)动辄在 GPU 上跑,一听说要部署到几 MB 内存的 MCU 上就只能苦笑。即使是号称“面向微型设备”的 TinyTTA,本质还是要梯度、要反传,只是把内存占用降了一些而已。所有梯度类的 TTA(像 TENT、CoTTA)在真正的 int8 推理运行时里根本跑不起来——因为压根没有 autograd 图和优化器状态。另一类“前向自适应”方法(像 BN-adapt、LeanTTA)虽然不需要梯度,可它们都依赖一个前提:BN 层还活着。结果 MCU 上为了做整数推理,BN 早就被卷积“吃”掉了,于是这类方法也没有用武之地。FORGE 这个工作最戳痛点的地方就在这里:它专门解决“BN 已折叠”后的部署模型自适应问题,而且整个方法还简单到令人惊讶。

一、微控制器上的视觉模型为何“失明”?——BN折叠引发的自适应困境

图1 FORGE 方法总览
图1:FORGE 核心思路总览。(1) 传统的 MCU 部署会把 BN 折叠进卷积并量化为 int8,导致 TTA 直接失效 (+0.0);(2) FORGE 通过前向逐通道统计重校准,把漂移的通道分布拉回训练时的目标;(3) 在 ESP32-S3 实测恢复 +20.9 准确率点,额外能耗仅 8.3 毫焦 / 21.9 毫秒。

FORGE 这个方法全称是 Forward-Only Recalibration for the edge,来自巴基斯坦国立科技大学(NUST)和 FAST-NUCES 的研究团队。作者单位虽然不像斯坦福、MIT 那样如雷贯耳,但工作本身非常扎实:他们在 OpenReview 上公开评审,做了位精确(bit-exact)的 int8 卷积验证,还真的用 Nordic PPK2 功率分析仪在 ESP32-S3 开发板上把能量测了出来——这在 MCU 上的 TTA 工作里几乎是独一份。整个论文的逻辑就是:先指出一个大家没意识到的部署陷阱(BN 折叠导致 TTA 失效),再用一个轻到极致的前向重校准把自适应能力“复活”,最后用大量实验和真机实测证明这件事在单片机上是可行的、便宜的。

为了方便大家理解,本文会按照这个方法“为什么存在 → 核心机制是什么 → 实验效果如何 → 在真实硬件上表现怎样 → 有什么局限”的顺序来拆解。不讲废话,直接上干货。

先补个背景。在 MCU 上做视觉推理,内存往往只有几百 KB,算力更是捉襟见肘。为了让模型能跑起来,工程上有一套标准流水线:把 Conv→BN 融合成一个带偏置的卷积,再把权重和激活都量化成 int8。这套操作对推理精度几乎没有影响(论文里 clean accuracy 基本不变),但它有一个很少有人明说的副作用——模型失去了“自适应”的能力。

什么意思呢?神经网络在现实世界里部署后,经常会遇到训练时没见过的数据分布偏移,比如镜头脏了、光线变了、图片压缩出噪点。这种时候模型的准确率会哗哗往下掉。在服务器上,人们可以用测试时自适应(TTA)来救:用测试数据本身的信号(比如预测熵)原地微调一下模型,让它适应新的数据分布。TENT 就是这类方法的代表。

但 MCU 上的 int8 模型想 TTA,遇到的是双重打击:第一,推理运行时里没有反向传播需要的那套东西——没有 autograd 图、没有 fp32 主权重、没有优化器状态,梯度类 TTA 直接出局;第二,就算想用不需要梯度的“前向 TTA”(比如重新估计 BN 的均值方差),可 BN 层已经被折叠进卷积删掉了,统计量早就被“焊死”在卷积权重里,你连改都没得改。

图2 自适应鸿沟
图2:自适应鸿沟(Adaptation Gap)。(a) 保留 BN 层的 int8 模型上,BN-adapt 能恢复 +20.1 点;(b) 但一旦 BN 被折叠进卷积(实际部署的标准形式),模型立即失去自适应能力,恢复为 +0.0。这说明问题不在量化本身,而在“BN 折叠”这个动作把归一化统计量给抹掉了。

论文里把这称为“自适应鸿沟”(Adaptation Gap),并且专门做了个实验来证明:同样的 CIFAR-10-C 测试数据(15 种 corruption,severity 5,int8),如果模型保留了 BN 层,前向 BN 重校准能恢复 +20.1 个点;可一旦把 BN 折叠进卷积(就是实际部署到 MCU 上的那种形态),同样的方法恢复量直接变成 +0.0。模型遭遇的数据偏移完全一样,但因为折叠,唯一的自救手段也失效了。

Forge vs. TinyTTA, the closest prior MCU TTA method.
Forge vs. TinyTTA, the closest prior MCU TTA method.

之前确实也有人在 MCU 上做 TTA,比如 TinyTTA,是当前最接近的先验工作,也是唯一在 MCU 上验证过的 TTA 方法。但 TinyTTA 骨子里还是梯度法,只是用“早退集成”策略把反传的内存占用给降低了,而且它自适应时要求 BN 层还在。在真正部署的折叠 int8 模型上,它和 TENT 一样跑不起来——需要梯度、需要活着的 BN 层,这两样折叠后都不存在。

一句话总结这个困境:部署折叠量化,是为了让模型在 MCU 上跑得快、跑得省,但这个工程上“必须做”的动作,顺手把模型最后的自救能力也给剥夺了。这不是算法不够好,而是一个大家都没意识到的结构性盲区。

二、FORGE核心机制:前向逐通道重校准如何“复活”部署模型

FORGE 的思路可以用一句话概括:既然 BN 折叠把统计量抹掉了,那我们就“绕过”这个事实——在原来 BN 所在的位置,重新引入一层极轻量的、逐通道的前向重校准,把每一通道的输出分布拉回训练时的干净状态。

关键在于回答一个问题:BN 折叠之后,到底什么东西被留下了?

在 BN 被折叠前,每一层 Conv→BN 都在用训练时累积的运行均值 μ 和方差 σ² 把预激活归一化成零均值单位方差,然后再做 γ、β 的仿射变换。这个操作的最终效果是,每个通道的输出分布有固定的均值 β_c 和标准差 |γ_c|。折叠操作做的事情,是把这个变换用训练时的 μ、σ²“融化”进卷积权重里,然后把这个层删掉。μ 和 σ² 从此不再能被单独修改——但每个通道输出分布的“形状标准”(β_c 和 |γ_c|)其实依然隐含在折叠后的卷积里。

FORGE 做的事情非常朴素:在模型折叠时,顺手把每个原 BN 位置需要两个常量——β 和 |γ|——记录下来,然后到测试时,对每个通道的卷积输出做这样三步操作:先算当前一个 batch 上该通道输出激活值的均值 μ 和方差 ν;再用指数滑动平均(EMA)维护运行估计 μ̄ 和 σ̄²(初始化为干净目标 β、γ²,使无偏移的数据流开始时相当于“无操作”);最后做标准化:x̂_c = (x_c − μ̄_c) / √(σ̄_c² + ε) · |γ_c| + β_c,把当前被偏移的输出分布“拉回”到干净训练状态下。

整个过程不需要任何梯度,不需要学习参数,也不需要额外的模型前向过程,只多了两次逐通道的 reduction 和一次逐通道的仿射变换。

为了方便理解 FORGE 每个原 BN 位置做的那几步操作,原论文里给了一段非常清晰的伪代码(图3),基本就是把 BN 重校准从“依赖活着的层”改成“拿着折叠时保存的 β、|γ| 两个量,在折叠后重新把分布拽回去”。

Algorithm 1 FORGE recalibration at one former-BN site
Require: folded conv output x ∈ R^{B×C×H×W}; clean targets (β_c, |γ_c|)
        from fold time; momentum m; running (μ̄_c, σ̄_c²) init. to (β_c, γ_c²)
1: μ_c = mean_{B,H,W}(x_c); ν_c = var_{B,H,W}(x_c)   ▷ per-channel batch stats
2: μ̄_c ← (1−m)·μ̄_c + m·μ_c; σ̄_c² ← (1−m)·σ̄_c² + m·ν_c   ▷ forward-only EMA
3: x̂_c ← (x_c − μ̄_c) / √(σ̄_c² + ε) · |γ_c| + β_c        ▷ re-center to clean target
4: return x̂_c   (no gradients, no learnable parameters)
算法1:FORGE 在单个原 BN 位点上的重校准逻辑。核心思想就是:用 EMA 估计当前(可能被偏移的)输出分布,然后把它标准化再乘加回干净的 (β_c, |γ_c|)。整个过程纯前向、无梯度、无可学习参数。

论文还从理论上证明了一件事:如果一次数据偏移在某个折叠卷积通道上表现为“仿射映射”(ỹ_c = a_c · y_c + d_c,即分布整体被缩放和平移了),那 FORGE 的重校准可以做到几乎精确抵消这种偏移——不管缩放系数 a_c 有多大、偏移量 d_c 有多大,把当前估计的均值和方差标准化后,仿射偏移的系数就正好对消掉了,输出直接回到干净的 y_c。这也是为什么这个方法能恢复大部分 TENT 的效果(+20.9 点 vs +24.9 点)——差的那 4 个点,来自 TENT 可以针对每个样本做梯度更新持续改善,而 FORGE 这类运行统计估计的方法会收敛到一个平台期。

图3 真实激活上的机制验证
图3:在真实部署的 int8 模型上测量一个卷积通道(layer2.0.bn1,CIFAR-10-C 高斯噪声)的输出分布。Corruption 让通道均值偏移了 1.8σ(红色);FORGE 的重校准把它拉回到距离干净分布仅 0.06σ 的位置(绿色),均值和离散度都恢复得很好。

具体到部署实现上,FORGE 的重校准是 fp32 精度的——它跑在 MCU 的 FPU 上,是 int8 卷积路径外围的一个轻量 fp32 校正模块。卷积还是真正的 int8(权重激活 int8,int32 累加,整数运算重新量化),只是每次卷积输出的激活会被先反量化到 fp32,做完逐通道统计和仿射后再量化回 int8 给下一层。额外引入的状态只有每通道 2 个 fp32 标量。没有 autograd 图、没有主权重、没有优化器状态。

所以论文很严谨地称自己是 mixed-precision 的自适应:int8 卷积 + fp32 重校准。这里的“integer-only”指的是 FORGE 运行的卷积引擎本身是整数运算的,而不是说整个自适应路径全是整数运算。

三、实验验证:从CIFAR到Tiny-ImageNet,从仿真到ESP32-S3实测

说完成机制,来看看实验。论文的实验设计得相当完整:ResNet-20 和 MobileNetV2(0.5×)两个架构,CIFAR-10、CIFAR-100、Tiny-ImageNet(200类、64×64 分辨率)三个数据集,corruption benchmark 用的是 CIFAR-10/100-C 和 Tiny-ImageNet-C,severity 取 5,模型折叠并量化为 int8。对比基准则横跨了三大类:不可部署的“精度天花板”类(TENT、CoTTA,梯度法跑在 fp32 模型上)、可部署但需要 BN 的(BN-adapt、LeanTTA)、以及一类专门面向量化模型的前向方法(FOA/ZOA/PACE/PEA,但都在 GPU/服务器级硬件上)。

Table 1: What it takes to adapt a deployed integer-only MCU model. “int-only” = runs on the deployed int8- convolution MCU model (bit-exact integer convolutions, not GPU/simulated; the forward-only adaptation itself may add fp32 as Forge does); “energy” = measured on-device energy. Each prior method satisfies only a subset.
Table 1: What it takes to adapt a deployed integer-only MCU model. “int-only” = runs on the deployed int8- convolution MCU model (bit-exact integer convolutions, not GPU/simulated; the forward-only adaptation itself may add fp32 as Forge does); “energy” = measured on-device energy. Each prior method satisfies only a subset.
表2:CIFAR-10-C(
FORGE 的全称是 Forward-Only Recalibration for the edge,直译过来就是“面向边缘设备的纯前向重校准”。它的核心思路不是把 BN “挖回来”,而是接受折叠这个既定事实,在折叠后的卷积输出上,用极轻量的前向统计把模型“拉回”到干净分布。
上一节留下的问题是:BN 折叠把运行均值 μ 和方差 σ² 直接“焊死”进了卷积权重,原有归一化自适应手段全部失效。但作者发现,折叠并没有摧毁所有信息:对于一个训练好的 Conv→BN 结构,每个通道的输出分布天然具有均值 β_c、标准差 |γ_c| 的“标准形状”。折叠只是把 BN 的运算吸进卷积,并没有改变这个通道输出分布的目标形态。换句话说,真正需要的不是恢复 BN 层,而是把漂移后的通道分布重新推回 β_c 和 |γ_c| 这个目标。
公式1 FORGE重校准公式
式(1):FORGE 在单个原 BN 位点上的重校准公式。其中 x_c 是当前折叠卷积第 c 个通道的输出,μ̄_c 和 σ̄_c² 是用指数滑动平均(Exponential Moving Average,EMA)维护的运行均值和方差,ε 是防止除零的小常数,|γ_c| 和 β_c 则来自折叠时保存的每通道目标量。整体效果就是把当前漂移分布重新对齐到干净训练分布。
具体执行时,FORGE 对每个原 BN 位点只维护两组 EMA 统计量:均值和方差。初值分别设为 β_c 和 γ_c²,这样如果测试流本来就没有分布偏移,整个重校准在开始时等效于“无操作”,不会破坏模型原本的输出。每来一个 batch,先用当前 batch 的逐通道均值/方差更新 EMA,再用式(1)把该通道的输出归一化回干净目标。
公式2 仿射偏移下的精确抵消推导
式(2):为什么这种简单操作能有效?论文给出了一个很漂亮的推导:如果一次分布偏移在某个折叠卷积通道上表现为仿射映射(ỹ_c = a_c·y_c + d_c,也就是分布被整体缩放和平移),那么重校准过程中,分子分母会同时出现 a_c,偏移量 d_c 被直接对消,输出回到干净的 y_c。这意味着只要偏移近似是仿射的,FORGE 几乎可以精确抵消它。
需要特别说明的一点:FORGE 的重校准本身是 fp32 精度。它运行在 MCU 的 FPU 上,是 int8 整数卷积路径外围的一个轻量 fp32 校正模块。部署后的卷积仍然是真正的 int8:int8 权重和激活、int32 累加、整数运算重新量化,论文在 ESP32-S3 上做了位精确(bit-exact)验证。重校准只是在 int8 卷积输出被送入下一层之前,先反量化到 fp32,做完逐通道统计与仿射后再量化回 int8。因此论文严谨地称整个方案为混合精度自适应:int8 卷积引擎 + fp32 前向重校准。
这种做法牺牲了什么?答案是梯度更新带来的持续改善能力。TENT 可以对每个样本做反向传播,不断把模型往熵更低的方向推;FORGE 的 EMA 统计估计会在某个平台期收敛。所以 FORGE 恢复 +20.9 个准确率点,而 TENT 能恢复 +24.9 点,中间大约 4 个点的差距,就是“梯度自由”的代价。但要注意,TENT 在真实折叠 int8 MCU 模型上根本没有运行条件,一个跑不了的 +24.9 对部署而言没有意义。
如果和更近的 MCU TTA 方法 TinyTTA 对比,两者的本质差异就更清晰了。TinyTTA 是当前唯一在 MCU 上验证过的 TTA 方法,但它骨子里仍是梯度法,只是用早退集成策略降低反传内存,而且它自适应时要求 BN 层仍然存在。FORGE 是纯前向的,直接跑在部署后的折叠 int8 模型上,两者解决的问题方向恰好相反。
FORGE与TinyTTA对比表
表:FORGE 与最近的 MCU TTA 方法 TinyTTA 的能力对比。TinyTTA 需要梯度、需要早退头,且必须在折叠前保留 BN 层;FORGE 纯前向、只依赖折叠时保存的 β 和 |γ|,能直接适配已部署的 int8 模型。

实验验证:从CIFAR到Tiny-ImageNet,从仿真到ESP32-S3实测

实验配置上,论文覆盖了 ResNet-20 和 MobileNetV2(0.5×)两种架构,以及 CIFAR-10、CIFAR-100、Tiny-ImageNet(200 类、64×64 分辨率)三个数据集。corruption benchmark 使用 CIFAR-10/100-C 和 Tiny-ImageNet-C,severity 取最难的 5 级。所有模型都执行了 BN 折叠和 int8 量化,报告的指标是 15 种 corruption 上的平均准确率与恢复量。为了排除在线自适应顺序带来的偶然性,结果对 5 条随机测试流取均值±标准差。
在展开结果之前,先看一张能力矩阵图。它回答了一个关键问题:一个方法要真正适配“已部署的 MCU 模型”,到底需要满足哪些条件。
表1 方法能力矩阵
表1:在已部署的 integer-only MCU 模型上做 TTA 需要什么条件。“int-only”指能在真实部署的 int8 卷积 MCU 模型上运行(位精确整数卷积,而非 GPU 模拟);“energy”指给出实测设备能耗。可以看到,此前所有方法都只满足部分条件,FORGE 是唯一一个同时满足全部五项的方法。
表2 给出了 CIFAR-10-C 上最核心的对比结果。由于 FORGE 跑在折叠后的 int8 模型上,对比分两层:上层方法跑在 fp32 模型,下层方法跑在部署用的折叠 int8 模型。这样划分很公平——BN-adapt 和 TENT 在折叠模型上根本没有运行条件,它们的分数更多代表“精度天花板”。
表2 CIFAR-10-C主对比
表2:CIFAR-10-C 上的主结果。部署前的 int8 源模型在 corruption 下只有 50.4% 准确率;FORGE 在折叠 int8 模型上恢复 20.9 个点,达到 71.3%,几乎追平了需要 BN 层的前向 BN-adapt(+20.6),并且是唯一能在折叠整数模型上运行的方法。
如果拆开看 15 种 corruption 的逐项表现,会发现一个很有意思的规律:FORGE 恢复最猛的地方,恰好是源模型崩得最惨的地方。相比之下,对 brightness 和 JPEG 这类源模型原本就很强的温和 corruption,FORGE 的恢复量变成轻微负值。这也是论文后面专门设计安全门控的原因。
表3 逐corruption准确率
表3:15 种 corruption 逐项准确率(severity 5)。FORGE 在 contrast 上把源模型从 25.4% 拉到 79.0%,在 Gaussian noise 上从 25.6% 拉到 60.3%,恢复效果最深的地方正是对视觉系统最致命的扰动。
泛化性方面,论文用“两架构 × 三数据集”做了交叉验证。MobileNetV2 是一个很有分量的测试对象:它由深度可分离卷积和倒残差结构组成,和 ResNet 的标准卷积差异很大。FORGE 能直接套用在 depthwise 和 pointwise 层上,说明这个机制不依赖特定卷积形态。Tiny-ImageNet-C 有 200 个类别,难度远高于 CIFAR,虽然绝对恢复量降到 +11.0,但 15 种 corruption 全部正向提升。
表4 泛化性结果
表4:ResNet-20 与 MobileNetV2 在 CIFAR-10-C、CIFAR-100-C、Tiny-ImageNet-C 上的平均恢复量。MobileNetV2 在 CIFAR-10-C 上恢复 +20.5,几乎和 ResNet-20 持平;200 类的 Tiny-ImageNet-C 也能恢复 +11.0。
真实部署中还有一个很实际的问题:MCU 摄像头往往是逐帧采集,batch size 就是 1。单张图片的统计噪声很大,如果 EMA 动量固定不变,模型很容易被单帧噪声带偏。论文给出的解法很巧妙——把动量按 batch size 缩放,保持等效平均窗口(约等于 bs/m)基本恒定。实验显示,用窗口匹配动量后,即使在 batch=1 的流式场景下,恢复量也能保持稳定。
图5 单样本流恢复量
图5:批量大小对恢复量的影响。固定 EMA 动量在 batch=1 时几乎崩溃;用批量大小缩放动量、保持平均窗口恒定后,恢复量在各种 batch size 下都很平稳。注意纵轴已做窗口匹配,因此 batch=64 与 batch=1 的性能差距被大幅缩小。
超参数敏感性方面,FORGE 全流程唯一需要调的参数就是 EMA 动量 m。论文做了一个很有意思的消融:把 m 从 0.01 一直扫到 1.0,覆盖两个数量级,平均恢复量仅仅波动了不到 0.8 个点。这说明该方法对超参数极不敏感,给实际部署省去了大量调参成本。
表5 动量消融
表5:EMA 动量消融。从 0.01 到 1.0,恢复量始终保持在 +20.1 到 +20.8 之间,几乎没有调参压力。
最后是真正的“硬核”部分:真机验证。论文选用 ESP32-S3,这是国内开发者非常熟悉的 MCU,带 FPU 和 SIMD 指令扩展。推理内核直接用乐鑫官方的 ESP-NN SIMD int8 kernel,能量测量用 Nordic PPK2 功率分析仪在 3.3V 下完成。结果显示,一次完整的 int8 推理大约耗能 122.5 mJ,而 FORGE 的 fp32 前向重校准只增加 8.3 mJ,折合推理能耗的 6.8%;时间开销约 21.9 ms。这个数字把“前向自适应在 MCU 上很便宜”从猜测变成了实测。
表8 实测能耗
表8:ESP32-S3 上的实测能耗数据(PPK2,3.3V)。FORGE 的前向重校准在 ESP-NN SIMD int8 内核之外只需 8.3 mJ 和 21.9 ms,约为推理能耗的 6.8%。
内存占用实测
实测:FORGE 在 ESP32-S3 固件上的额外内存占用非常克制。激活缓冲区本来就是推理需要的,FORGE 只额外增加每通道 2 个 fp32 运行统计量(SRAM)和折叠时保存的目标常数(Flash),不需要额外的激活尺寸临时空间。

安全门控与选择性层:让自适应更精准更节能

前面提到,FORGE 并非在所有 corruption 上都稳赚不赔。在 brightness、JPEG 这类源模型已经很强的温和偏移下,归一化类自适应反而可能带来轻微负面效果。论文做了两件事来收窄这个副作用:一是选择性层重校准,二是安全门控。这两件事可以叠加使用,让 FORGE 在“需要时才出手,不需要时不动”。
先看选择性层。ResNet-20 一共有 21 个原 BN 位点,但不同层对 corruption 的敏感度差异非常大——单独改某层,恢复量可以从 +0.4 到 +17 点不等。这意味着把算力花在所有层上并不划算。作者的做法是:在部署前用留出的合成 corruption 对层的重要性做一次离线排序,然后只选前几名进行在线重校准。这样既不需要在设备上做选择,也不依赖测试时的真实 corruption 标签。
图4 留出法选层实验
图4:留出法选层实验。层重要性在留出 corruption 上排序,恢复量在未见过的测试 corruption 上评估。只改前 3 层就能恢复全层收益的 93%;最佳子集甚至超过全 21 层自适应,因为一些“帮倒忙”的层被主动排除了。
再来看安全门控(when-to-adapt gate)。门控的目标很简单:如果一个 corruption 流上自适应并不能提升置信度,那就关掉自适应,直接用源模型推理。具体做法是,在每条测试流开头的 W 个 batch 里,分别用未适配模型和适配模型各跑一次前向,比较两者平均最大 softmax 置信度;如果自适应版本没有显著更高,后续 batch 就切回源模型。这个门控是因果的,只依赖当前流的数据,不偷看未来。
表7 门控效果
表7:安全门控在三个 benchmark 上的效果。CIFAR-10-C 上,门控把 15 种 corruption 中的负收益从 2 个降到 0 个;但类别数越多,置信度信号越弱,Tiny-ImageNet-C 上门控几乎不触发。这说明门控适合作为“保险”而非“主菜”。

局限与展望:Forge的边界与未来方向

FORGE 的机制很优雅,但它并不是万能的。最直接的边界在于任务类型:论文所有实验都集中在图像分类上,没有覆盖目标检测、语义分割或更贴近真实产品的多任务模型。分类任务中归一化统计的漂移模式相对规整,而检测和分割任务的特征分布更复杂,逐通道重校准是否仍然有效,需要额外验证。
量化位宽方面,FORGE 并不挑食。论文在 8/8、6/6、4/8、4/4 四种权重/激活位宽组合上都做了测试。即使在 4/4 这种把 clean accuracy 压到 60.6% 的极端条件下,FORGE 依然能恢复 +13.3。恢复量的大小基本由“可恢复空间”决定,而不是因为机制在低精度下失灵。
表6 位宽消融
表6:不同量化位宽下的恢复量。4bit 权重下 FORGE 仍能恢复 +23.3,4/4 极端条件下也有 +13.3。机制的核心是“重新对齐分布”,不依赖某一种特定数值精度。
另一个容易被忽略的细节是:EMA 更新中省略了 batch 间方差项。论文在部署模型上实测了这个被省略项的大小。在 batch=64 的主流设置下,这个误差只占真实总方差的很小一部分,完全可忽略;但在 batch=1 的单样本流中,它会被放大,需要靠按 batch size 缩放的动量来控制。
表9 省略的batch间方差项
表9:EMA 省略的 batch 间方差项实测。该误差随 1/B 缩小,在 B=64 时几乎可忽略,只会在单样本流中被放大,这正是论文采用窗口匹配动量的原因。
横向看,FORGE 最大的价值也许不是算法本身有多复杂,而是它把一个“部署后无法自适应”的结构性盲区变成了可量化、可解决的问题。在这之前,MCU 上的 TTA 研究要么偷偷保留 BN,要么在 GPU 上模拟 int8 推理,要么只报内存不报能量。FORGE 把“真折叠、真 int8、真 MCU、真能耗”这四个约束同时摆上了台面。
对后续研究者来说,有几个方向值得关注:一是把 FORGE 推广到检测/分割等更复杂的输出头;二是设计不依赖置信度信号的更强门控;三是探索在非独立同分布流(比如场景突变)下的多窗口统计;四是进一步把重校准本身整数化,彻底去掉 FPU 依赖。考虑到 ESP32-S3 这类芯片已经大面积出货,这类低成本自适应技术离产品落地并不远。

龙迷三问

下面是龙哥对于大家可能的一些问题的解答:
这篇论文到底在解决什么问题?部署在微控制器上的int8视觉模型,因批量归一化(BN)被折叠进卷积而失去测试时自适应(TTA)能力。
这篇工作最值得看的点是什么?Forge在CIFAR-10-C上恢复+20.9精度点,接近梯度方法TENT的+24.9,与BN-adapt的+20.6相当,且是唯一能在折叠整数模型上运行的方法;在CIFAR-100-C上恢复+14.5,Tiny-ImageNet-C上恢复+11.0;在ESP32-S3上实测自适应能耗仅8.3mJ(6.8%推理能耗)。
这篇工作的边界或风险在哪里?优点:(1)首次解决部署后折叠整数模型的自适应问题,填补关键空白;(2)前向-only设计无需梯度机制,适合MCU部署;(3)仅需少量层即可恢复大部分性能;(4)实测能耗极低,具有实际部署价值。缺点:(1)精度略低于梯度方法TENT(约4点差距);(2)混合精度设计(int8卷积+fp32重校准),非端到端整数路径;(3)安全门控在多数类(如Tiny-ImageNet)上失效;(4)仅针对BN折叠的卷积架构,不适用于Transformer。
如果你还有哪些想要了解的,欢迎在评论区留言或者讨论~

龙哥点评

论文创新性分数:★★★★☆

提出Forge方法,在部署的BN折叠整数卷积模型上,通过前向传播中逐通道EMA统计量重校准,将漂移的通道输出分布恢复到干净训练目标(β,|γ|),无需梯度即可实现测试时自适应。

实验合理度:★★★★☆

平均准确率(mean accuracy)和恢复量(recovery,即相对未自适应源模型的准确率提升),报告5次随机测试流顺序的均值±标准差

学术研究价值:★★★★☆

提出Forge方法,在部署的BN折叠整数卷积模型上,通过前向传播中逐通道EMA统计量重校准,将漂移的通道输出分布恢复到干净训练目标(β,|γ|),无需梯度即可实现测试时自适应;更关键的是问题定义是否可复用到同类任务。

稳定性:★★★☆☆

现有材料未提供充分的极端条件、重复运行或扰动测试,稳定性暂按中性评价。

适应性以及泛化能力:★★★☆☆

现有材料未完整展示跨数据集、跨场景或分布外实验,泛化能力仍需进一步验证。

硬件需求及成本:★★★☆☆

在ESP32-S3上,推理耗时286ms,自适应仅增加21.9ms(约7.7%额外时间);能耗方面,推理121.7mJ,自适应仅增加8.3mJ(6.8%额外能耗)。

复现难度:★★★☆☆

现有材料未确认完整代码、配置、数据处理脚本和权重是否齐备,复现难度暂按中性评价。

产品化成熟度:★★★☆☆

论文验证以研究实验为主,真实部署中的时延、成本、维护和异常场景仍需补充验证。

可能的问题:,填补关键空白;(2)前向-only设计无需梯度机制,适合MCU部署;(3)仅需少量层即可恢复大部分性能;(4)实测能耗极低,具有实际部署价值。缺点:(1)精度略低于梯度方法TENT(约4点差距);(2)混合精度设计(int8卷积+fp32重校准),非端到端整数路径;


*本文仅代表个人理解及观点,不构成任何论文审核或者项目落地推荐意见,具体以相关组织评审结果为准。欢迎就论文内容交流探讨,理性发言哦~ 想了解更多原文细节的小伙伴,可以点击"阅读原文",查看更多原论文细节哦!       

转发文章 微博 X LinkedIn Facebook
龙哥读论文 · PaperDaily

本文基于龙哥读论文 PaperDaily 数据库整理,结合论文原文与工程视角进行解读。

LONGGE AI COMMUNITY

把每天读到的论文,变成长期积累

加入「龙哥读论文」知识星球,持续获取 AI 论文、资讯、开源项目、招聘与研究思路。

加入龙哥读论文微信群:添加微信 kangjinlonghelper,备注“研究方向 + 地点 + 学校/公司 + 昵称”。

龙哥读论文知识星球二维码 微信扫码加入知识星球