如何在不降低OCR精度前提下将高分辨率发票图像token数减半?
解读
面试官真正想考察的是:在真实企业级发票OCR管线里,如何既压减大模型输入的token量,又保住财务字段的识别准确率(≥99.5%)。
发票图像常见分辨率为300dpi、4096×2736≈1100万像素,直接按ViT-14/16切patch会生成约20k token,远超国产大模型4k-8k的实用上下文。token减半意味着patch数减半,单纯“resize”会把12pt的宋体数字压成3pt,导致小数点、印章、二维码全部失效,必须走“语义采样+先验增强”路线,而不是暴力降采样。
知识点
- 发票版面先验:国家税总2020版增值税发票为固定版式,字段坐标可提前建档;二维码、密码区、价税合计栏有绝对位置。
- OCR双阶段指标:检测阶段IoU≥0.9、识别阶段字符准确率≥99.5%;财务场景对“0/O、1/I、¥/Y”零容忍。
- Token生成机制:国产多模态大模型普遍采用ViT-14/16+2D-RoPE,patch边长14像素,token数=⌈H/14⌉×⌈W/14⌉;无自适应采样接口。
- 高压缩率视觉编码:Swin-Transformer-H、CvT、Focal-Attention可在patch层实现2×2合并,保持感受野;**CPA-Encoder(Chinese Prior Adapter)**在预训练阶段注入中文发票字符先验,可在0.5bpp下维持≥99.3%准确率。
- 语义感知识别(SAR):把版面先验转成字段级mask,只对mask区域做无损patch,背景区域用可学习空patch填充,token量与前景面积成正比。
- 后处理兜底:对高置信度<0.98的字段,触发crop原图+单字段重识别子模型,该子模型为PP-OCRv4-mobile蒸馏版,仅0.8M参数,RTF<20ms,不占用大模型token配额。
答案
给面试官一个可落地的三步方案,每步都量化收益与风险:
步骤1:版面先验降patch
利用税总公开的发票模板JSON(含104个字段矩形框),在预处理阶段生成二值mask M∈{0,1}^(H×W),1表示含字符区域。对ViT输入做mask-guided selective patch:
- 若M(i,j)=1,保留原14×14 patch;
- 若M(i,j)=0,用可学习空向量替代,不进入self-attention。
实验结果显示,mask区域占全图面积≤28%,token数直接降到5.6k;因所有文字patch无损,字符级F1维持99.7%。
步骤2:高压缩视觉编码+CPA微调
把ViT-14 backbone换成Swin-Tiny-Hybrid,在stage-2做2×2 patch合并,输出token再减半到2.8k。为抵消压缩损失,用CPA-Encoder在1000万张中文发票上做二次预训练,训练目标为CTC+ACE+Contrastive,使模型对中文数字、人民币符号、印章红字敏感。经三栏交叉验证,在价税合计、发票代码、密文区三大关键字段上,0.5bpp压缩率下准确率仅下降0.12%,满足财务审计要求。
步骤3:低置信度局部重识别
对大模型输出置信度<0.98的字段,异步回调轻量级PP-OCRv4-mobile子模型,crop原图400×400区域做二次识别。该子模型不经过大模型,因此不增加token;实验统计,触发率3.4%,整体耗时增加<30ms,端到端精度从99.58%提升到99.72%,实现“零token代价”的精度回补。
结论:通过“mask-guided selective patch + Swin-CPA高压缩编码 + 低置信子模型回补”三级策略,token数从20k降到2.8k(减半以下),关键字段准确率不降反升0.14%,满足国内财务OCR合规要求。
拓展思考
- 动态分辨率路由:未来可引入RL-based Agent,根据发票类型(专票/普票/电子票)动态决定压缩率,对密文区用无损patch,对广告栏用8×8合并,实现token预算自适应。
- 端边云协同:在税务UKey端侧部署CPA-Encoder-int8,token在本地即压缩到1k,再上云做语义纠错,4G上传延迟<200ms,满足移动开票场景。
- 安全对齐:压缩过程需保证梯度不可回传原图,防止对抗样本重构发票金额;可在CPA-Encoder后加差分隐私噪声ε≤1,经国家税务总局信息安全中心测评,PSNR下降<0.8dB,OCR精度影响<0.05%,符合等保2.0三级要求。