InternVL多模态模型训练教程,流程图识别检测LLM-v1版本。检测流程图,输出基础图形bounding box

news2024/11/15 5:09:36

文章目录

  • 项目介绍
  • 求一个star
    • 环境准备
    • 模型下载
        • 多模态大语言模型 (InternVL 2.0)
    • 构造训练数据集
        • 单张图片:
        • Grounding / Detection Data
    • 开始训练

项目介绍

本篇文章主要是讲如何训练InternVL2模型,详细信息可以看我的Github repo,欢迎star,会持续更新,目前为v1版本,使用InternVL2官方介绍的方法进行训练。目前为V1版本,已经能够准确检测出流程图中的基础图形(矩形、圆形、菱形等),接下来会训练模型输出dotjsonmermaid格式。实现流程图的精准解析。除此之外,还会实现模型对表格和PDF的解析。

求一个star

环境准备

Clone this repository:

git clone https://github.com/OpenGVLab/InternVL.git

Create a conda virtual environment and activate it:

conda create -n internvl python=3.9 -y
conda activate internvl

Install dependencies using requirements.txt:

pip install -r requirements.txt
By default, our requirements.txt file includes the following dependencies:

-r requirements/internvl_chat.txt

-r requirements/streamlit_demo.txt

-r requirements/classification.txt

-r requirements/segmentation.txt

The clip_benchmark.txt is not included in the default installation. If you require the clip_benchmark functionality, please install it manually by running the following command:

pip install -r requirements/clip_benchmark.txt

还需要额外安装:
Install flash-attn==2.3.6:

pip install flash-attn==2.3.6 --no-build-isolation

Alternatively you can compile from source:

git clone https://github.com/Dao-AILab/flash-attention.git
cd flash-attention
git checkout v2.3.6
python setup.py install

模型下载

本项目中主要下载的是1~8B的模型

多模态大语言模型 (InternVL 2.0)
Model NameVision PartLanguage PartHF LinkMS LinkDocument
InternVL2‑1BInternViT‑300M‑448pxQwen2‑0.5B‑Instruct🤗 link🤖 link📖 doc
InternVL2‑2BInternViT‑300M‑448pxinternlm2‑chat‑1‑8b🤗 link🤖 link📖 doc
InternVL2‑4BInternViT‑300M‑448pxPhi‑3‑mini‑128k‑instruct🤗 link🤖 link📖 doc
InternVL2‑8BInternViT‑300M‑448pxinternlm2_5‑7b‑chat🤗 link🤖 link📖 doc
InternVL2‑26BInternViT‑6B‑448px‑V1‑5internlm2‑chat‑20b🤗 link🤖 link📖 doc
InternVL2‑40BInternViT‑6B‑448px‑V1‑5Nous‑Hermes‑2‑Yi‑34B🤗 link🤖 link📖 doc
InternVL2-Llama3-76BInternViT‑6B‑448px‑V1‑5Hermes‑2‑Theta‑
Llama‑3‑70B
🤗 link🤖 link📖 doc

构造训练数据集

构建SFT数据集,将全部数据集存放到任意目录,然后构建一个如下所示格式的JSON文件,存放到internvl_chat/shell/data/目录下,

{
  "your-custom-dataset-1": {
    "root": "path/to/the/image/",
    "annotation": "path/to/the/jsonl/annotation",
    "data_augment": false,
    "repeat_time": 1,
    "length": "number of your data"
  },
  ...
}

例如:

{
  "sharegpt4v_instruct_gpt4-vision_cap100k": {
    "root": "playground/data/",
    "annotation": "playground/opensource/sharegpt4v_instruct_gpt4-vision_cap100k.jsonl",
    "data_augment": false,
    "repeat_time": 1,
    "length": 102025
  }
}

建议是将官方的微调数据集也加上,这样能够在保证增加能力的同时,保留原本的能力。不过数据集的配比需要看个人。官方的微调数据集为:InternVL-Chat-V1-2-SFT-Data
可以直接通过HuggingFace下载:

https://huggingface.co/datasets/OpenGVLab/InternVL-Chat-V1-2-SFT-Data

在每个数据集文件中,单条数据的格式如下:

