🚀 MedSAM模型卡片
MedSAM是針對醫學領域對 SAM 進行微調後的版本。它基於作者在2023年7月發佈的論文、代碼和預訓練模型構建,能夠在醫學圖像分割任務中發揮重要作用。
✨ 主要特性
- 基於大規模醫學圖像分割數據集進行訓練,該數據集包含來自不同公開來源的1,090,486個圖像 - 掩碼對。
- 圖像 - 掩碼對涵蓋15種成像模式和30多種癌症類型。
- 以帶有ViT - Base主幹的預訓練SAM模型進行初始化。
- 在訓練過程中凍結提示編碼器的權重,更新圖像編碼器和掩碼解碼器的權重。
📦 安裝指南
文檔中未提及具體安裝步驟,若有相關需求,可參考 MedSAM官方GitHub倉庫 。
💻 使用示例
基礎用法
import requests
import numpy as np
import matplotlib.pyplot as plt
from PIL import Image
from transformers import SamModel, SamProcessor
import torch
device = "cuda" if torch.cuda.is_available() else "cpu"
model = SamModel.from_pretrained("flaviagiammarino/medsam-vit-base").to(device)
processor = SamProcessor.from_pretrained("flaviagiammarino/medsam-vit-base")
img_url = "https://huggingface.co/flaviagiammarino/medsam-vit-base/resolve/main/scripts/input.png"
raw_image = Image.open(requests.get(img_url, stream=True).raw).convert("RGB")
input_boxes = [95., 255., 190., 350.]
inputs = processor(raw_image, input_boxes=[[input_boxes]], return_tensors="pt").to(device)
outputs = model(**inputs, multimask_output=False)
probs = processor.image_processor.post_process_masks(outputs.pred_masks.sigmoid().cpu(), inputs["original_sizes"].cpu(), inputs["reshaped_input_sizes"].cpu(), binarize=False)
def show_mask(mask, ax, random_color):
if random_color:
color = np.concatenate([np.random.random(3), np.array([0.6])], axis=0)
else:
color = np.array([251/255, 252/255, 30/255, 0.6])
h, w = mask.shape[-2:]
mask_image = mask.reshape(h, w, 1) * color.reshape(1, 1, -1)
ax.imshow(mask_image)
def show_box(box, ax):
x0, y0 = box[0], box[1]
w, h = box[2] - box[0], box[3] - box[1]
ax.add_patch(plt.Rectangle((x0, y0), w, h, edgecolor="blue", facecolor=(0, 0, 0, 0), lw=2))
fig, ax = plt.subplots(1, 2, figsize=(10, 5))
ax[0].imshow(np.array(raw_image))
show_box(input_boxes, ax[0])
ax[0].set_title("Input Image and Bounding Box")
ax[0].axis("off")
ax[1].imshow(np.array(raw_image))
show_mask(mask=probs[0] > 0.5, ax=ax[1], random_color=False)
show_box(input_boxes, ax[1])
ax[1].set_title("MedSAM Segmentation")
ax[1].axis("off")
plt.show()

📚 詳細文檔
模型描述
MedSAM在一個大規模醫學圖像分割數據集上進行訓練,該數據集包含從不同公開來源收集的1,090,486個圖像 - 掩碼對。這些圖像 - 掩碼對涵蓋15種成像模式和30多種癌症類型。
MedSAM以帶有ViT - Base主幹的預訓練SAM模型進行初始化。在訓練過程中,提示編碼器的權重被凍結,而圖像編碼器和掩碼解碼器的權重則進行更新。訓練使用AdamW優化器,學習率為10−4,權重衰減為0.01,共進行100個epoch,批次大小為160。
額外信息
許可信息
作者已根據 Apache許可證2.0 發佈了模型代碼和預訓練檢查點。
引用信息
@article{ma2023segment,
title={Segment anything in medical images},
author={Ma, Jun and Wang, Bo},
journal={arXiv preprint arXiv:2304.12306},
year={2023}
}
🔧 技術細節
MedSAM的訓練和優化過程涉及多個關鍵技術點:
- 數據集:使用大規模醫學圖像分割數據集,該數據集的多樣性(涵蓋多種成像模式和癌症類型)為模型提供了豐富的訓練樣本,有助於模型學習到更廣泛的醫學圖像特徵。
- 模型初始化:基於預訓練的SAM模型進行初始化,利用了預訓練模型在通用圖像任務上學習到的特徵表示,加快了模型在醫學領域的收斂速度。
- 訓練策略:凍結提示編碼器的權重,只更新圖像編碼器和掩碼解碼器的權重,這種策略可以在利用預訓練模型的基礎上,針對醫學圖像的特點對模型進行微調,提高模型在醫學圖像分割任務上的性能。
- 優化器和超參數:使用AdamW優化器,並設置了合適的學習率和權重衰減,有助於模型在訓練過程中穩定收斂,避免過擬合。
📄 許可證
本模型代碼和預訓練檢查點遵循 Apache許可證2.0 。