第三章:SAM-Med2D大模型复现

1、SAM-Med2D 模型介绍

SAM-Med2D论文地址:[2308.16184] SAM-Med2D (arxiv.org)

代码地址:https://github.com/OpenGVLab/SAM-Med2D

SAM-Med2D模型:

  • 收集并整理了迄今为止最大的医学图像分割数据集(4.6M 图像和 19.7M mask)用于训练模型
  • 基于 Segment Anything Model (SAM) 的最全面的微调。
  • SAM-Med2D在大规模数据集上的综合评估。

SAM-Med2D 在包含 4.6M 图像和 19.7M 掩码的数据集上进行训练和测试。该数据集涵盖 10 种医学数据模态、4 种解剖结构 + 病变、31 种人体主要器官。就数量和类别覆盖范围而言,这是目前最大、最多样化的医学图像分割数据集。

SAM-Med2D 在github上介绍很多,这里不多赘述

消融试验:在测试集上的比较

对 9 个MICCAI2023数据集进行泛化验证 

可视化效果:

2、官方的demo数据集介绍

下载后的目录如下:

这里还需要下载预训练权重:sam-med2d_b.pth - Google 云端硬盘

放在这里

2.1 关于数据集介绍

虽然上述操作完,可以直接train了,不过为了后面更换数据集,这里对demo数据集进行简单介绍

目录如下:

以往的mask是在一张图片里面的,用不同的灰度值代表不同的分割类别

这里就是独立出来了,把每个灰度值变成新的二值图像(255 0),有几类就有几张对应的mask图像

就比如[0 0 0 1 1 2 2 ],假设这是一张图片

这里需要变成 [0 0 0 255 255 0 0]和 [0 0 0 0 0 255 255]两张mask模板

  • 官方使用的image和mask都是png格式的,更换数据集的时候最好遵守
  • 官方的mask命名是 _类 实现

怎么定义训练集和测试集?json文件就体现了作用

2.2 训练集文件

其中 image2label_train.json 如下:

其实就是image:【mask1,mask2,mask3】 所以前面说命名无所谓,这里定义好就行

{
    "data_demo/images/amos_0006_90.png": [
        "data_demo/masks/amos_0006_90_liver_000.png",
        "data_demo/masks/amos_0006_90_spleen_000.png",
        "data_demo/masks/amos_0006_90_inferior_vena_cava_000.png",
        "data_demo/masks/amos_0006_90_aorta_000.png"
    ],
    "data_demo/images/s0114_111.png": [
        "data_demo/masks/s0114_111_lung_middle_lobe_right_000.png",
        "data_demo/masks/s0114_111_heart_ventricle_right_000.png",
        "data_demo/masks/s0114_111_lung_lower_lobe_left_000.png",
        "data_demo/masks/s0114_111_rib_left_9_000.png",
        "data_demo/masks/s0114_111_vertebrae_T9_000.png",
        "data_demo/masks/s0114_111_heart_ventricle_left_000.png",
        "data_demo/masks/s0114_111_lung_lower_lobe_right_000.png",
        "data_demo/masks/s0114_111_lung_upper_lobe_left_000.png",
        "data_demo/masks/s0114_111_aorta_000.png",
        "data_demo/masks/s0114_111_autochthon_right_000.png",
        "data_demo/masks/s0114_111_autochthon_left_000.png",
        "data_demo/masks/s0114_111_heart_myocardium_000.png",
        "data_demo/masks/s0114_111_heart_atrium_right_000.png",
        "data_demo/masks/s0114_111_heart_atrium_left_000.png",
        "data_demo/masks/s0114_111_rib_right_9_000.png"
    ]
}

2.3 测试集文件

其中 label2image_test.json 如下:

其实 mask:image 

{
    "data_demo/masks/amos_0004_75_inferior_vena_cava_000.png": "data_demo/images/amos_0004_75.png",
    "data_demo/masks/amos_0004_75_liver_000.png": "data_demo/images/amos_0004_75.png",
    "data_demo/masks/amos_0004_75_aorta_000.png": "data_demo/images/amos_0004_75.png",
    "data_demo/masks/s0619_32_femur_right_000.png": "data_demo/images/s0619_32.png",
    "data_demo/masks/s0619_32_gluteus_maximus_left_000.png": "data_demo/images/s0619_32.png",
    "data_demo/masks/s0619_32_hip_left_000.png": "data_demo/images/s0619_32.png",
    "data_demo/masks/s0619_32_colon_000.png": "data_demo/images/s0619_32.png",
    "data_demo/masks/s0619_32_hip_right_000.png": "data_demo/images/s0619_32.png",
    "data_demo/masks/s0619_32_hip_right_001.png": "data_demo/images/s0619_32.png",
    "data_demo/masks/s0619_32_hip_left_001.png": "data_demo/images/s0619_32.png",
    "data_demo/masks/s0619_32_gluteus_maximus_right_000.png": "data_demo/images/s0619_32.png"
}

3、训练train脚本

train脚本参数很多,其他的都很好理解,就是这个mask_num不知道啥意思,等到更换数据集的时候再调试调试看看吧

