我们队伍正在备赛2026年FPGA大赛,选了安路FPGA做实时车牌识别,YOLOv5s模型INT8量化后mAP从92%掉到了75%,试过简单校准集恢复效果很差。想问下怎么用QAT(量化感知训练)和知识蒸馏结合来恢复精度?需要具体调参步骤,比如蒸馏温度设置多少、QAT学习率怎么调、训练多少轮合适。另外安路FPGA的DSP资源有限,INT8量化后怎么进一步压缩模型大小?求详细操作方案,感谢!
2026年FPGA大赛用安路FPGA做实时车牌识别,YOLOv5s模型INT8量化后mAP掉到75%,怎么通过QAT和蒸馏恢复到90%以上?求具体操作步骤
6 个回答

先确认你用的校准集是不是真的覆盖了车牌字符的各种光照和角度。INT8掉到75%说明校准数据分布和实际推理差得远。QAT的话,建议先冻结BN层,把学习率设到正常训练的1/10甚至更低,比如1e-4起步,每10个epoch降一次。蒸馏温度我见过有人用4到10之间的,但车牌识别任务通常不需要太高,设个4试试,soft label权重给0.7,hard label给0.3。安路FPGA的DSP有限,可以在QAT后做一次结构化剪枝,比如砍掉C3模块里冗余的卷积通道,注意别动最后的检测头。你安路具体用的是哪款芯片?

说个反直觉的点:你们把YOLOv5s量化后掉这么多,可能不全是量化误差的问题,而是原模型在浮点阶段就对某些车牌样本过拟合了。INT8像一面镜子,把泛化短板放大了。建议先回浮点模型做数据增强,加随机透视和HSV抖动,再走量化流程。QAT和蒸馏配合的话,我的经验是温度别超过6,否则软标签太平滑,车牌这种边缘特征会模糊。学习率建议余弦退火调度,初始值用浮点微调时的1/20。另外安路FPGA资源紧张,可以试试把主干里多余的3×3卷积换成1×3+3×1组合,INT8算下来DSP占用能降30%左右。蒸馏教师模型可以用YOLOv5m或者自己训练一个更大精度的版本。你们目前训练是在GPU上做的吧?安路的开发工具链支持Pytorch导出吗?

这个问题我去年带学生比赛时也遇到过,基本上就是精度和资源之间的拉锯战。先说恢复精度:QAT加蒸馏确实是主流方案,但很多人一上来就调温度和学习率,忽略了两个关键点——第一个是教师模型的选择。你们如果用YOLOv5s本身做教师,那蒸馏没有意义,因为师生能力差太小。建议至少用YOLOv5m,或者自己重训练一个在车牌数据集上mAP达到95%以上的版本作为教师。第二个是蒸馏的位置,不要只看输出层的KL散度,中间层特征蒸馏对车牌这种小目标更有帮助,可以用FitNet的思路,在主干网络第四层和颈部特征层加L2蒸馏损失。具体参数上:温度我推荐从4开始,观察soft label的类别分布是不是太均匀;QAT学习率用1e-4,每5个epoch用验证集看mAP,如果有震荡就降到5e-5;训练轮数大概在50到80轮之间,多早停。至于安路FPGA的DSP资源限制,INT8后还可以做通道剪枝和核融合。通道剪枝建议用BN层的gamma值做指标,剪掉gamma小于0.01的通道,然后对剪掉的层做一小段微调。核融合是把连续的1×1和3×3卷积合并成一个等效卷积,这一步安路的工具链如果支持手动融合,效果会很明显。另一个容易忽略的点是输入分辨率——你们现在用的是640×640吧?车牌识别其实可以降到416×416,mAP几乎不掉,但推理时的DSP占用能少一半。最后一定要检查安路FPGA的INT8推理库是否支持不对称量化,如果不支持,需要把激活值的量化范围手动校准到合适区间,否则精度还会再掉。你们现在仿真结果是在安路的EDA工具里跑的还是在Pytorch里直接测的?如果只在Pytorch里测,实际部署时可能还要考虑DSP的定点数精度损失,建议尽早用开发板实测一次,反过来调整QAT的超参。

先看看你们教师模型本身的精度吧,如果教师自己都只跑92%,那蒸馏天花板就锁死了。建议先用更大的YOLOv5m在车牌数据集上训到95%以上再当教师,不然QAT加蒸馏也白费力气。

个人感觉你们的问题可能出在BN层没处理好。INT8量化后BN的均值和方差如果还是用原始数据,量化误差会被放大。建议QAT时先把BN冻结住,用校准集重新统计一遍均值和方差,然后再放开训练。学习率我习惯从1e-4起步,每10个epoch看mAP,如果连续没涨就降到5e-5。蒸馏温度我试过4到6之间,车牌这种边缘敏感的任务用4效果更稳。安路芯片DSP不够的话,可以在QAT后把主干里3×3卷积拆成1×3+3×1,INT8下DSP占用量能降30%以上。你们安路用的是EG4还是PG2系列?不同型号的DSP阵列排布差异挺大的。

说个可能被忽略的点:你们校准集是怎么选的?如果只是从训练集里随机抽了几百张,那大概率覆盖不到车牌在夜间、逆光、倾斜这些极端场景。INT8量化后掉到75%,很可能是校准分布和实际推理分布没对齐。建议校准集单独构造,每个场景至少50张,总数量控制在1000张左右,多了反而拖慢校准速度。QAT操作上,我的习惯是先做一轮浮点微调,把数据增强加足(随机透视、HSV抖动、马赛克),等浮点mAP稳定在93%以上再启动QAT。QAT阶段蒸馏温度设4,soft label权重给0.6,hard label给0.4,学习率用1e-4配合余弦退火,每5个epoch用验证集看一次,如果mAP震荡就降到5e-5。安路FPGA资源紧张的话,还可以考虑把YOLOv5s的检测头从三个缩减到两个,只保留大尺度和小尺度特征图,车牌一般是中到大目标,小尺度那路可以砍掉,DSP和BRAM都能省出一截。不过得先确认你们安路芯片的DSP数量具体是多少,不同型号差异很大,方便说一下吗?另外,安路工具链对Pytorch导出的支持程度你们验证过没?有些老版本SDK对INT8的算子是有限制的,比如不支持LeakyReLU的量化,得换成ReLU或PReLU才能跑通,这些细节最好提前在开发板上跑一下仿真确认。如果还没到那一步,建议先拿安路的官方demo工程跑一版INT8,确认工具链没问题再调参数,不然很可能调了半天结果工具不支持,那就白费功夫了。
发表回答
登录后可在本页底部提交回答