微信扫码
添加专属顾问
随着多模态大模型的发展,其不仅限于文字处理,更能够在图像、视频、音频方面进行识别与理解。医疗领域中,医生们往往需要对各种医学图像进行处理,以辅助诊断和治疗。如果将多模态大模型与图像诊断相结合,那么这会极大地提升诊断效率。
训练一个医疗多模态大模型,用于图像诊断。
刚好家里老爷子近期略感头疼,去医院做了脑部CT,诊断患有垂体瘤,我将尝试使用多模态大模型进行进一步诊断。
为了训练模型,需要准备大量的医学图像数据。通过搜索我们找到以下训练数据:
数据名称:MedTrinity-25M
数据地址:https://github.com/UCSC-VLAA/MedTrinity-25M
数据简介:MedTrinity-25M数据集是一个用于医学图像分析和计算机视觉研究的大型数据集。
数据来源:该数据集由加州大学圣克鲁兹分校(UCSC)提供,旨在促进医学图像处理和分析的研究。
数据量:MedTrinity-25M包含约2500万条医学图像数据,涵盖多种医学成像技术,如CT、MRI和超声等。
数据内容:该数据集有两份,分别是 25Mdemo 和 25Mfull 。
25Mdemo (约162,000条)数据集内容如下:
25Mfull (约24,800,000条)数据集内容如下:
pip install datasets
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”获取百度网盘下载地址。
# 查看训练集的前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()
运行结果:
由于后续我们要通过LLama Factory进行多模态大模型微调,所以我们需要对上述的数据集进行预处理以符合LLama Factory的要求。
查看LLama Factory的多模态数据格式要求如下:
[
{
"messages":[
{
"content":"<image>他们是谁?",
"role":"user"
},
{
"content":"他们是拜仁慕尼黑的凯恩和格雷茨卡。",
"role":"assistant"
},
{
"content":"他们在做什么?",
"role":"user"
},
{
"content":"他们在足球场上庆祝。",
"role":"assistant"
}
],
"images":[
"mllm_demo_data/1.jpg"
]
}
]
from datasets import load_dataset
import os
import json
from PIL importImage
defsave_images_and_json(ds, output_dir="mllm_data"):
"""
将数据集中的图像和对应的 JSON 信息保存到指定目录。
参数:
ds: 数据集对象,包含图像和标题。
output_dir: 输出目录,默认为 "mllm_data"。
"""
# 创建输出目录
ifnot 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"
withopen(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'])
运行结果:
本次微调,我们使用阿里最新发布的多模态大模型: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
硬件:
• 显卡:4080 Super
• 显存:16GB
软件:
• 系统:Ubuntu 20.04 LTS
• python:3.10
• pytorch:2.1.2 + cuda12.1
# 创建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
下载并安装LLamaFactory框架的具体步骤,请见【课程总结】day24(上):大模型三阶段训练方法(LLaMa Factory)中 准备训练框架 部分内容,本章不再赘述。
由于Qwen2-VL使用的transformer的版本为4.47.0.dev0,LLamaFactory还不支持,所以需要修改LLaMaFactory的代码,具体方法如下:
第一步:在 llamafactory 源码中,找到 check_dependencies() 函数,这个函数位于 src/llamafactory/extras/misc.py 文件的第 82 行。
第二步:修改 check_dependencies() 函数并保存
# 原始代码
require_version("transformers>=4.41.2,<=4.45.2", "To fix: pip install transformers>=4.41.2,<=4.45.2")
# 修改后代码
require_version("transformers>=4.41.2,<=4.47.0", "To fix: pip install transformers>=4.41.2,<=4.47.0")
第三步:重新启动LLaMaFactory服务
llamafactory-cli webui
这个过程可能会提示 ImportError: accelerate>=0.34.0 is required for a normal functioning of this module, but found accelerate==0.32.0. 如遇到上述问题,可以重新安装accelerate,如下:
# 卸载旧的 accelerate
pip uninstall accelerate
# 安装新的 accelerate
pip install accelerate==0.34.0
第一步:启动LLaMa Factory后,访问http://0.0.0.0:7860
第二步:在web页面配置模型路径为 4.步骤 下载的模型路径,并点击加载模型
由上图可以看到,模型能够识别到这是一个CT图像,显示了大概的位置以及相应的器官,但是并不能给出是否存在诊断结果。
第一步:将 3.2步骤 生成的mllm_data文件拷贝到LLaMaFactory的data目录下
第二步:将 4.步骤 下载的底座模型Qwen2-VL 拷贝到LLaMaFactory的model目录下
第三步:修改 LLaMaFactory data目录下的dataset_info.json,增加自定义数据集:
"mllm_med":{
"file_name":"mllm_data/mllm_data.json",
"formatting":"sharegpt",
"columns":{
"messages":"messages",
"images":"images"
},
"tags":{
"role_tag":"role",
"content_tag":"content",
"user_tag":"user",
"assistant_tag":"assistant"
}
},
访问LLaMaFactory的web页面,配置微调的训练参数:
• Model name: Qwen2-VL-2B-Instruct
• Model path: models/Qwen2-VL-2B-Instruct
• Finetuning method: lora
• Stage : Supervised Fine-Tuning
• Dataset: mllm_med
• Output dir: saves/Qwen2-VL/lora/Qwen2-VL-sft-demo1
配置参数中最好将
save_steps设置大一点,否则训练过程会生成非常多的训练日志,导致硬盘空间不足而训练终止。
点击Preview Command预览命令行无误后,点击Run按钮开始训练。 训练参数:
llamafactory-cli train \
--do_train True \
--model_name_or_path models/Qwen2-VL-2B-Instruct \
--preprocessing_num_workers 16 \
--finetuning_type lora \
--template qwen2_vl \
--flash_attn auto \
--dataset_dir data \
--dataset mllm_med \
--cutoff_len 1024 \
--learning_rate 5e-05 \
--num_train_epochs 3.0 \
--max_samples 100000 \
--per_device_train_batch_size 2 \
--gradient_accumulation_steps 8 \
--lr_scheduler_type cosine \
--max_grad_norm 1.0 \
--logging_steps 5 \
--save_steps 3000 \
--warmup_steps 0 \
--optim adamw_torch \
--packing False \
--report_to none \
--output_dir saves/Qwen2-VL-2B/full/Qwen2-VL-sft-demo1 \
--bf16 True \
--plot_loss True \
--ddp_timeout 180000000 \
--include_num_input_tokens_seen True \
--lora_rank 8 \
--lora_alpha 16 \
--lora_dropout 0 \
--lora_target all
训练过程:
训练的过程中,可以通过
watch -n 1 nvidia-smi实时查看GPU显存的消耗情况。
经过35小时的训练,模型训练完成,损失函数如下:
损失函数一般降低至1.2左右,太低会导致模型过拟合。
接下来,我们将 Lora补丁 与 原始模型 合并导出:
1. 切换到 Expert 标签下
2. Model path: 选择Qwen2-VL的基座模型,即:models/Qwen2-VL-2B-Instruct
3. Checkpoint path: 选择lora微调的输出路径,即 saves/Qwen2-VL/lora/Qwen2-VL-sft-demo1
4. Export path:设置一个新的路径,例如:Qwen2-VL-sft-final
5. 点击 开始导出 按钮
导出完毕后,会在LLaMaFactory的根目录下生成一个 Qwen2-VL-sft-final 的文件夹。
第一步:在LLaMa Factory中卸载之前的模型
第二步:在LLaMa Factory中加载导出的模型,并配置模型路径为 Qwen2-VL-sft-final
第三步:加载模型并上传之前的CT图片提问同样的问题
可以看到,经过微调后的模型,可以给出具体区域存在的可能异常问题。
接下来,我将使用微调后的模型,为家里老爷子的CT片做诊断,看看模型给出的诊断与大夫的异同点。
我总计测试了CT片上的52张局部结果,其中具有代表性的为上述三张,可以看到模型还是比较准确地诊断出:脑部有垂体瘤,可能会影响到眼部。这与大夫给出的诊断和后续检查方案一致。
训练集:
• 多模态:本次训练只是采用了MedTrinity-25Mdemo数据集,如果使用MedTrinity-25Mfull数据集,效果应该会更好。
• 中英文:本次训练集中使用的MedTrinity-25Mdemo数据集,只包含了英文数据,如果将英文标注翻译为中文,提供中英文双文数据集,相信效果会更好。
• 对话数据集:本次训练只是使用了多模态数据集,如果增加中文对话(如:中文医疗对话数据-Chinese-medical-dialogue),相信效果会更好。
前端页面:
• 前端页面:本次实践曾使用streamlit构建前端页面,以便图片上传和问题提出,但是在加载微调后的模型时,会出现:ValueError: No chat template is set for this processor 问题,所以转而使用LLaMaFactory的web页面进行展示。
• 多个图片推理:在Qwen2-VL的官方指导文档中,提供了 Multi image inference 方法,本次未进行尝试,相信将多个图片交给大模型进行推理,效果会更好。
• Qwen2-VL-2B作为多模态大模型,具备有非常强的多模态处理能力,除了能够识别图片内容,还可以进行相关的推理。
• 我们可以通过 LLaMaFactory 对模型进行微调,使得其具备医疗方面的处理能力。
• 微调数据集采用开源的MedTrinity-25M数据集,该数据集有两个版本:25Mdemo和25Mfull。
• 训练前需要对数据集进行预处理,使得其适配LLaMaFactory的微调格式。
• 经过微调后的多模态大模型,不但可以详细地描述图片中的内容,还可以给出可能的诊断结果。
欢迎关注公众号以获得最新的文章和新闻
53AI,企业落地大模型首选服务商
产品:场景落地咨询+大模型应用平台+行业解决方案
承诺:免费POC验证,效果达标后再合作。零风险落地应用大模型,已交付160+中大型企业
2026-06-28
Om AI第二弹!VLX-Seek来了:3B小模型,细粒度感知反超Gemini
2026-06-22
小参数,大能力 | 星际视觉语言大模型再进化,0.8B轻量版正式发布
2026-06-16
RapidOCR: 从 setup.py 迁移到 pyproject.toml 打包实践
2026-06-12
PaddleOCR 3.7 正式接入ONNX Runtime,一个参数换后端,轻量部署新选择
2026-06-11
本地部署OCR,可能是AI进单位的第一道门
2026-06-08
正式推出 Gemma 4 12B: 一款统一、免编码器的多模态模型
2026-05-30
还在用 MinerU 解析 PDF?这个 2B 小模型直接把 olmOCR-bench 刷到 87.6%,速度还快 3.68 倍
2026-05-30
Qwen-VLA:迈向通用具身智能的统一动作框架
2026-04-22
2026-04-27
2026-04-21
2026-04-09
2026-04-15
2026-04-26
2026-04-21
2026-05-30
2026-04-22
2026-05-25
2026-03-12
2025-12-31
2025-08-04
2025-05-26
2025-05-13
2025-04-08
2025-04-05
2025-03-30
欢迎您使用【53AI 官方网站】(以下简称“本网站”或“我们”)。本《会员服务协议》(以下简称“本协议”)是您(以下简称“会员”或“用户”)与【深圳市博思协创网络科技有限公司】之间关于注册、登录及使用本网站会员服务所订立的法律协议。
在您注册或登录前,请务必审慎阅读、充分理解各条款内容,特别是免除或限制责任的条款、知识产权条款、争议解决条款等。此类条款将以加粗形式提示您注意。 当您通过微信公众号授权、手机验证码验证或其他方式成功登录本网站时,即视为您已完全理解并同意接受本协议的全部内容。
一、 定义
本网站:指由【深圳市博思协创网络科技有限公司】运营的,域名为【53ai.com】的网站及相关移动端页面。
会员服务:指本网站向注册会员提供的知识库文章查阅、内容检索及其他相关增值服务。
知识库内容:指本网站发布的包括但不限于文字、图表、数据、研究报告、行业分析等数字化内容资源。
二、 账号注册与登录
登录方式:本网站支持以下登录方式,您可根据实际情况选择:
微信公众号授权登录:您同意将您的微信OpenID信息授权给本网站,用于创建或关联会员账号。
手机验证码登录:您需提供真实有效的手机号码,并通过短信验证码完成身份验证与登录/注册。
账号安全:您的账号仅限您本人使用,禁止赠与、借用、租用、转让或售卖。因您保管不善导致的账号被盗、密码泄露等损失,由您自行承担。
实名认证:根据相关法律法规要求,我们可能要求您在特定功能下完成实名认证。如您拒绝提供,可能无法使用部分或全部服务。
未成年人保护:若您未满18周岁,请在法定监护人的陪同下阅读本协议,并在征得监护人同意后使用本服务。
三、 服务内容与规范
知识库查阅权限:会员登录后,有权按照其会员等级对应的权限范围,在线浏览、检索本网站知识库中的相关文章及内容。
服务变更:我们有权根据业务发展需要,调整、变更或终止部分服务内容,并将以网站公告、公众号消息等方式提前通知。
禁止行为:您在使用服务时不得实施以下行为:
利用技术手段批量爬取、下载、转存知识库内容;
将知识库内容用于商业目的或未经授权地向第三方传播;
干扰本网站正常运行或侵犯其他用户合法权益;
发布违法违规信息或从事违反公序良俗的活动。
四、 知识产权声明
权利归属:本网站知识库中的排版设计、软件代码等内容的知识产权均归【公司全称】或原权利人所有,受《中华人民共和国著作权法》等法律保护。
有限许可:本网站授予会员一项非独占、不可转让、不可转授权的普通许可,仅限于个人学习、研究之目的在线查阅知识库内容。
侵权追责:未经书面许可,任何单位或个人不得以任何形式复制、转载、摘编、镜像、汇编或以其他方式使用上述内容。一经发现,我们保留追究其法律责任的权利。
五、 个人信息保护
我们重视对您个人信息的保护。关于我们如何收集、使用、存储和保护您的个人信息,请单独阅读 《隐私政策》。
您通过微信公众号授权或手机号验证所提供的信息,我们将严格按照《个人信息保护法》的规定处理,仅用于身份识别、服务提供及安全验证等必要用途。
您可以随时通过网站设置或联系客服行使查阅、更正、删除个人信息及撤回授权同意的权利。
六、 免责声明
内容准确性:知识库内容仅供参考,不构成专业建议。我们不对其完整性、准确性、时效性作任何明示或暗示的保证,您应自行判断并承担使用风险。
不可抗力:因自然灾害、政策法规变化、网络故障、第三方平台接口异常(如微信接口维护、运营商短信通道故障)等不可抗力导致的服务中断或延迟,我们不承担违约责任。
第三方链接:本网站可能包含指向第三方网站的链接,该等网站的内容和服务不受我们控制,请您自行甄别风险。
七、 违约责任
如您违反本协议约定,我们有权视情节采取警告、限制功能、暂停服务、注销账号等措施,并保留要求赔偿损失的权利。
如因您的违约行为导致我们遭受行政处罚、第三方索赔或商誉损失,您应承担全部赔偿责任(包括但不限于罚款、赔偿金、律师费、公证费等)。
八、 法律适用与争议解决
本协议的订立、执行和解释均适用中华人民共和国大陆地区法律。
因本协议产生的或与本协议有关的任何争议,双方应友好协商解决;协商不成的,任何一方均可向【公司所在地】有管辖权的人民法院提起诉讼。
九、 其他
本协议构成双方就本服务达成的完整协议,取代此前任何口头或书面约定。
本协议任一条款被认定为无效或不可执行的,不影响其他条款的效力。
我们对本协议享有最终解释权,并在法律允许的范围内保留随时修改的权利。修改后的协议一经公布即生效,继续使用服务即视为同意修订内容。