SAM-Med2D [论文]
</a>
<a src="https://img.shields.io/badge/Data-SAMed2D_20M-blue?logo=red" href="https://openxlab.org.cn/datasets/GMAI/SA-Med2D-20M"> <img src="https://img.shields.io/badge/Data-SAMed2D_20M-blue?logo=red">
<a src="https://img.shields.io/badge/cs.CV-2308.16184-b31b1b?logo=arxiv&logoColor=red" href="https://arxiv.org/abs/2308.16184"> <img src="https://img.shields.io/badge/cs.CV-2308.16184-b31b1b?logo=arxiv&logoColor=red">
<a src="https://img.shields.io/badge/WeChat-Group-green?logo=wechat" href="https://github.com/OpenGVLab/SAM-Med2D/blob/main/assets/SAM-Med2D_wechat_group.jpeg"> <img src="https://img.shields.io/badge/WeChat-Group-green?logo=wechat">
</a>
<a target="_blank" href="https://colab.research.google.com/github/OpenGVLab/SAM-Med2D/blob/main/predictor_example.ipynb">
<img src="https://yellow-cdn.veclightyear.com/835a84d5/a759ff59-b7d6-4f5f-b0dc-4e7eaaa4e302.svg" alt="在Colab中打开"/>
</a>
🔥🔥🔥
🌤️ 亮点
- 🏆 收集并整理了迄今为止最大的医学图像分割数据集(460万张图像和1970万个掩码),用于模型训练。
- 🏆 基于分割任意物体模型(SAM)进行最全面的微调。
- 🏆 在大规模数据集上对SAM-Med2D进行全面评估。
🔥 更新
- (2023.12.05) 我们在Hugging Face平台上开放了数据集的下载
- (2023.11.23) 我们发布了SA-Med2D-20M数据集
- (2023.11.21) 我们发布了介绍SA-Med2D-20M数据集的文章
- (2023.10.24) 我们现在发布了SAM-Med3D,专注于3D医学影像分割
- (2023.09.14) 训练代码发布
- (2023.09.02) 测试代码发布
- (2023.08.31) 预训练模型发布
- (2023.08.31) 论文发布
- (2023.08.26) 在线演示发布
👉 数据集
SAM-Med2D在一个包含460万张图像和1970万个掩码的数据集上进行训练和测试。这个数据集涵盖了10种医学数据模态、4种解剖结构+病变,以及31个主要人体器官。据我们所知,这是目前在数量和类别覆盖范围方面最大、最多样化的医学图像分割数据集。
<p align="center"><img width="800" alt="image" src="https://yellow-cdn.veclightyear.com/835a84d5/99b0ce08-6c1c-42b9-ae4c-2cacec9868d8.png"></p>
👉 框架
SAM-Med2D的流程。我们冻结图像编码器,并在每个Transformer块中引入可学习的适配器层,以获取医学领域的特定知识。我们使用点、边界框和掩码信息对提示编码器进行微调,同时通过交互式训练更新掩码解码器的参数。
<p align="center"><img width="800" alt="image" src="https://yellow-cdn.veclightyear.com/835a84d5/47c4cf86-4b6d-4959-b0ee-9c48258cd7fe.png"></p>
👉 结果
<table>
<caption align="center">不同方法在测试集上的定量比较:</caption>
<thead>
<tr>
<th>模型</th>
<th>分辨率</th>
<th>边界框 (%)</th>
<th>1点 (%)</th>
<th>3点 (%)</th>
<th>5点 (%)</th>
<th>FPS</th>
<th>检查点</th>
</tr>
</thead>
<tbody>
<tr>
<td align="center">SAM</td>
<td align="center">$256\times256$</td>
<td align="center">61.63</td>
<td align="center">18.94</td>
<td align="center">28.28</td>
<td align="center">37.47</td>
<td align="center">51</td>
<td align="center"><a href="https://drive.google.com/file/d/1_U26MIJhWnWVwmI5JkGg2cd2J6MvkqU-/view?usp=drive_link">官方</a></td>
</tr>
<tr>
<td align="center">SAM</td>
<td align="center">$1024\times1024$</td>
<td align="center">74.49</td>
<td align="center">36.88</td>
<td align="center">42.00</td>
<td align="center">47.57</td>
<td align="center">8</td>
<td align="center"><a href="https://drive.google.com/file/d/1_U26MIJhWnWVwmI5JkGg2cd2J6MvkqU-/view?usp=drive_link">官方</a></td>
</tr>
<tr>
<td align="center">FT-SAM</td>
<td align="center">$256\times256$</td>
<td align="center">73.56</td>
<td align="center">60.11</td>
<td align="center">70.95</td>
<td align="center">75.51</td>
<td align="center">51</td>
<td align="center"><a href="https://drive.google.com/file/d/1J4qQt9MZZYdv1eoxMTJ4FL8Fz65iUFM8/view?usp=drive_link">FT-SAM</a></td>
</tr>
<tr>
<td align="center">SAM-Med2D</td>
<td align="center">$256\times256$</td>
<td align="center">79.30</td>
<td align="center">70.01</td>
<td align="center">76.35</td>
<td align="center">78.68</td>
<td align="center">35</td>
<td align="center"><a href="https://drive.google.com/file/d/1ARiB5RkSsWmAB_8mqWnwDF8ZKTtFwsjl/view?usp=drive_link">SAM-Med2D</a></td>
</tr>
</tbody>
</table>
百度云链接: https://pan.baidu.com/s/1HWo_s8O7r4iQI6irMYU8vQ?pwd=dk5x
提取码: dk5x
<table>
<caption align="center">在9个MICCAI2023数据集上的泛化验证,其中"*"表示在测试阶段去掉SAM-Med2D的适配器层:</caption>
<thead>
<tr>
<th rowspan="2">数据集</th>
<th colspan="3">边界框提示 (%)</th>
<th colspan="3">1点提示 (%)</th>
</tr>
<tr>
<th>SAM</th>
<th>SAM-Med2D*</th>
<th>SAM-Med2D</th>
<th>SAM</th>
<th>SAM-Med2D*</th>
<th>SAM-Med2D</th>
</tr>
</thead>
<tbody>
<tr>
<td align="center"><a href="https://www.synapse.org/#!Synapse:syn51236108/wiki/621615">CrossMoDA23</a></td>
<td align="center">78.12</td>
<td align="center">86.26</td>
<td align="center">88.42</td>
<td align="center">33.84</td>
<td align="center">65.85</td>
<td align="center">85.26</td>
</tr>
<tr>
<td align="center"><a href="https://kits-challenge.org/kits23/">KiTS23</a></td>
<td align="center">81.52</td>
<td align="center">86.14</td>
<td align="center">89.89</td>
<td align="center">31.36</td>
<td align="center">56.67</td>
<td align="center">83.71</td>
</tr>
<tr>
<td align="center"><a href="https://codalab.lisn.upsaclay.fr/competitions/12239#learn_the_details">FLARE23</a></td>
<td align="center">73.20</td>
<td align="center">77.18</td>
<td align="center">85.09</td>
<td align="center">19.87</td>
<td align="center">32.01</td>
<td align="center">77.17</td>
</tr>
<tr>
<td align="center"><a href="https://atlas-challenge.u-bourgogne.fr/">ATLAS2023</a></td>
<td align="center">76.98</td>
<td align="center">79.09</td>
<td align="center">82.59</td>
<td align="center">29.07</td>
<td align="center">45.25</td>
<td align="center">64.76</td>
</tr>
<tr>
<td align="center"><a href="https://multicenteraorta.grand-challenge.org/">SEG2023</a></td>
<td align="center">64.82</td>
<td align="center">81.85</td>
<td align="center">85.09</td>
<td align="center">21.15</td>
<td align="center">34.71</td>
<td align="center">72.08</td>
</tr>
<tr>
<td align="center"><a href="https://lnq2023.grand-challenge.org/lnq2023/">LNQ2023</a></td>
<td align="center">53.02</td>
<td align="center">57.37</td>
<td align="center">58.01</td>
<td align="center">7.05</td>
<td align="center">7.21</td>
<td align="center">37.64</td>
</tr>
<tr>
<td align="center"><a href="https://codalab.lisn.upsaclay.fr/competitions/9804">CAS2023</a></td>
<td align="center">61.53</td>
<td align="center">78.20</td>
<td align="center">81.10</td>
<td align="center">22.75</td>
<td align="center">46.85</td>
<td align="center">78.46</td>
</tr>
<tr>
<td align="center"><a href="https://tdsc-abus2023.grand-challenge.org/Dataset/">TDSC-ABUS2023</a></td>
<td align="center">64.31</td>
<td align="center">69.00</td>
<td align="center">66.14</td>
<td align="center">8.24</td>
<td align="center">18.98</td>
<td align="center">43.55</td>
</tr>
<tr>
<td align="center"><a href="https://toothfairy.grand-challenge.org/toothfairy/">ToothFairy2023</a></td>
<td align="center">43.40</td>
<td align="center">39.13</td>
<td align="center">41.23</td>
<td align="center">5.47</td>
<td align="center">5.27</td>
<td align="center">12.93</td>
</tr>
<tr>
<td align="center">加权总和</td>
<td align="center">73.49</td>
<td align="center">77.67</td>
<td align="center">84.88</td>
<td align="center">20.88</td>
<td align="center">34.30</td>
<td align="center">76.63</td>
</tr>
</tbody>
</table>
论文错误
在我们的原始论文中,我们承认表4中呈现的测试数据存在异常。我们已经对这个项目进行了数据更新,并更正了表4中的值。我们向读者保证,我们的研究团队已经意识到这个问题,并将在下一个版本中更新表4。对于可能造成的任何不便,我们深表歉意。
👉 可视化
<p align="center"><img width="800" alt="image" src="https://yellow-cdn.veclightyear.com/835a84d5/05a91c1a-7545-4807-97e2-e2bed11431c0.png"></p>
👉 训练
准备你自己的数据集,参考SAM-Med2D/data_demo中的样本,根据你的具体场景进行替换。在运行train.py之前,你需要生成image2label_train.json文件。
如果你想使用混合精度训练,请安装Apex。如果你不想安装Apex,可以注释掉from apex import amp这一行,并将use_amp设置为False。
cd ./SAM-Med2D
python train.py
- work_dir:指定训练过程的工作目录。默认值为
workdir。
- image_size:默认值为256。
- mask_num:指定一张图像对应的掩码数量,默认值为5。
- data_path:数据集目录,例如:
data_demo。
- resume:预训练权重文件,如果存在则忽略
sam_checkpoint。
- sam_checkpoint:加载sam检查点。
- iter_point:掩码解码器迭代运行次数。
- multimask:决定是否输出多个掩码。默认值为True。
- encoder_adapter:是否微调Adapter层,仅微调解码器时设置为False。
- use_amp:设置是否使用混合精度训练。
👉 测试
准备您自己的数据集,并参考 SAM-Med2D/data_demo 中的样本,根据您的具体场景进行替换。在运行 test.py 之前,您需要生成 label2image_test.json 文件。
cd ./SAM-Med2D
python test.py
- work_dir:指定测试过程的工作目录。默认值为
workdir。
- batch_size:1。
- image_size:默认值为 256。
- boxes_prompt:使用边界框提示获取分割结果。
- point_num:指定点的数量。默认值为 1。
- iter_point:指定点提示的迭代次数。
- sam_checkpoint:加载 sam 或 sammed 检查点。
- encoder_adapter:如果使用 SAM-Med2D 的预训练权重,则设置为 True。
- save_pred:是否保存预测结果。
- prompt_path:是否有固定的提示文件?如果没有,值为 None,将在最新预测中自动生成。
👉 部署
导出为 ONNX
python3 scripts/export_onnx_encoder_model.py --sam_checkpoint /path/to/sam-med2d_b.pth --output /path/to/sam-med2d_b.encoder.onnx --model-type vit_b --image_size 256 --encoder_adapter True
python3 scripts/export_onnx_model.py --checkpoint /path/to/sam-med2d_b.pth --output /path/to/sam-med2d_b.decoder.onnx --model-type vit_b --return-single-mask
# cd examples/SAM-Med2D-onnxruntime
python3 main.py --encoder_model /path/to/sam-med2d_b.encoder.onnx --decoder_model /path/to/sam-med2d_b.decoder.onnx
🚀 尝试 SAM-Med2D
🗓️ 进行中
🎫 许可证
本项目采用 Apache 2.0 许可证。
💬 讨论组
如果您对 SAM-Med2D 有任何问题,请添加此微信 ID 到微信群讨论:
<p align="center"><img width="300" alt="image" src="https://yellow-cdn.veclightyear.com/835a84d5/48770dce-f0d6-49cb-ad76-57c42c5c1196.png"></p>
🤝 致谢
👋 招聘和全球合作
参考文献
@misc{cheng2023sammed2d,
title={SAM-Med2D},
author={Junlong Cheng and Jin Ye and Zhongying Deng and Jianpin Chen and Tianbin Li and Haoyu Wang and Yanzhou Su and
Ziyan Huang and Jilong Chen and Lei Jiangand Hui Sun and Junjun He and Shaoting Zhang and Min Zhu and Yu Qiao},
year={2023},
eprint={2308.16184},
archivePrefix={arXiv},
primaryClass={cs.CV}
}
@misc{ye2023samed2d20m,
title={SA-Med2D-20M Dataset: Segment Anything in 2D Medical Imaging with 20 Million masks},
author={Jin Ye and Junlong Cheng and Jianpin Chen and Zhongying Deng and Tianbin Li and Haoyu Wang and Yanzhou Su and Ziyan Huang and Jilong Chen and Lei Jiang and Hui Sun and Min Zhu and Shaoting Zhang and Junjun He and Yu Qiao},
year={2023},
eprint={2311.11969},
archivePrefix={arXiv},
primaryClass={eess.IV}
}