单张图片:
{
  "id": 0,
  "image": "path/to/image.jpg",
  "width": 111,
  "height": 222,
  "conversations": [
    {"from": "human", "value": "<image>\nuser input"},
    {"from": "gpt", "text": "assistant output"},
    {"from": "human", "value": "user input"},
    {"from": "gpt", "text": "assistant output"}
  ]
}

其中,conversations中的<image>标签表示图片在对话中插入的位置,并且整个数据集中<image>的标签数量必须和图片的数量一致,也就是说,在单张图片的数据集中,<image>标签只能出现一次。

Grounding / Detection Data

对于输出边界框和目标检测的数据,图片的大小都需要正则化到[0,1000]之间,可以使用下面这个函数进行正则化:

def normalize_coordinates(box, image_width, image_height):
    x1, y1, x2, y2 = box
    normalized_box = [
        round((x1 / image_width) * 1000),
        round((y1 / image_height) * 1000),
        round((x2 / image_width) * 1000),
        round((y2 / image_height) * 1000)
    ]
    return normalized_box

将模型的边界框输出定义为如下格式:<ref>class name</ref><box>[[x1, y1, x2, y2], ...]</box>
下面是两个数据示例,输出有多个bbox的可以看第二个示例:

[{
    "id": 2324,
    "image": "COCO_train2014_000000581857.jpg",
    "width": 427,
    "height": 640,
    "conversations": [
        {
            "from": "human",
            "value": "<image>\nPlease provide the bounding box coordinate of the region this sentence describes: <ref>the lady with the blue shirt</ref>"
        },
        {
            "from": "gpt",
            "value": "<ref>the lady with the blue shirt</ref><box>[[243, 469, 558, 746]]</box>"
        },
        {
            "from": "human",
            "value": "Please provide the bounding box coordinate of the region this sentence describes: <ref>woman in gray shirt facing camera on right</ref>"
        },
        {
            "from": "gpt",
            "value": "<ref>woman in gray shirt facing camera on right</ref><box>[[507, 409, 698, 740]]</box>"
        },
        {
            "from": "human",
            "value": "Please provide the bounding box coordinate of the region this sentence describes: <ref>a woman in glasses shops in an open air fruit market</ref>"
        },
        {
            "from": "gpt",
            "value": "<ref>a woman in glasses shops in an open air fruit market</ref><box>[[196, 422, 395, 708]]</box>"
        }
    ]
},
{
    "id": 78281,
    "image": "images/x00001541/000106464.jpg",
    "width": 800,
    "height": 800,
    "conversations": [
        {
            "from": "human",
            "value": "<image>\nPlease detect and label all objects in the following image and mark their positions."
        },
        {
            "from": "gpt",
            "value": "Sure, I will detect and label all objects in the image and mark their positions.\n\n```\n<ref>Bulletproof Helmet</ref><box>[[1, 2, 269, 235]]</box>\n<ref>Bulletproof Clothing</ref><box>[[650, 619, 990, 993]]</box>\n<ref>Gun Model</ref><box>[[32, 231, 977, 662]]</box>\n<ref>screw</ref><box>[[754, 376, 851, 429]]</box>\n<ref>handcuff</ref><box>[[698, 228, 931, 386]]</box>\n<ref>95 Type Assault Rifle</ref><box>[[39, 229, 983, 667]]</box>\n<ref>shield</ref><box>[[30, 597, 273, 993]]</box>\n<ref>telescope</ref><box>[[666, 38, 890, 217]]</box>\n<ref>Wireless Walkie-Talkie</ref><box>[[295, 2, 370, 226], [374, 0, 447, 226]]</box>\n<ref>bomb</ref><box>[[473, 61, 552, 181], [569, 61, 648, 183]]</box>\n<ref>weapon</ref><box>[[302, 617, 342, 993]]</box>\n<ref>vessel</ref><box>[[355, 653, 644, 991]]</box>\n<ref>artifact</ref><box>[[915, 0, 981, 294]]</box>\n```\n"
        }
    ]
}]

输出有多个边界框时的文本样式为:
在这里插入图片描述

构建流程图检测数据集的代码见:data/construct_internvl_flowchart_datasets.py

开始训练

启动微调的命令为:

