尧图建网站 尧图建网站 YAOTU WEB BUILD 免费咨询
ARTICLE DETAIL

资讯详情

深耕网站建设与建站编程的一线实战洞察。

拆解 trocr-small-handwritten-npu 核心架构:DeiT 图像编码器与 TrOCR 解码器如何协作

拆解 trocr-small-handwritten-npu 核心架构:DeiT 图像编码器与 TrOCR 解码器如何协作 拆解 trocr-small-handwritten-npu 核心架构DeiT 图像编码器与 TrOCR 解码器如何协作【免费下载链接】trocr-small-handwritten-npu项目地址: https://ai.gitcode.com/atlasleong/trocr-small-handwritten-nputrocr-small-handwritten-npu 是一个面向手写文字识别OCR场景的模型交付项目它以微软 TrOCR 手写识别模型为基底采用VisionEncoderDecoderModel架构由DeiT 图像编码器看懂图片、TrOCR 文本解码器逐字写出文字并完成昇腾 NPU 上的适配与推理验证。整个模型仅 6160 万参数输入一张单行文本图像即可输出可读文本。这篇文章将带你一步步看懂它的核心架构与数据流转。一图看懂OCR 模型里的编码器 解码器流水线大多数现代 OCR 模型都可以拆成两个角色trocr-small-handwritten-npu 也不例外编码器Encoder负责看。把图片切块、编码成一组携带视觉语义的特征向量解码器Decoder负责写。根据视觉特征一个 token 一个 token 地自回归生成文本。两个角色中间由**交叉注意力cross-attention**这座桥连接解码器在生成每个字时都会回头查阅编码器给出的视觉特征从而保证写出来的内容与图像内容一致。DeiT 图像编码器如何把图片翻译成视觉特征模型的编码器来自DeiTData-efficient Image Transformers相关配置记录在 model/config.json 的encoder字段中配置项数值含义image_size384输入图像统一缩放到 384×384patch_size16每 16×16 像素切成一个 patchnum_hidden_layers1212 层 Transformer 编码块hidden_size384特征维度 384num_attention_heads66 个注意力头intermediate_size1536前馈网络隐层维度hidden_actgeluGELU 激活函数工作过程一张 384×384 的图像先被切成 24×24 576 个 16×16 的 patch每个 patch 经过线性投影变成 384 维向量再叠加上位置编码和 CLS 标记送入 12 层 Transformer。最终输出的encoder_last_hidden_state就是解码器的视觉记忆。TrOCR 文本解码器逐字自回归地写出答案解码器是一个标准的 TrOCR 文本 Transformer源自 UniLM共 6 层词表大小 64044XLMRoberta SentencePiece 词表配置项数值含义decoder_layers66 层解码块d_model256解码器隐层维度decoder_attention_heads88 个注意力头decoder_ffn_dim1024前馈网络维度vocab_size64044词表大小max_length20最多生成 20 个 token解码器从decoder_start_token_id2开始每一步根据上一步的输出和编码器的视觉特征预测下一个 token 的概率分布decoder_logits直到生成结束符。cross_attention_hidden_size384正好与编码器输出维度对齐保证两种特征可以无缝融合。TrOCRProcessor连接图像与文本的翻译官编码器和解码器各自只懂自己的语言而 TrOCRProcessor 负责翻译DeiTImageProcessor把图像 resize 到 384、用 mean0.5/std0.5 归一化输出pixel_values [1, 3, 384, 384]XLMRobertaTokenizerSentencePiece把文本 token 化负责解码阶段的词表映射。一次processor(imagesimage, return_tensorspt)调用就能把一张图片变成模型能吃的张量。完整推理流程从图片到文字的一趟旅程在 inference.py 中整个推理是一条清晰的数据流水线图像 → DeiTImageProcessor → pixel_values [1,3,384,384] → DeiT 编码器 → encoder_last_hidden_state → TrOCR 解码器交叉注意力→ logits [1,20,64044] → argmax → token_ids → tokenizer 解码 → 文本核心调用非常简洁实际代码见 inference.pygenerated_ids model.generate(pixel_values, max_length20, do_sampleFalse, num_beams1) generated_text processor.batch_decode(generated_ids, skip_special_tokensTrue)[0]实测用确定性渲染的文本行HELLO384×384 白底黑字验证模型在昇腾 NPU 上成功输出与输入一致的转录文本且输出无 NaN/Inf。昇腾 NPU 适配精度与性能的双重保障在 NPU 上运行 Transformer 模型最大的挑战是数值精度。项目在 inference.py 的_apply_npu_precision_fix中做了两处关键修复禁用 Cube 单元 fp32 降精度设置CUBE_MATH_TYPEKEEP_DTYPE并关闭ALLOW_MATMUL_HF32与ALLOW_CONV_HF32避免矩阵乘被悄悄降成 fp16替换为精确 GELU昇腾的F.gelu核即使是none模式仍是近似实现项目改用基于torch.erf的精确 GELU。修复前后对比明显max_abs_error从0.0320降到0.0002612/12 样本离散 token 与 CPU 基线完全一致。性能方面torch.npu.synchronize()同步计时teacher-forcing 前向约24.7 ms贪心生成约322.3 ms10 次重复中位数23.16 ms详细计时见 assets/timing.json。从交付工作流看完整适配过程如果你好奇一个模型是怎么被适配到 NPU 的assets/agent_workflow.png 展示了从环境准备、模型审计、精度修复到验收的完整工作流所有环节的状态、参数和路径都记录在案每一步都可追溯。总结与快速上手trocr-small-handwritten-npu 的核心架构可以一句话概括DeiT 编码器负责看懂图像TrOCR 解码器负责写出文本交叉注意力让两者协同工作。它已经在昇腾 NPU 上完成了精度与性能的双重验证是学习编码器-解码器视觉模型和 NPU 适配的绝佳范例。想要亲自动手运行克隆仓库后执行git clone https://gitcode.com/atlasleong/trocr-small-handwritten-npu pip install -r requirements.txt python inference.py在昇腾 NPU 环境下运行成功后会打印EXIT_CODE0说明编码器与解码器的协作流水线已完整跑通。【免费下载链接】trocr-small-handwritten-npu项目地址: https://ai.gitcode.com/atlasleong/trocr-small-handwritten-npu创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表