PaddleOCR-VL-SFT-WaveDrom-LoRA

模型简介 (Model Description)

PaddleOCR-VL-SFT-WaveDrom-LoRA 是一个专为时序信号波形识别优化的视觉语言大模型(VLM)。该模型基于 PaddleOCR-VL 进行 LoRA 指令微调,能够直接“阅读”复杂的电子工程信号波形图,并精准输出结构化的 WaveDrom JSON 代码。

本模型展示了通用 OCR 基础模型在经过高质量领域数据微调后,在“图像到结构化代码(Image-to-Code)”复杂任务上的巨大潜力。它可以极大提升电子工程师、芯片设计人员在阅读时序文档、数字逻辑验证报告时的自动化效率。

性能表现 (Performance)

评估集选取真实电子工业场景中的时序波形图。在我们的评估集上,模型在综合评估标准下达到了 45.0% 的平均准确率。不同难度数据的表现如下: ex1

专业的综合评估机制

由于波形图包含复杂的时序逻辑和密集的文本标签,且大模型在生成长代码时容易遇到长度截断(Truncation),传统的“精确匹配(Exact Match)”无法真实反映模型的视觉理解能力。为此,我们设计了一套多维特征加权评估系统来衡量模型表现:

  1. 结构化容错与修复:引入括号堆栈平衡算法,对因 max_tokens 截断导致的残缺 JSON 进行智能修复,确保合法的数据解析。
  2. 信号行对齐机制:摒弃全局强匹配,采用自上而下的逐行比对,避免单行名称识别错误导致整个波形计为 0 分。
  3. 基于编辑距离的特征打分
    • 波形容错:合理包容波形周期的比例拉伸(如将 x==== 识别为 x====== 依然保留高分)。
    • 文本容错:忽略模型生成的额外空格噪音,并允许轻微的 OCR 字母漏识别。
  4. 长度惩罚机制:对模型的“漏行(遗漏波形)”或“过度生成(幻觉多出波形)”进行严厉的分数稀释惩罚。

生成示例 (Examples)

# 输入波形图 (Image) 模型预测输出 (Prediction JSON)
1 ex1 "signal": [{"name": "CLK", "wave": "p.............", "node": ".A.B.C.D.E.F.G.H.I.J.K"}, {"name": "Sample", "wave": "01...........0", "phase": 0.5}, {"name": "Dout", "wave": "z.==========z", "data": ["D9", "D8", "D7", "D6", "D5", "D4", "D3", "D2", "D1", "D0"]}]
2 ex2 "signal": [{"name": "INPUT", "wave": "lhlhlhlhlhlhlhlh"}, {"name": "FF1", "wave": "hl.....h.l.....h"}, {"name": "FF2", "wave": "lh.l.....h.l...."}, {"name": "FF3", "wave": "l..h.l.....h.l.."}, {"name": "FF4", "wave": "l....h.l.....h.l"}]

(注:模型输出的 WaveDrom JSON 可直接渲染为标准时序图)

如何使用 (How to Use)

你可以使用 paddleformers 或兼容 PaddleOCR-VL 的库来加载并使用此模型。由于使用了 FlashAttention 机制,建议在支持的环境中运行。

import paddle
from PIL import Image
from paddleformers.transformers import AutoModelForConditionalGeneration, AutoProcessor

# 加载模型与处理器
model_path = "./IC-WaveDrom-DSL"
model = AutoModelForConditionalGeneration.from_pretrained(model_path).eval()
processor = AutoProcessor.from_pretrained(model_path)

model.config._attn_implementation = "flashmask"
model.visual.config._attn_implementation = "flashmask"

# 准备输入
image = Image.open("your_waveform_image.png").convert("RGB")
messages = [{
    "role": "user",
    "content": [
        {"type": "image", "image": image},
        {"type": "text", "text": "WaveDrom Recognition:"},
    ]
}]

inputs = processor.apply_chat_template(
    messages, tokenize=True, add_generation_prompt=True, return_dict=True, return_tensors="pd"
)

# 生成预测
with paddle.no_grad():
    outputs = model.generate(**inputs, max_new_tokens=1024, pad_token_id=0, eos_token_id=2)

print(processor.decode(outputs[0].tolist()[0], skip_special_tokens=True))

训练细节 (Training Details)

  • 基础模型 (Base Model): PaddleOCR-VL
  • 微调方法 (Method): 监督微调 (Supervised Fine-Tuning) + LoRA
  • 训练数据 (Dataset): 包含2万张合成的 WaveDrom 波形图像及其对应的 JSON 代码。数据经过难度分级(易、中、难)以提升模型泛化能力。
  • 训练框架 (Frameworks):

致谢 (Acknowledgements)

  • 感谢 PaddleOCR 团队开源的优秀多语言视觉模型 PaddleOCR-VL,为本项目提供了强大的基座。
  • 感谢 WaveDrom 社区创造的优雅波形描述语言,它是本项目的灵感与数据来源。

许可证 (License)

本模型权重遵循 Apache 2.0 许可证开源。

Downloads last month
52
Safetensors
Model size
1.0B params
Tensor type
BF16
·
Inference Providers NEW
This model isn't deployed by any Inference Provider. 🙋 Ask for provider support

Model tree for Aronuihyig/IC-WaveDrom-DSL

Finetuned
(5)
this model
Quantizations
1 model