让AI知识触手可及

首页 » 【项目实战】通过LLaMaFactory+Qwen2-VL-2B微调一个多模态医疗大模型
内容目录

前言

随着多模态大模型的发展,其不仅限于文字处理,更能够在图像、视频、音频方面进行识别与理解。医疗领域中,医生们往往需要对各种医学图像进行处理,以辅助诊断和治疗。如果将多模态大模型与图像诊断相结合,那么这会极大地提升诊断效率。

项目目标

训练一个医疗多模态大模型,用于图像诊断。

刚好家里老爷子近期略感头疼,去医院做了脑部CT,诊断患有垂体瘤,我将尝试使用多模态大模型进行进一步诊断。

实现过程

1. 数据集准备

为了训练模型,需要准备大量的医学图像数据。通过搜索我们找到以下训练数据:

数据名称:MedTrinity-25M
数据地址https://github.com/UCSC-VLAA/MedTrinity-25M
数据简介:MedTrinity-25M数据集是一个用于医学图像分析和计算机视觉研究的大型数据集。
数据来源:该数据集由加州大学圣克鲁兹分校(UCSC)提供,旨在促进医学图像处理和分析的研究。
数据量:MedTrinity-25M包含约2500万条医学图像数据,涵盖多种医学成像技术,如CT、MRI和超声等。
数据内容
该数据集有两份,分别是 25Mdemo25Mfull

25Mdemo (约162,000条)数据集内容如下:

25Mfull (约24,800,000条)数据集内容如下:

2. 数据下载

2.1 安装Hugging Face的Datasets库

pip install datasets

2.2 下载数据集

from datasets import load_dataset

# 加载数据集
ds = load_dataset("UCSC-VLAA/MedTrinity-25M", "25M_demo", cache_dir="cache")

执行结果:

说明:

  • 以上方法是使用HuggingFace的Datasets库下载数据集,下载的路径为当前脚本所在路径下的cache文件夹。
  • 使用HuggingFace下载需要能够访问https://huggingface.co/ 并且在网站上申请数据集读取权限才可以。
  • 如果没有权限访问HuggingFace,可以关注以下公众号后,回复 “MedTrinity”获取百度网盘下载地址。

2.3 预览数据集

# 查看训练集的前1个样本
print(ds['train'][:1]) 

运行结果:

{
    'image': [<PIL.JpegImagePlugin.JpegImageFile image mode=RGB size=512x512 at 0x15DD6D06530>], 
    'id': ['8031efe0-1b5c-11ef-8929-000066532cad'], 
    'caption': ['The image is a non-contrasted computed tomography (CT) scan of the brain, showing the cerebral structures without any medical devices present. The region of interest, located centrally and in the middle of the image, exhibits an area of altered density, which is indicative of a brain hemorrhage. This area is distinct from the surrounding brain tissue, suggesting a possible hematoma or bleeding within the brain parenchyma. The location and characteristics of this abnormality may suggest a relationship with the surrounding brain tissue, potentially causing a mass effect or contributing to increased intracranial pressure.'
    ]
}

使用如下命令对数据集的图片进行可视化查看:

# 可视化image内容
from PIL import Image
import matplotlib.pyplot as plt

image = ds['train'][0]['image']  # 获取第一张图像

plt.imshow(image)
plt.axis('off')  # 不显示坐标轴
plt.show()

运行结果:

3. 数据预处理

由于后续我们要通过LLama Factory进行多模态大模型微调,所以我们需要对上述的数据集进行预处理以符合LLama Factory的要求。

3.1 LLama Factory数据格式

查看LLama Factory的多模态数据格式要求如下:

[
  {
    "messages": [
      {
        "content": "<image>他们是谁?",
        "role": "user"
      },
      {
        "content": "他们是拜仁慕尼黑的凯恩和格雷茨卡。",
        "role": "assistant"
      },
      {
        "content": "他们在做什么?",
        "role": "user"
      },
      {
        "content": "他们在足球场上庆祝。",
        "role": "assistant"
      }
    ],
    "images": [
      "mllm_demo_data/1.jpg"
    ]
  }
]

3.2 实现数据格式转换脚本

from datasets import load_dataset
import os
import json
from PIL import Image

def save_images_and_json(ds, output_dir="mllm_data"):
    """
    将数据集中的图像和对应的 JSON 信息保存到指定目录。

    参数:
    ds: 数据集对象,包含图像和标题。
    output_dir: 输出目录,默认为 "mllm_data"。
    """
    # 创建输出目录
    if not os.path.exists(output_dir):
        os.makedirs(output_dir)

    # 创建一个列表来存储所有的消息和图像信息
    all_data = []

    # 遍历数据集中的每个项目
    for item in ds:
        img_path = f"{output_dir}/{item['id']}.jpg"  # 图像保存路径
        image = item["image"]  # 假设这里是一个 PIL 图像对象

        # 将图像对象保存为文件
        image.save(img_path)  # 使用 PIL 的 save 方法

        # 添加消息和图像信息到列表中
        all_data.append(
            {
                "messages": [
                    {
                        "content": "<image>图片中的诊断结果是怎样?",
                        "role": "user",
                    },
                    {
                        "content": item["caption"],  # 从数据集中获取的标题
                        "role": "assistant",
                    },
                ],
                "images": [img_path],  # 图像文件路径
            }
        )

    # 创建 JSON 文件
    json_file_path = f"{output_dir}/mllm_data.json"
    with open(json_file_path, "w", encoding='utf-8') as f:
        json.dump(all_data, f, ensure_ascii=False)  # 确保中文字符正常显示

