从零开始使用GOT-OCR2.0——多模态OCR项目:微调数据集构建 + 训练(解决训练报错,成功实验微调训练)

        在上一篇文章记录了GOT-OCR项目的环境配置和基于官方模型参数的基础使用。环境安装的博文快速链接:

从零开始使用GOT-OCR2.0——多模态通用型OCR(非常具有潜力的开源OCR项目):项目环境安装配置 + 测试使用-CSDN博客

        本章在环境配置好的基础上,进一步研究官方给出的微调模型接口。在其官方源码论文中介绍了项目的整体架构——编码器和解码器,其中编码器使用的 ViTDet 的视觉Transformer模型,解码器使用的是通义千问的Qwen-0.5B语言模型。官方便捷接口只支持 Post-Train 仅训练解码器。具体可参加精读论文,快速链接地址:

【论文精读】GOT-OCR2.0源码论文——打破传统OCR流程的多模态视觉-语言大模型架构:预训练VitDet 视觉模型+ 阿里通义千问Qwen语言模型-CSDN博客

        GOT-OCR项目官方Github地址:https://github.com/Ucas-HaoranWei/GOT-OCR2.0

目录

一、微调解码器的数据集格式

        1.训练集的目录结构

        2.训练集标签JSON内容格式

        3.具体代码实现

       4.样例展示

二、官方指令解码器训练

        1.报错解决

        2.官方指令训练(修改增添版)

        3.测试结果(微调模型与官方原始模型效果对比)

        4.实验中的新发现

 