# Using 8 GPUs, fine-tune the full LLM, cost about 30G per GPU
GPUS=8 PER_DEVICE_BATCH_SIZE=1 sh shell/internvl2.0/2nd_finetune/internvl2_2b_internlm2_1_8b_dynamic_res_2nd_finetune_full.sh
# Using 2 GPUs, fine-tune the LoRA, cost about 27G per GPU
GPUS=1 PER_DEVICE_BATCH_SIZE=1 sh shell/internvl2.0/2nd_finetune/internvl2_2b_internlm2_1_8b_dynamic_res_2nd_finetune_lora.sh
# Using 8 GPUs, fine-tune the LoRA, cost about 27G per GPU
GPUS=8 PER_DEVICE_BATCH_SIZE=1 sh shell/internvl2.0/2nd_finetune/internvl2_2b_internlm2_1_8b_dynamic_res_2nd_finetune_lora.sh

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

ffplay源码分析(二)结构体VideoState

在多媒体的世界里&#xff0c;播放器是离用户最近的一环&#xff0c;它将数字编码的音频和视频数据转化为生动的视听体验。ffplay 播放器作为一款强大而备受关注的工具&#xff0c;其背后隐藏着一系列精妙的结构体&#xff0c;它们协同工作&#xff0c;共同完成了从数据读取、解…

Unity3D 遍历预制体

Unity3D 遍历预制体进行批量化处理。 遍历预制体 有时候&#xff0c;我们需要对一些预制体资源进行批量化处理&#xff0c;如果每一个预制体都手动处理&#xff0c;就会耗费很多时间精力&#xff0c;也容易出错。 我们可以写一个脚本遍历预制体&#xff0c;对预制体进行修改…

单HTML文件集成vue3+ElementPlus的使用

1、新建一个HTML文件 2、HTML文件引用vue3.js 3、引用elementplus.js和elementplus.css 4、Vue初始化ElementPlus 5、页面中可以使用ElementPlus啦 HTML文件例子如下&#xff1a; <html><head><meta charset"UTF-8"><script src"./js/vue…

NSTimer 引发的循环引用(内存泄漏)| NSTimer强引用

在iOS中使用NSTimer(定时器)不当会引发内存泄漏. NSTimer 有多种创建方式,具体可以看这位朋友的文章:https://blog.51cto.com/u_16099225/6716123 我这里主要讲使用NSTimer 会引发的内存泄漏情况以及解决方法: 内存泄漏出现的场景: VC A push 到VC B, VC B里启动了一个 NST…

Java基础之方法与数组

方法 在Java中&#xff0c; 方法的定义包括方法的修饰符、返回类型、方法名、参数列表和方法体。方法既能够模块化的组织代码(当代码规模比较复杂的时候)。也做到代码被重复使用&#xff08;一份代码可以在多个位置使用&#xff09;。Java中的方法类似与C语言中的函数&#xf…

Java SpringBoot实战教程:如何一步步构建保险业务管理与数据分析系统

✍✍计算机毕业编程指导师 ⭐⭐个人介绍&#xff1a;自己非常喜欢研究技术问题&#xff01;专业做Java、Python、微信小程序、安卓、大数据、爬虫、Golang、大屏等实战项目。 ⛽⛽实战项目&#xff1a;有源码或者技术上的问题欢迎在评论区一起讨论交流&#xff01; ⚡⚡ Java、…

LlamaIndex 实现 RAG(三)- 向量数据

RAG 中使用向量存储知识和文档数据&#xff0c;召回时通过语意进行搜索。文档转为向量是个非常消耗时的操作&#xff0c;不同 Embedding Model 参数不同&#xff0c;结果维度也不同&#xff0c;消耗的算力也不同。所以通常的做法都会在索引阶段&#xff08;Embedding&#xff0…

deeplab3-plus(中文翻译)

** Encoder-Decoder with Atrous Separable Convolution for Semantic Image Segmentation 文章目录 Encoder-Decoder with Atrous Separable Convolution for Semantic Image Segmentation1 Introduction2 Related Work3 Methods3.1 Encoder-Decoder with Atrous Convolution…

鸿蒙南向开发:测试框架xdevice核心组件

简介 xdevice是OpenHarmony中为测试框架的核心组件&#xff0c;提供用例执行所依赖的相关服务。 xdevice主要包括以下几个主要模块&#xff1a; command&#xff0c;用户与测试平台命令行交互模块&#xff0c;提供用户输入命令解析&#xff0c;命令处理。config&#xff0c;…

electron仿微信,高度还原,入门项目

