背景
当下,不同医院的检查报告单在样式、结构格式以及字段设置上均存在显著差异。与此同时,在使用手机拍摄报告单时,常出现诸如图像歪斜、因报告单折叠而产生的部分区域倾斜以及摩尔纹等问题。在此情况下,传统的光学字符识别(OCR)技术在完成报告单识别并以结构化形式输出信息时,效果往往不尽人意,难以满足实际需求。 因而探索视觉语言模型!
模型选择
为了确定最适合的模型,我们对多个视觉语言模型展开了深入探索,并最终选定了 Qwen2-vl 系列。具体的探索过程如下:我们精心挑选了五张涵盖不同类型的图片,分别交给参数量级相当的各类视觉模型进行识别处理,随后详细对比了它们的识别效果。综合考虑识别准确度、成本、设备等实际因素,我们最终决定选用 Qwen/Qwen2-VL-2B-Instruct 和 Qwen/Qwen2-VL-7B-Instruct 这两款模型进行后续的开发与微调工作,以满足我们的特定需求。
在验证阶段,我们运用 Qwen2-VL-2B-Instruct 模型对其可行性进行了初步评估,结果显示识别准确率处于可观水平,相较于传统方案展现出了显著的优势,为后续进一步深入研究与优化奠定了坚实基础。
Qwen/Qwen2-VL-7B-Instruct: https://www.modelscope.cn/models/Qwen/Qwen2-VL-7B-Instruct
Qwen/Qwen2-VL-2B-Instruct: https://www.modelscope.cn/models/Qwen/Qwen2-VL-2B-Instruct
强烈推荐大家使用试试
配置
验证阶段配置
类别 | 配置项 | column3 |
---|---|---|
硬件 | CPU | i9-13代 |
GPU | 4060Ti-16G | |
内存 | 64GB | |
操作系统 | OS | windows10 |
软件 | python | python3.11 |
CUDA | 12.2 |
上线阶段配置
类别 | 配置项 | column3 |
---|---|---|
硬件 | CPU | 4210R*2 |
GPU | 4090-24G *2 | |
内存 | 128GB | |
操作系统 | OS | Linux Ubuntu 22.04 |
软件 | python | python3.11 |
CUDA | 12.2 |
模型微调训练
通过 LLaMA-Factory 可进行 lora 微调,初始数据量为人工标注的 1000 张图片,微调后的模型相较于原版,能够解决一些格式和幻觉方面的问题。
LLaMA-Factory 安装:
- 代码地址 https://github.com/hiyouga/LLaMA-Factory,通过代码地址进行拉取代码并配置环境后。即可微调训练模型,并且支持在线对话与合并模型。这是一个相当好用的微调框架
ps:llama-factory和qwen的transformer环境不一样,一个为正式版的一个为dev版本的
项目方案
- 基础模型:本项目依托强大的 Qwen2-VL-7B-Instruct 模型作为核心基础,该模型在自然语言处理和视觉理解方面具有卓越的性能表现,能够为表单识别和校验任务提供高精度的支持和保障。
任务内容
- 整张报告单识别:系统具备强大的能力,能够精准识别检查报告单上的各类关键信息字段,涵盖姓名、性别、检查单号、检查项目、检查结果、时间、病历号等核心元数据,以及检查项目的详细内容,包括检查项目的具体名称、简称、结果数值、参考范围和单位等信息,从而实现对整张报告单的全面、准确识别,为后续的数据分析和应用提供完整的数据支持。
- 部分项目精准识别:针对用户特定的需求场景,系统还能够根据给定的检查项目名称列表,精确地提取出对应的简称、结果、参考范围和单位等关键信息,实现对部分重点关注项目的快速、精准识别,提高信息获取的效率和针对性,满足用户在不同业务场景下的多样化需求。
接口封装与验证展示
- 为了实现系统的高效集成和灵活应用,我们针对上述两个不同的任务内容分别通过 fastapi 进行了接口封装。Fastapi 作为一款高性能的 Python Web 框架,能够为系统提供快速、稳定的接口服务,方便其他系统或应用程序与之进行无缝对接和数据交互。
- 在验证阶段,我们采用 gradio 构建了直观、友好的展示界面。该界面具备丰富的功能,支持用户便捷地上传待识别图片,用户还可以根据实际需求灵活配置提示词,通过下拉菜单或搜索框等交互组件轻松选择合适的提示词,以引导模型进行更精准的识别和分析。最终,界面将以清晰、美观的方式展示模型的识别结果,为用户提供便捷、高效的使用体验,方便用户对识别结果进行快速验证和后续处理。
识别流程
graph TD;
A[上传图片] --> B[AI识别];
B --> C[AI校验];
C -->|通过| D[客户端];
C -->|不通过| E[文件夹];
A -->|有图片处理| A;图片上传
将待识别的图片上传至系统,系统会自动检测当前的识别通道使用情况。若所有通道均处于忙碌状态,即识别通道已满,上传的图片将自动进入队列,等待系统分配资源进行后续处理,确保整个流程的有序性与高效性,避免因资源抢占导致的处理混乱或延迟。AI识别
系统采用经过精细微调优化后的表单识别模型对进入处理流程的图片进行精准识别。此模型基于先进的Qwen2-VL-7B-Instruct,针对各类表单结构和内容特征进行了大量的训练学习,能够高效、准确地提取图片中的文字信息,并将其转化为结构化的数据,为后续的校验和分析步骤提供坚实的数据基础。- AI校验
利用先进的视觉语言模型结合 OCR(光学字符识别)技术对 AI 识别的结果进行全面校验。OCR能够识别因幻觉而产生的问题。
校验通过的内容将直接推送至展示界面,以清晰、直观的方式呈现给用户;而校验未通过的内容则会被系统自动分类存储至特定文件夹,这些数据将作为宝贵的资源,用于后续对模型的进一步微调训练,不断提升模型的识别准确率和性能表现。
demo展示
线上系统
线上系统采用python为后端,vue3为前端的一个系统
总结展望
在项目起初团队沿着传统OCR路线展开探索,而后转向视觉语言模型路径深入钻研。经过不懈努力,本项目借助视觉语言模型成功攻克了传统方案在识别方面存在的诸多难题,例如针对存在倾斜、歪曲情况以及带有摩尔纹的图片,都能够精准地进行识别,并且还可以将识别内容以结构化的形式输出,这无疑极大地提升了识别效果与内容利用的便捷性。
在整个项目实施期间,我们投入了诸多精力进行多方面的验证与优化工作。其中,对提示词工程进行了反复的验证,力求使其达到最佳效果;同时,针对所选用的模型,也开展了严谨的验证工作,并根据实际情况对模型进行了细致的微调,以保障其性能能够契合项目的各项需求;数据的标注也经过大量的时间,并且采用多人交叉验证的方式。微调模型的过程也是反复多次,不同超参数的设置,带来不同的模型。
值得一提的是,此视觉语言模型表所开发的单识别方案的技术路线有着广泛的应用前景。理论上它不仅能够在医疗检查报告单这类复杂文本的识别场景中发挥出色作用,而且还具备很强的可扩展性,能够延伸至诸如某某卡号识别、购物小票识别、发票识别以及护照识别等多个不同类型的实际应用场景中,为诸多行业的信息处理与数字化转型提供有力的技术支撑。
参考文献
QwenTeam. Qwen2-VL: Enhancing Vision-Language Model’s Perception of the World at Any Resolution. 2024年10月3日
https://arxiv.org/pdf/2409.12191