if __name__ == "__main__":
    # 加载数据集
    ds = load_dataset("UCSC-VLAA/MedTrinity-25M", "25M_demo", cache_dir="cache")

    # 保存数据集中的图像和 JSON 信息
    save_images_and_json(ds['train'])

运行结果:

4. 模型下载

本次微调,我们使用阿里最新发布的多模态大模型:Qwen2-VL-2B-Instruct 作为底座模型。
模型说明地址https://modelscope.cn/models/Qwen/Qwen2-VL-2B-Instruct

使用如下命令下载模型

git lfs install
# 下载模型
git clone https://www.modelscope.cn/Qwen/Qwen2-VL-2B-Instruct.git

5. 环境准备

5.1 机器环境

硬件:

  • 显卡:4080 Super
  • 显存:16GB

软件:

  • 系统:Ubuntu 20.04 LTS
  • python:3.10
  • pytorch:2.1.2 + cuda12.1

5.2 准备虚拟环境

# 创建python3.10版本虚拟环境
conda create --name train_env python=3.10

# 激活环境
conda activate train_env

# 安装依赖包
pip install streamlit torch torchvision

# 安装Qwen2建议的transformers版本
pip install git+https://github.com/huggingface/transformers

剩余内容需解锁后查看

解锁查看全文

已经登录?立即刷新
声明:一起AI技术所有文章,如无特殊说明或标注,均为本站作者原创发布。任何个人或组织,在未征得作者同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。
原创不易,内容版权受保护,感谢您的尊重与支持。
4 1 投票
Article Rating
订阅评论
提醒
guest的头像
14 评论
内联反馈
查看所有评论
1443的头像
1 月 前

严格按照操作指南完成,但是微调导出的模型chat对话的输出是不对的:The image is the brain MRI scan, and I can see a, for you. The region of interest is located in the other? I, the I, , and the region of interest is located in the other? I, the . The region of interest is in the with a. The region’s in the right. The left, I, and the right, I, are in the left-center of the right. The region of interest’s region is in the lower part of the right. The unusuals are in the brain, and the smell is on. The brain’s on the left, and the right, I, is in the lower part of the right, and the brain’s on the left. The region of interest’s in the lower part of the right, and the brain’s in the lower part of the right. The region of interest’s is in the lower part of the right, and the brain’s is in the lower part of the right. The region of interest’s is in the lower part of the right, and the brain’s is in the lower part of the right. The region of interest’s is in the lower part of the right. The region of interest’s is in the lower part of the right. The region of interest’s is in the lower part of the right. The region of interest’s is in the lower part of the right. The region of interest’s is in the lower part of the right. The region of interest’s is in the lower part of the right. The region of interest’s is in the lower part of the right. The region of interest’s is in the lower part of the right. The region of interest’s is in the lower part of the right. The region of interest’s is in the lower part of the right. The region of interest’s is in the lower part of the right. The region of interest’s is in the lower part of the right. The region of interest’s is in the lower part of the right. The region of interest’s is in the lower part of the right. The region of interest’s is in the lower part of the right. The region of interest’s is in the lower part of the right. The region of interest’s is in the lower part of the right. The region of interest’s is in the lower part of the right. The region of interest’s is in the lower part of the right. The region of interest’s is in the lower part of the right. The region of interest’s is in the lower

1024的头像
22 天 前
回复给  Dongming

我选择得是Qwen2-VL-7B-Instruct这个模型

5677的头像
22 天 前
回复给  1024

我也用的Qwen2-VL-7B-Instruct,数据集是我自己的,但是微调之后反而变得非常呆板,会重复而且输出的很短

1610的头像
10 天 前
回复给  Dongming

按照《day24(上):大模型三阶段训练方法(LLaMa Factory)》中第2阶段:监督微调的过程操作,最后开始训练的时候会报错没有图片输入,然后就卡住不动了,怎么解决。使用的模型是Qwen2-VL-7B-Instruct,数据集是Chinese-medical-dialogue/data/train_0001_of_0001.json。

1024的头像
22 天 前

你好我想请教一下,为什么我安装上述模型训练完成之后,我让他用中文回答我,他还是使用英文

1024的头像
22 天 前
回复给  Dongming

例如把数据翻译为中文再进行训练么

1610的头像
10 天 前
回复给  Dongming

谢谢

Picture of Dongming
Dongming
见天地,见众生,见自己。

分类文章

推荐活动

推荐文章

腾讯混元大模型核心论文曝光:Scaling law、MoE、合成数据以及更多
一个AI浣熊账号的高开癫走:仅靠82篇帖子、4个月涨粉近14万!
神级项目训练GPT-2仅需5分钟,Andrej Karpathy都点赞
推理性能直逼o1,DeepSeek再次出手,重点:即将开源
扣子OpenAPI突进智能语音战场!点满低延时、定制化、随时打断和音色克隆技能(内测开启!)
用AI反制AI诈骗,合合信息获全球AI攻防挑战赛金融场景赛道冠军
在「最难LLM评测榜单」上,阶跃万亿参数模型拿下中国第一
年度世界互联网科技大奖公布,腾讯Angel机器学习平台获领先科技奖
媲美OpenAI事实性基准,这个中文评测集让o1-preview刚刚及格
实测昆仑万维对话AI「Skyo」,会读诗、知晓雷军摆拍
14
0
希望看到您的想法,请您发表评论x
滚动至顶部