一、微调解码器的数据集格式

        (节省内容时间:可以直接跳转到本节第4部分样例展示——自行编程转化到样例格式就可以开始训练了

        官方指引下有三个位置是注意点,这些地方都可以在下载的源码中查看。

        一是,官方给出的样例标签 json 文件格式,在下载的本地源码 GOT-OCR2.0-main\assets\train_sample.jpg 位置就可以查看。

        二和三是需要修改源码py代码文件,分别在本地下载源码的 GOT-OCR-2.0-master\GOT\utils\constants.py 和 GOT-OCR-2.0-master\GOT\data\conversation_dataset_qwen.py 位置。

        结合这三个需要修改的地方,可以分析判断出数据集的大致构成结构。

        1.训练集的目录结构

        首先是训练数据集的文件结构。通过查看 constants.py 中的参数配置信息,并且结合另一个文件 conversation_dataset_qwen.py 37 行修改内容(官方指引),可以得知GOT-OCR解码器微调支持多个数据集的输入(如包括pdf文件数据集、场景图片ocr数据集等),详见下图。   

        示例数据给出了三个数据集的配置,每个数据集可以在不同的地址位置,数据集应包含图片数据的总文件夹,和一个json标签文件包含对应图片的所有标签训练信息。    

         在另一个代码修改处展示了如何指定不同类型数据集训练,如 pdf 数据的训练包含指定的data1和data2两个数据集。

        因此结合上述所有内容,可以指定,最终数据集生成后的目录结构样子应该如下。为了更清晰,这里把所有图片都放在 images 子目录下,在外面写一个 data1.json 保存标签信息。

        (还应注意到,官方这里没有做训练集和验证集的区分,在其使用指南中,后续有专门的验证模型val介绍,因此推测此处应该全部数据都是用来训练的,实际中还应留出一部分数据用来后面验证模型有没有过拟合或其他泛化性问题)

        2.训练集标签JSON内容格式

        然后就要具体看其标签文件(data1.json)的内容格式组成了。官方只给了一个样例图片,可以从中大致解读出大概结构。

        首先所有标签信息的数据构成一个大的列表保存在JSON文件中,列表中每个元素是对应每一张不同图片数据的标签信息字典

        字典结构中,键 “image” 的值对应图片名,键“conversations” 的值对应文本结果。至于conversations中为啥有两个信息,且一个是 “from:human”,一个“from:gpt”,有两种猜测:推测一——是可能数据OCR文本结果存在两种来源,一种是人工标注的,一种是gpt生成的;推测二——论文中表示其数据集是从官方数据集中抽取的,是不是“gpt”表示官方数据中的内容,而“human”代表还需要后续人工效验?

        总而言之,本文数据集构建不具体探究其中原因,因为样例数据给出中文本内容基本都是在“gpt”的value值中,所以暂定将自己的数据集文本也填入,而不去改变“human”的内容

        3.具体代码实现

        下面给出具体实现标签文件编写的代码。实际上只需将自己的数据集标签内容改写成上述分析的JSON格式即可。

        需要注意下述代码的标签文件是来自于对页面中每个字的分类目标检测结果,其原始的JSON格式如下,其中前四个是坐标信息,第五个是字的排序信息,表示该字在整段文章中对应第几个字,最后是这个字的具体字符。

        因此,如果是其他数据集格式,只需最终生成上一标题记录的标签JSON内容格式即可,可自行编程。

import os
import json

class GOT_Dataset_Creator:
    def __init__(self, dataset_path):
        self.dataset = dataset_path

    def generate_labels(self, image_path, label_path):
        save_list = []
        for file in os.listdir(image_path):
            if file.lower().endswith('jpg'):
                img_dict = {}
                img_dict['image'] = "images/"+file
                base = file.split('.')[0]
                labeldir = os.path.join(label_path, base+'.json')
                with open(labeldir, 'r', encoding='utf-8') as f:
                    word_list = json.load(f)
                if word_list!= []:
                    conv_list = [{"from":"human","value":"<image>\nOCR: "}]
                    textlst = [w[5] for w in word_list]
                    text = ''.join(textlst)
                    text_dict = {"from":"gpt", "value":text}
                    conv_list.append(text_dict)
                    img_dict["conversations"] = conv_list
                    save_list.append(img_dict)
                else:
                    continue
        #print(save_list)
        savedir = os.path.join(self.dataset, 'data1.json')
        with open(savedir, 'w') as f:
            json.dump(save_list,f)


if __name__=='__main__':
    image_path = \dataset\images  # 原始图片路径
    label_path = \dataset\labels # 原始标签路径
    dataset_path = \GOT-OCR_Dataset\dataset # GOT数据集保存路径

    gotdataset = GOT_Dataset_Creator(dataset_path)
    gotdataset.generate_labels(image_path, label_path)

       4.样例展示

         最终数据结构和之前分析的保持一致,然后还要修改代码,下图给出样例。

        (特别注意)在实际训练中还有几处需要特别注意的细节。下面给出具体图片展示。

        首先是构建好数据集,数据集目录格式和标签文本内容格式如下两图。

        然后修改源码两个文件conversation_dataset_qwen.py constants.py 内容。下图标注了注意细节点。

二、官方指令解码器训练

        1.报错解决

        在使用官方给出的指令训练时,会出现一些报错,下面记录其解决。

        首先是,官方使用的是 deepspeed 库来进行Transformer模型的微调加速训练,但是该库只支持 Linux 系统下运行, Windows系统运行会直接报错(找不到“deepspeed”指令等报错信息)。因此 GOT 项目模型的微调训练只支持Linux环境!

        然后是,关于CUDA环境的问题,在本文训练微调时,有一个库——“bitsandbytes”总会报找不到CUDA路径的问题,如下图所示。可能原因是,本机服务器安装的是CUDA12.4最新版本,而环境安装的是cu118。

         一种粗糙的解决办法是,替换这个库的版本,原版GOT中要求的是0.41.0版本,我更新到0.44.1版本后,虽然训练中还是会报错,但是不影响正常训练。

# 卸载原有包
pip uninstall bitsandbytes
# 安装新包
pip install bitsandbytes==0.44.1

        最后其他报错,如果在训练中遇到有什么包导入失败,显示“no module ...”,直接在命令行pip install安装即可。

        解决以上问题后,可以开始训练。

        2.官方指令训练(修改增添版)

        官方给出的指令并不能完全满足实际训练要求,这里新增了指定训练GPU的操作。下面先给出实际训练中,要根据自己文件数据修改的地方。

        下面一图总览。代码如下。

# 微调GOT解码器修改后的指令代码

CUDA_VISIBLE_DEVICES=0,1,2,3,4,5,6,7 deepspeed path/GOT/train/train_GOT.py --deepspeed path/zero_config/zero2.json --model_name_or_path path/GOT_weights/ --use_im_start_end True --bf16 True --gradient_accumulation_steps 2 --evaluation_strategy "no" --save_strategy "steps" --save_steps 200 --save_total_limit 1 --weight_decay 0. --warmup_ratio 0.001 --lr_scheduler_type "cosine" --logging_steps 1 --tf32 True --model_max_length 8192 --gradient_checkpointing True --dataloader_num_workers 8 --report_to none --per_device_train_batch_size 2 --num_train_epochs 1 --learning_rate 2e-5 --datasets gj-ocr --output_dir path/output

        3.测试结果(微调模型与官方原始模型效果对比)

        安装上述指令测试结果如下。

        训练过程信息打印如下。

        结果保存模型参数数据如下。可以在自己指定的文件夹下找到。

        继续可以把训练好的模型参数下载到要进行测试的目录,可以对比一下官方默认模型参数和经过微调后的模型识别部署效果

        本文微调使用的是7000+张繁体古文数据集(特别的,这里的古文数据集没有做任何标点分隔处理,每张图片对应一个“长文本”:无标点的文本),训练轮次使用10,其余训练参数默认官方。

        先看官方模型参数的OCR结果。可以看到官方的模型参数已经表现不错了,大部分以识别出来了,但是仍存在少部分字识别分类错误——对应右图红框内的字

        而且官方的训练集在文本部分是有“\t,\n”等如空格换行的分隔符的,因此其识别的OCR结果也对应有换行的效果,这也再次表现了多模态模型的优越性和强大的空间感知能力。

        再看经过自建数据集微调后的结果。可以看到字分类的正确率得到了明显提升——出错的为下图黄框内的字。并且语言模型的“可塑性”看起来很强,对应训练集对文本进行分割符,部署效果也是没有进行分段分行的。

        4.实验中的新发现

         对于密集型文字的识别效果,微调后的模型和官方模型对比差异就更加明显了。

        同时,本文实验发现,对于中分辨率的大图(大于1280*1280,小于6000*6000),可以直接构建数据集训练,也能得到很好的效果。

        官方模型在训练集中采用的都是1280*1280的方形图,而本文使用的数据集微调则不同——1.图片数据是不规则的,可能是竖直或平躺的矩形;2.图片数据大小不是固定的,可能是1345*2895这种的。

        下图对比展示了这种由训练数据集差异导致的部署效果差异。可以看到官方模型是无法直接识别这种长宽大于1280*1280且文字密集的数据(官方解决办法是对原图进行切分小图识别)

        但是经过微调后的模型就可以得到很好的效果了。如下图所示。

        由此可见,GOT-OCR项目非常具有潜力,其性能还能继续深挖。ViT加语言模型的架构还有非常大的模型性能空间值得深入研究。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/929659.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Facebook:筑牢隐私安全堡垒,守护社交净土

在全球社交媒体平台中&#xff0c;Facebook一直是风靡全球的佼佼者。然而&#xff0c;随着数字化信息的迅速膨胀&#xff0c;用户隐私保护的重要性日益凸显。面对用户对数据安全性的高度重视&#xff0c;Facebook致力于通过一系列措施来确保隐私保护&#xff0c;守护每位用户的…

VBA信息获取与处理第四个专题第二节:将工作表数据写入VBA数组

《VBA信息获取与处理》教程(版权10178984)是我推出第六套教程&#xff0c;目前已经是第一版修订了。这套教程定位于最高级&#xff0c;是学完初级&#xff0c;中级后的教程。这部教程给大家讲解的内容有&#xff1a;跨应用程序信息获得、随机信息的利用、电子邮件的发送、VBA互…

python通过ODBC连接神通数据库

1、安装神通数据库 2、安装python 3、安装pyodbc pip3 install pyodbc-5.2.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl 注&#xff1a;pyodbc要和python版本相对应 4、安装unixodbc 5、配置神通数据库ODBC数据源 6、示例代码如下 #!/usr/bin/python…

Vue Web开发(一)

1. 环境配置 1.1. 开发工具下载 1.1.1. HbuilderX 官网地址&#xff1a;https://uniapp.dcloud.net.cn/ 1.1.2. Visual Studio Code 官网地址&#xff1a;https://code.visualstudio.com/Download 1.1.3. Node环境 官网地址&#xff1a;https://nodejs.cn/   正常软件安装…

Tomcat新手成长之路:安装部署优化全解析(下)

接上篇《Tomcat新手成长之路&#xff1a;安装部署优化全解析&#xff08;上&#xff09;》: link 文章目录 7.应用部署7.1.上下文7.2.启动时进行部署7.3.动态应用部署 8.Tomcat 类加载机制8.1.简介8.2.类加载器定义8.3.XML解析器和 Java 9.JMS监控9.1.简介9.2.启用 JMX 远程监…

模拟实现vector(非常详细)

模拟实现vector 1.vector基本概念2.vector()默认构造函数3.size()成员函数迭代器4.capacity()成员函数5.empty()成员函数6.reverse()成员函数7.push_back()成员函数8.pop_back()成员函数9.operator[ ]成员函数10.resize()成员函数11.insert()成员函数12.erase()成员函数13.swap…

Elastic Cloud Serverless:深入探讨大规模自动扩展和性能压力测试

作者&#xff1a;来自 Elastic David Brimley, Jason Bryan, Gareth Ellis 及 Stewart Miles 深入了解 Elasticsearch Cloud Serverless 如何动态扩展以处理海量数据和复杂查询。我们探索其在实际条件下的性能&#xff0c;深入了解其可靠性、效率和可扩展性。 简介 Elastic Cl…

微信小程序之手机归属地查询

微信小程序之手机归属地查询 需求描述 API申请和小程序设置 API申请 第一步&#xff1a;完整账号注册 我们需要来到如下网站&#xff0c;注册账号&#xff1a;万维易源 第二步&#xff1a;账号注册完成以后&#xff0c;点击右上角的控制台信息。 第三步&#xff1a;在控制…

Agent AI: Surveying the Horizons of Multimodal Interaction---摘要、引言、代理 AI 集成

题目 智能体AI:多模态交互视野的考察 论文地址&#xff1a;https://arxiv.org/abs/2401.03568 图1&#xff1a;可以在不同领域和应用程序中感知和行动的Agent AI系统概述。Agent AI是正在成为通用人工智能&#xff08;AGI&#xff09;的一个有前途的途径。Agent AI培训已经证…

分布式光伏电站如何实现监控及集中运维管理?

安科瑞戴婷 Acrel-Fanny 前言 今年以来&#xff0c;在政策利好推动下光伏、风力发电、电化学储能及抽水蓄能等新能源行业发展迅速&#xff0c;装机容量均大幅度增长&#xff0c;新能源发电已经成为新型电力系统重要的组成部分&#xff0c;同时这也导致新型电力系统比传统的电…

SpringMVC其他扩展

一、全局异常处理机制: 1.异常处理两种方式: 开发过程中是不可避免地会出现各种异常情况的&#xff0c;例如网络连接异常、数据格式异常、空指针异常等等。异常的出现可能导致程序的运行出现问题&#xff0c;甚至直接导致程序崩溃。因此&#xff0c;在开发过程中&#xff0c;…

Cesium 6 ,Cesium 全局注册,Cesium 常用事件解析与应用,全局注册Cesium事件

目录 前言 一. 全局注册事件 1.1 事件机制介绍 1.2 this.Cesium 和 this.viewer 1.3 全局注册 二. 常见事件分类 2.1 鼠标事件 2.1.1 点击事件 (click) 2.1.2 双击事件 (doubleClick) 2.1.3 鼠标移动事件 (mouseMove) 2.1.4 鼠标滚轮事件 (mouseWheel) 2.2 视图与摄…

matlab2024a安装

1.开始安装 2.点击安装 3.选择安装密钥 4.接受条款 5.安装密钥 21471-07182-41807-00726-32378-34241-61866-60308-44209-03650-51035-48216-24734-36781-57695-35731-64525-44540-57877-31100-06573-50736-60034-42697-39512-63953 6 7.选择许可证文件 8.找许可证文件 9.选…

在玩“吃鸡”的时候游戏崩溃要如何解决?游戏运行时崩溃是什么原因?

“吃鸡”游戏崩溃问题深度解析与解决方案&#xff1a;原因、修复与预防 在紧张刺激的“吃鸡”&#xff08;即《绝地求生》&#xff09;游戏中&#xff0c;突然遭遇游戏崩溃无疑会让玩家倍感沮丧。作为一名经验丰富的软件开发从业者&#xff0c;我深知游戏崩溃可能由多种因素引…

学习threejs,通过设置纹理属性来修改纹理贴图的位置和大小

&#x1f468;‍⚕️ 主页&#xff1a; gis分享者 &#x1f468;‍⚕️ 感谢各位大佬 点赞&#x1f44d; 收藏⭐ 留言&#x1f4dd; 加关注✅! &#x1f468;‍⚕️ 收录于专栏&#xff1a;threejs gis工程师 文章目录 一、&#x1f340;前言1.1 ☘️Texture 贴图 二、&#x1…

【开源安全保护】如何安装JumpServer堡垒机

【开源安全保护】如何安装JumpServer堡垒机 什么是堡垒机 大家好&#xff0c;我是星哥&#xff0c;今天我以前来认识堡垒机 堡垒机&#xff08;Bastion Host&#xff09;&#xff0c;也称为跳板机&#xff08;Jump Server&#xff09;&#xff0c;是指在计算机网络中&#x…

JSP知识点总结

jsp九大对象 在jsp中内置了9个对象&#xff0c;无需创建该对象即可使用。其名称为固定名称。 1.out输出对象 - 属于JspWriter print(): 输出 flush(): 刷新 close(): 关闭 2.request请求对象 - 属于HttpServletRequest getParameter(): 获取请求的参数 setCharacterEncodin…

微信小程序全屏显示地图

微信小程序在界面上显示地图&#xff0c;只需要用map标签 <map longitude"经度度数" latitude"纬度度数"></map>例如北京的经纬度为&#xff1a;116.407004,39.904595 <map class"bgMap" longitude"116.407004" lati…

(软件测试文档大全)测试计划,测试报告,测试方案,压力测试报告,性能测试,等保测评,安全扫描测试,日常运维检查测试,功能测试等全下载

1. 引言 1.1. 编写目的 1.2. 项目背景 1.3. 读者对象 1.4. 参考资料 1.5. 术语与缩略语 2. 测试策略 2.1. 测试完成标准 2.2. 测试类型 2.2.1. 功能测试 2.2.2. 性能测试 2.2.3. 安全性与访问控制测试 2.3. 测试工具 3. 测试技术 4. 测试资源 4.1. 人员安排 4.2. 测试环境 4.2.…

2024 阿里云Debian12.8安装apach2【图文讲解】

1. 更新系统&#xff0c;确保您的系统软件包是最新的 sudo apt update sudo apt upgrade -y 2. 安装 Apache Web 服务器 apt install apache2 -y 3. 安装 PHP 及常用的扩展 apt install php libapache2-mod-php -y apt install php-mysql php-xml php-mbstring php-curl php…