说了那么多,其实再github上下载好源码,然后预处理权重这两个文件后,直接运行train即可,不需要改任何参数!!

训练完可以再workdir查看训练结果:有这些值就可以绘图了

4、测试test脚本

test好像也不用改,具体的参数含义可以自己查看,运行如下

python test.py --save_pred True --sam_checkpoint workdir/models/sam-med2d/epoch15_sam.pth

如下:

参数是为了保留结果:

1. 概述 SAM-Med 2D视觉大模型是指一种用于医疗图像分析的深度学习模型,专门用于实现脊椎图像的分割任务。该模型能够自动识别并分割出脊椎影像中的各个部分,为医疗诊断提供辅助。本文档介绍了如何复现、训练SAM-Med 2D模型,并应用到自定义的数据集上。 2. 模型复现 复现一个深度学习模型意味着重现模型的训练过程和结果,通常需要具备以下条件: - 模型结构:详细描述了SAM-Med 2D模型的网络架构,包括各层的配置参数和激活函数。 - 训练数据集:涉及RawData目录下提供的数据,这些数据应包含未处理的脊椎影像。 - 训练脚本:提供一个训练脚本,用于设置训练参数,如学习率、批量大小、优化器等,并执行模型训练过程。 - 训练细节:可能还包括预处理步骤,如归一化、裁剪、增强等,以及模型的保存、加载和验证策略。 3. 训练自定义数据集 为了训练SAM-Med 2D模型使用特定的数据集,需要执行以下步骤: - 数据准备:确保自定义数据集符合模型训练的要求,可能需要按照RawData下的格式组织数据。 - 数据预处理:运行process脚本,这个脚本可能会执行数据的转换、格式化等步骤,以生成模型训练所需的数据格式。 - 训练执行:使用train脚本启动训练过程。训练过程中会用到之前生成的数据,按照模型的配置进行参数更新和优化。 4. 模型使用和评估 文档中提及了使用doc文件查看模型的分割和预测结果,这可能包括: - 结果展示:通过可视化的方式展示模型对脊椎图像的分割效果。 - 评估指标:提供一些量化评估指标(如准确度、召回率、Dice系数等),以评估模型在自定义数据集上的性能。 - 模型部署:对于将模型部署到实际的医疗诊断中的方法和步骤的描述。 5. 标签解析 - 数据集:指用于训练和测试模型的脊椎影像集合,这些数据集应该是标注好的,以区分不同的脊椎部分。 - 分割:是指在图像处理中将图像分割成多个部分,特别是将感兴趣的区域(如脊椎)从背景中分离出来。 - 大模型:通常指的是参数量大、结构复杂的深度学习模型,这类模型因其复杂性通常需要大量的数据和计算资源进行训练。 6. 文件结构 - SAM-Med2D:这是压缩包子文件的名称,可能包含了多个子目录和文件,用于支持模型的复现和训练。 - RawData:包含原始脊椎影像数据。 - process脚本:用于将RawData转化为模型训练可以接受的数据格式。 - train脚本:用于启动模型训练过程。 - doc文件:可能包含模型的分割和预测结果、训练细节和评估结果的文档。 7. 结论 复现和训练SAM-Med 2D视觉大模型涉及一系列复杂步骤,从数据的准备、预处理、到训练和评估。这些步骤共同确保了模型能够在特定任务上达到预期的性能。通过这些流程,研究人员和开发者能够更好地理解和利用深度学习技术进行医学图像分析。
### SAM-Med2D 项目复现方法 #### 数据准备 为了成功复现SAM-Med2D模型,需收集并整理一个大型医学图像分割数据集。该数据集应包含尽可能多的不同病例和成像模式下的高质量标注图片。具体来说,已有的最大规模的数据集包含了4.6百万张图像和19.7百万个掩码[^2]。 #### 环境配置 确保安装了必要的依赖库和支持软件环境。这通常涉及到Python版本的选择、PyTorch框架及其扩展包的设置等操作。建议参照官方文档或社区指南来进行具体的环境搭建工作。 #### 模型构建与训练 基于Segment Anything Model (SAM),通过微调的方式创建适用于医学影像分析的新模型——即SAM-Med2D。此过程涉及调整网络结构参数、定义损失函数以及优化算法等方面的内容。值得注意的是,在实际编码过程中可能会遇到一些技术难题,比如因前景区域过小而导致除数为零的问题;对此可以通过修改源代码逻辑加以解决[^4]。 ```python import torch from segment_anything import sam_model_registry, SamPredictor device = "cuda" if torch.cuda.is_available() else "cpu" sam_checkpoint = "./checkpoints/sam_vit_h_4b8939.pth" model_type = "vit_h" sam = sam_model_registry[model_type](checkpoint=sam_checkpoint) sam.to(device=device) predictor = SamPredictor(sam) ``` #### 测试验证 完成上述步骤之后,应当利用预留出来的测试样本对最终得到的结果进行全面检验。可以考虑采用多种评价指标来衡量系统的整体性能,并与其他现有解决方案做对比研究以证明改进的有效性。
评论 14
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

听风吹等浪起

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

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

抵扣说明:

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

余额充值