M3D 项目使用与启动指南

M3D 项目使用与启动指南

1. 项目介绍

M3D 是一个开源项目,致力于推进 3D 医学图像分析的多模态大规模语言模型。该项目包括以下几个部分:

  • M3D-Data:最大的开源 3D 医学数据集,包含 120K 图像-文本对和 662K 指令-响应对。
  • M3D-LaMed:具有 M3D-CLIP 预训练视觉编码器的多模态模型,能够执行图像-文本检索、报告生成、视觉问答、定位和分割等任务。
  • M3D-Bench:最全面的自动评估基准,涵盖 8 项任务。

2. 项目快速启动

以下是基于 Hugging Face 的模型快速启动步骤:

首先,安装必要的依赖:

pip install -r requirements.txt

然后,准备您的 3D 医学图像:

  1. 图像的形状需要处理为 1x32x256x256,可能需要调整大小和其他方法。
  2. 图像需要归一化到 0-1 范围,考虑使用 Min-Max 归一化。
  3. 图像格式需要转换为 npy。
  4. 虽然模型未在 2D 图像上训练,但理论上可以将 2D 图像插值到 1x32x256x256 形状作为输入。

接着,加载模型并生成结果:

import numpy as np
import torch
from transformers import AutoTokenizer, AutoModelForCausalLM
import simple_slice_viewer as ssv
import SimpleITK as sitk

# 设定设备和类型
device = torch.device('cuda')  # 'cpu' 或 'cuda'
dtype = torch.bfloat16  # 或 float16, float32

# 模型路径
model_name_or_path = 'GoodBaiBai88/M3D-LaMed-Phi-3-4B'

# 准备问题
question = "What is liver in this image? Please output the segmentation mask."

# 图像路径
image_path = "/Data/data/examples/example_03.npy"

# 加载模型和分词器
model = AutoModelForCausalLM.from_pretrained(model_name_or_path, torch_dtype=dtype, device_map='auto', trust_remote_code=True)
tokenizer = AutoTokenizer.from_pretrained(model_name_or_path, model_max_length=512, padding_side="right", use_fast=False, trust_remote_code=True)
model = model.to(device=device)

# 加载和处理图像
image_np = np.load(image_path)
image_pt = torch.from_numpy(image_np).unsqueeze(0).to(dtype=dtype, device=device)

# 生成指令和图像标记
image_tokens = "<im_patch>" * 256
input_txt = image_tokens + question
input_id = tokenizer(input_txt, return_tensors="pt")['input_ids'].to(device=device)

# 生成分割掩码
seg_logit = model.generate(image_pt, input_id, seg_enable=True, max_new_tokens=256, do_sample=True, top_p=0.9, temperature=1.0)
seg_mask = (torch.sigmoid(seg_logit) > 0.5) * 1.0

# 显示图像和分割结果
image = sitk.GetImageFromArray(image_np)
ssv.display(image)
seg = sitk.GetImageFromArray(seg_mask.cpu().numpy()[0])
ssv.display(seg)

3. 应用案例和最佳实践

(此部分将介绍一些实际的应用案例和项目的最佳实践,具体内容需根据项目实际应用情况进行编写。)

4. 典型生态项目

(此部分将介绍与 M3D 相关的典型生态项目,具体内容需根据项目生态情况进行编写。)

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值