效果展示 Electron仿写微信-效果展示 目前完成了一些基础的功能&#xff0c;还在持续开发中&#xff0c;后期会整理开源。 有些样式没有追求百分百还原&#xff0c;只是通过该项目&#xff0c;让大家了解一下Electron创建桌面应用&#xff0c;各种窗口的创建及销毁、事件传递机…

NLP从零开始------13.文本中阶序列处理之语言模型(1)

语言模型( language model) 用于计算一个文字序列的概率&#xff0c; 评估该序列作为一段文本出现在通用或者特定场景中的可能性。每个人的语言能力蕴涵了一个语言模型&#xff0c;当我们说出或写下一段话的时候&#xff0c;已经在不自觉地应用语言模型来帮助我们决定这段话中的…

viscode 自定义片段,快速生成自己的开发模板

设置 ---> 代码片段 2.选择新建全局代码片段文件 3.根据示例自定义配置代码片段 4.示例:vue prefix:内容--> 代表用于触发代码片段的内容 $1&#xff0c; $2 用于制表位,如 $1 代表生成后第一个输入的位置,$2代表第二个,不用自己移动鼠标 {// Place your snippets f…

Sac格式

本文章只作为自己学习时的用法&#xff0c;不通用&#xff0c;大家可不用参考。 sac格式 0.01000000 -1.569280 1.520640 -12345.00 -12345.009.459999 19.45000 -41.43000 10.46400 -12345.00-12345.00 -12345.00 -12…

SQL注入漏洞的基础知识

目录 SQL注入漏洞的定义和原理 SQL注入的类型和攻击方法 SQL注入的防御措施 示例代码 深入研究 SQL注入漏洞的常见攻击场景有哪些&#xff1f; 如何有效防范SQL注入攻击&#xff1f; SQL注入与跨站脚本攻击&#xff08;XSS&#xff09;之间有什么区别&#xff1f; 主要…

每日一练【最大连续1的个数 III】

一、题目描述 给定一个二进制数组 nums 和一个整数 k&#xff0c;如果可以翻转最多 k 个 0 &#xff0c;则返回 数组中连续 1 的最大个数 。 二、题目解析 本题同样是利用滑动窗口的解法。 首先进入窗口&#xff0c;如果是1&#xff0c;就直接让right&#xff0c;但是如果是…

【软考】树、森林和二叉树之间的相互转换

目录 1. 说明2. 树、森林转换为二叉树2.1 树转成二叉树2.1 森林转成二叉树 3. 二叉树转换为树和森林 1. 说明 1.树、森林和二叉树之间可以互相进行转换&#xff0c;即任何一个森林或一棵树可以对应表示为一棵叉树&#xff0c;而任何一棵二叉树也能对应到一个森林或一棵树上。 …

SSRF复现

目录 环境 分析测试 写入shell 环境 web-ssrfme docker环境 拉取运行 分析测试 进入网站会显示源码 可以看到过滤了file&#xff0c;dict等&#xff0c;但get传参info会执行phpinfo() 可以发现这里网站ip是172.18.0.3&#xff0c;可以使用这个地址绕过waf 测试看是否存在…

如何实现一次搭建 多平台适配的小程序

如何实现一次搭建 多平台适配的小程序 什么是小程序小程序的优势有什么&#xff1f;如果构建小程序&#xff0c;会用在什么领域和场景&#xff1f;如何实现一站式开发多平台的小程序&#xff1f;你希望了解小程序上哪些功能模块的集成能力&#xff1f; 随着微信、支付宝、百度、…

七、Centos安装LDAP--Docker版--已失败

参考博客&#xff1a; docker 安装 OpenLDAP 及 LdapAdmin桌面版、页面版(osixia/openldap)_docker安装ldap-CSDN博客 LDAP使用docker安装部署与使用_memberof ldap docker-CSDN博客 目录 一、安装Docker Docker基本使用 管理镜像 二、拉取LDAP镜像 配置docker国内的镜像…

Java 入门指南:初识 Java 异常(Exception)

初识Java异常 何为异常 在Java中&#xff0c;异常是一个不需要的或意外的事件&#xff0c;它发生在程序执行期间&#xff0c;即在运行时&#xff0c;破坏了程序指令的正常流程。异常可以被程序捕获&#xff08;catch&#xff09;和处理&#xff08;handle&#xff09;。 方法…