第三章: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

如下:

参数是为了保留结果:

  • 19
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

听风吹等浪起

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

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

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

打赏作者

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

抵扣说明:

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

余额充值