企业百度网站怎么做,专业的移动网站建设公司排名,企业网站建设三网合一,构建一个网站******************************* #x1f469;⚕️ 医学影像相关直达#x1f468;⚕️******************************* CV | SAM在医学影像上的模型调研【20240207更新版】-CSDN博客 CV | Segment Anything论文详解及代码实现 本文主要讲解Medical-SAM-Adapter论文及项… ******************************* ⚕️ 医学影像相关直达⚕️******************************* CV | SAM在医学影像上的模型调研【20240207更新版】-CSDN博客 CV | Segment Anything论文详解及代码实现 本文主要讲解Medical-SAM-Adapter论文及项目实现~ 2023.12.29第七版_Medical SAM Adapter:Adapting Segment Anything Model for Medical Image Segmentation 论文地址2304.12620.pdf (arxiv.org) 论文代码KidsWithTokens/Medical-SAM-Adapter: Adapting Segment Anything Model for Medical Image Segmentation (github.com) 1.论文详解
摘要
Segment Anything Model SAM 在图像分割领域广受欢迎因为它在各种分割任务中具有令人印象深刻的功能和基于提示的界面。然而最近的研究和个别实验表明由于缺乏医学特定知识SAM在医学图像分割方面表现不佳。这就提出了一个问题即如何增强SAM对医学图像的分割能力。在本文中没有对SAM模型进行微调而是提出了医疗SAM适配器Med-SA它使用一种轻巧而有效的适应技术将特定领域的医学知识整合到分割模型中。在Med-SA中提出了空间深度转置SD-Trans来实现2D SAM与3D医学图像的适应以及超提示适配器HyP-Adpt来实现快速条件适应。对不同图像模态的 17 个医学图像分割任务进行了综合评估实验。Med-SA 的性能优于几种最先进的 SOTA 医学图像分割方法而仅更新了 2% 的参数。
方法
主要讲解方法部分
论文基于SAM,依旧使用图像编码器、提示编码器和mask解码器。
图像编码器基于标准ViT被MAE训练这里使用ViT_h/16变种有14×14窗口的注意力和4个等间距的全局注意力。图像编码器的输出是对输入图像的16倍下采样嵌入。
提示编码器可以是稀疏的点、框、文本或密集的mask本文中只关注稀疏提示编码器它将点和框表示为位置编码并对每个提示类型进行学习嵌入。
mask解码器是一个Transformer解码器包括动态掩模预测头。
SAM 使用双向交叉注意一个用于提示到图像的嵌入另一个用于图像到提示的嵌入在每个块中学习提示和图像嵌入之间的相互作用。在运行了两个块之后SAM 上采样嵌入图像MLP 将输出标记映射到一个动态线性分类器从而预测给定图像的目标掩码。
Med-SA架构(Med-SA architecture)
为了对 SAM 架构进行微调以适应医学图像分割本文没有完全调整所有参数而是冻结了预先训练好的 SAM 参数并在架构的特定位置插入了 Adapter 模块。
Adapter 是一个 bottleneck 结构它依次包括下投影、ReLU 激活和上投影。下投影使用简单的 MLP 层将给定的嵌入压缩到较小的维度上投影使用另一个 MLP 层将压缩的嵌入扩展回其原始维度. (在第一版里叫MSA,第七版里叫Med-SA)
2D Medical Image Adaption 在 SAM 编码器中本文为每个 ViT 块部署了两个 Adapter。
修改标准 ViT block (a)得到 2D Medical Image Adaption (b)
将第一个 Adapter 放在多头注意力之后、残差连接之前将第二个 Adapter 放在多头注意力之后 MLP 层的残差路径上
紧接着第二个 Adapter 之后按照一定的比例系数对嵌入进行了缩放 引入缩放因子 s 是为了平衡与任务无关的特征和与任务有关的特征Decoder Adaption 在 SAM 解码器中本文为每个 ViT 块部署了Adapter把这个叫做Hyper-Prompting Adapter 第一个 Adapter 部署在 prompt-to-image 嵌入的多头交叉注意之后并添加了提示嵌入的残差 本文使用了另一种向下投影来压缩提示嵌入并在 ReLU 激活之前将其添加到 Adapter 的嵌入上 有助于 Adapter 根据提示信息调整参数使其更加灵活和通用于不同的模式和下游任务 第二个 Adapter 的部署方式与编码器完全相同用于调整 MLP 增强嵌入 第三个 Adapter 部署在图像嵌入的残差连接之后以提示交叉注意 另一个残差连接和层归一化在自适应后连接以输出最终结果SD-Trans 尽管 SAM 可以应用于病灶的每个切片以获得最终的分割但是它没有考虑深度维中的相关性
本文提出了一种新的适配方法其灵感来源于 image-to-video adaptation具体架构如 (c)
在每个 block 中本文将注意力操作分成两个分支空间分支和深度分支
2.项目实现
2.0.环境设置
Python3.8docker容器Ubuntu
git clone https://github.com/KidsWithTokens/Medical-SAM-Adaptercd Medical-SAM-Adapterwget https://dl.fbaipublicfiles.com/segment_anything/sam_vit_b_01ec64.pth# 自定义req.txt,如本文A1
pip install -r req.txt
因为我没有使用conda新建虚拟环境自己新建了一个requestion.txt,如【A1】,按照作者要求是torch版本是1.12我是1.14并删掉了安装torch的命令。
2.1.数据集设置 官网ISIC Challenge (isic-archive.com) 新建文件夹data/isic
#下载数据集
wget https://isic-challenge-data.s3.amazonaws.com/2016/ISBI2016_ISIC_Part1_Training_Data.zip#wget https://isic-challenge-data.s3.amazonaws.com/2016/ISBI2016_ISIC_Part1_Training_GroundTruth.zipwget https://isic-challenge-data.s3.amazonaws.com/2016/ISBI2016_ISIC_Part1_Test_Data.zip#wget https://isic-challenge-data.s3.amazonaws.com/2016/ISBI2016_ISIC_Part1_Test_GroundTruth.zip#下载csv文件
https://github.com/KidsWithTokens/MedSegDiff/blob/master/data/isic_csv/ISBI2016_ISIC_Part3B_Test_GroundTruth.csvhttps://github.com/KidsWithTokens/MedSegDiff/blob/master/data/isic_csv/ISBI2016_ISIC_Part3B_Training_GroundTruth.csv
进入文件夹解压缩 unzip *.zip
格式如图 2.2.训练
训练数据集1ISIC2016
python train.py -net sam -mod sam_adpt -exp_name msa_isic -sam_ckpt ./checkpoint/sam/sam_vit_b_01ec64.pth -image_size 1024 -b 32 -dataset isic -data_path ./data/isic 一张单卡24GGPU的情况batch size为2,17929MiB,如果现存较小改小batch size或者image size. 100个epoch时IOU:0.85,DICE:0.91
采样结果 训练数据集2
python train.py -net sam -mod sam_adpt -exp_name msa_kv
asir -sam_ckpt ./sam_vit_b_01ec64.pth -image_size 1024 -b 32 -dataset Kvasir-SEG -data_path /workspace/SAM
/datasets/Kvasir-SEG
3.代码详解
3.1.论文的核心块adapter_block.py
位置Medical-SAM-Adapter/models/ImageEncoder/vit/adapter_block.py
基于原本的transformer块添加窗口注意力和残差传播块流程如下
对输入张量 x 进行归一化操作。进行注意力计算包括多头注意力机制和相对位置嵌入。2D图像的情况使用 Space Adapter 处理注意力计算的输出。如果数据是 3D 则对输入进行额外的处理并将其与 Space Adapter 处理后的结果相加。对处理后的张量再次进行归一化操作。将张量传递给 MLP 模块并加上 MLP Adapter 处理后的结果的 scaled version。将上述两项相加并返回最终的输出张量。
3.2.
PS
【PS1】ValueError: num_samples should be a positive integer value, but got num_samples0 csv文件问题 重新下载csv文件就可以啦不能使用wget方式下载
【PS2】 TypeError: unsupported operand type(s) for %: int and NoneType 或者出现 ZeroDivisionError: integer division or modulo by zero错误时
训练命令需要填写或修改vis自定义参数默认是None,不能填写0修改为1 扩展
【A1】pip 安装第三方库
aiosignal1.2.0
alembic1.10.4
appdirs1.4.4
astor0.8.1
asttokens2.2.1
backcall0.2.0
beautifulsoup44.12.2
blinker1.6.2
cachetools4.2.2
certifi2022.12.7
charset-normalizer2.0.4
click8.1.3
cmaes0.9.1
colorama0.4.6
colorlog6.7.0
contextlib221.6.0
coverage6.5.0
coveralls3.3.1
cucim23.4.1
cycler0.11.0
databricks-cli0.17.7
docker6.1.1
docopt0.6.2
einops0.6.1
entrypoints0.4
exceptiongroup1.1.1
executing1.2.0
filelock3.12.0
fire0.5.0
flask2.3.2
fonttools4.25.0
future0.18.3
gdown4.7.1
gitdb4.0.10
gitpython3.1.31
google-auth2.6.0
google-auth-oauthlib0.4.4
greenlet2.0.2
gunicorn20.1.0
h5py3.8.0
huggingface-hub0.14.1
iniconfig2.0.0
ipython
itk5.3.0
itk-core5.3.0
itk-filtering5.3.0
itk-io5.3.0
itk-numerics5.3.0
itk-registration5.3.0
itk-segmentation5.3.0
itsdangerous2.1.2
jedi0.18.2
jinja23.1.2
json-tricks3.16.1
jsonschema4.17.3
kornia0.4.1
lmdb1.4.1
lucent0.1.0
mako1.2.4
mlflow2.3.1
nibabel5.1.0
ninja1.11.1
nni2.10
nptyping2.5.0
opencv-python4.7.0.72
openslide-python1.1.2
optuna3.1.1
partd1.2.0
pluggy1.0.0
pooch1.4.0
prettytable3.7.0
prompt-toolkit3.0.38
psutil5.9.5
pyarrow11.0.0
pyasn10.4.8
pyasn1-modules0.2.8
pydicom2.3.1
pygments2.15.1
pynrrd1.0.0
pyqt5-sip12.11.0
pyrsistent0.19.3
pytest7.3.1
pytest-mock3.10.0
pythonwebhdfs0.2.3
pytorch-ignite0.4.10
querystring-parser1.2.4
regex2023.5.5
requests-oauthlib1.3.0
responses0.23.1
rsa4.7.2
safetensors0.4.1
schema0.7.5
simplejson3.19.1
smmap5.0.0
soupsieve2.4.1
scikit-image
sqlalchemy2.0.12
sqlparse0.4.4
tabulate0.9.0
tensorboardx2.2
termcolor2.3.0
threadpoolctl2.2.0
tifffile2021.7.2
timm0.9.12
tokenizers0.12.1
tomli2.0.1torch-lucent0.1.8traitlets5.9.0
transformers4.21.3
typeguard3.0.2
types-pyyaml6.0.12.9
wcwidth0.2.6
websocket-client1.5.1
websockets11.0.3
werkzeug2.3.4