Meta的Segment Anything Model (SAM)展示了它在圖像不同區域檢測物體的能力。這個模型的架構非常靈活,使用者可以透過不同的提示來引導它。在訓練過程中,它能夠分割出不在其數據集中的物體。
這些特性使得這個模型成為檢測和分割物體的高效工具,適用於各種目的。我們已經看到這個工具在自駕車和機器人等行業應用中的具體分割任務。這個模型的另一個重要細節是它能夠使用遮罩和邊界框來分割圖像,這在醫療用途上非常重要。
然而,Meta的Segment Anything Model在醫療影像中扮演著重要角色,幫助診斷和檢測掃描圖像中的異常。MEDSAM是基於不同來源收集的圖像-遮罩對訓練出來的模型。這個數據集涵蓋了超過15種圖像模式和30多種癌症類型。
接下來,我們將討論這個模型如何使用邊界框來檢測醫療圖像中的物體。
學習目標
Meta的Segment Anything Model (SAM)在圖像的不同區域分割物體方面表現出色,這使得它能夠靈活應對各種任務。
SAM能夠檢測超出其訓練數據集的物體,展示了其靈活性,特別是當與邊界框和遮罩結合使用時。
MEDSAM是SAM的精細調整版本,通過處理複雜的診斷任務來增強醫療影像的能力,例如檢測超過15種影像模式中的癌症。
通過使用邊界框和高效的計算技術,MEDSAM優化了醫療圖像分割,推動了醫療AI應用的邊界。
SAM的核心多功能性,加上MEDSAM的醫療專業化,為機器人、自駕車和醫療等領域的圖像分析革命化開啟了廣闊的潛力。
Segment Anything Model (SAM) 如何運作?
SAM是一個由Meta開發的圖像分割模型,旨在識別圖像幾乎任何區域的物體。這個模型最好的特點是它的多功能性,讓它在檢測圖像時能夠進行一般化。
這個模型在一個有趣的1100萬張真實世界圖像上進行了訓練,更有趣的是,它能夠分割出甚至不在其數據集中的物體。
有許多圖像分割和物體檢測模型具有不同的結構。這類模型可以是特定任務的,也可以是基礎模型,但SAM作為一個“全能分割”模型,既可以是特定任務的,也可以是基礎模型,因為它有良好的基礎背景來檢測數百萬張圖像,同時也留有調整的空間。這就是研究人員進入的地方,像MEDSAM一樣提出各種想法。
SAM的一個亮點是它的適應能力。它也是一個基於提示的分割模型,這意味著它可以接收有關如何執行分割任務的信息。這些包括前景、背景、粗略框、邊界框、遮罩、文本和其他可能幫助模型分割圖像的信息。
這個模型架構的基本原則是圖像編碼器、提示編碼器和遮罩編碼器。這三個組件在執行分割任務中扮演著重要角色。圖像和提示編碼器幫助生成圖像和提示的嵌入。遮罩編碼器則檢測根據提示生成的要分割圖像的遮罩。
SAM能否直接應用於醫療影像?
將Segment Anything Model用於醫療目的是值得一試的。此外,這個模型擁有大量數據集和多樣的能力,那為什麼不應用於醫療影像呢?然而,由於醫療圖像的特性以及模型如何處理圖像中不確定的邊界框的問題,醫療分割的應用面臨一些限制。由於醫療圖像中遮罩的特性帶來的挑戰,專業化的需求變得至關重要。因此,這促成了MEDSAM的創新,這是一個基於SAM架構但專門針對醫療圖像的分割模型。
這個模型能夠處理解剖結構和不同圖像實例中的各種任務。醫療影像使用這個模型能夠獲得有效的結果;15種影像模式和超過30種癌症類型顯示了MEDSAM在醫療影像分割訓練中的大規模參與。
MEDSAM的模型架構
MEDSAM是基於預訓練的SAM模型構建的。這個框架涉及圖像和提示編碼器生成目標圖像的編碼遮罩的嵌入。
Segment Anything Model中的圖像編碼器處理需要大量計算能力的位置信息。為了提高效率,這個模型的研究人員決定“凍結”圖像編碼器和提示編碼器。這意味著在訓練過程中他們停止更新或改變這些部分。
提示編碼器幫助理解物體的位置,使用來自SAM中的邊界框編碼器的數據,也保持不變。通過凍結這些組件,他們減少了所需的計算能力,並提高了系統的效率。
研究人員改進了這個模型的架構,使其更高效。在提示模型之前,他們計算了訓練圖像的圖像嵌入,以避免重複計算。遮罩編碼器是唯一經過微調的,現在創建一個遮罩編碼器,而不是三個,因為邊界框幫助清晰地定義要分割的區域。這種方法使訓練變得更高效。
以下是這個模型運作的圖示:
如何使用MEDSAM進行醫療影像
這個模型需要一些庫來運行,我們將深入了解如何在圖像上執行醫療影像分割任務。
安裝必要的庫
我們需要幾個庫來運行這個模型,因為我們還需要在邊界框上繪製線條作為提示。我們將從requests、numpy和metaplot開始。
“`python
import requests
import numpy as np
import matplotlib.pyplot as plt
from PIL import Image
from transformers import SamModel, SamProcessor
import torch
“`
‘requests’庫幫助從其來源獲取圖像。‘numpy’庫變得有用,因為我們執行涉及邊界框坐標的數值運算。PIL和metaplot分別協助圖像處理和顯示。此外,除了SAM模型,處理器和torch(處理下面代碼中定義的計算)是運行這個模型的重要包。
“`python
device = “cuda” if torch.cuda.is_available() else “cpu”
“`
加載預訓練的SAM
“`python
model = SamModel.from_pretrained(“flaviagiammarino/medsam-vit-base”).to(device)
processor = SamProcessor.from_pretrained(“flaviagiammarino/medsam-vit-base”)
“`
因此,預訓練模型通常使用最合適的計算設備,例如GPU或CPU。這個操作在加載模型的處理器並準備圖像輸入數據之前進行。
圖像輸入
“`python
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.]
“`
通過URL加載圖像非常簡單,特別是在我們的環境中使用庫。我們還可以打開圖像並將其轉換為適合處理的格式。‘input_boxes’列表定義了邊界框,坐標為[95, 255, 190, 350]。這些數字表示圖像中感興趣區域的左上角和右下角。使用邊界框,我們可以專注於特定區域執行分割任務。
處理圖像輸入
接下來,我們處理圖像輸入,運行分割模型,並準備輸出遮罩。模型處理器準備原始圖像和輸入框,並將它們轉換為適合處理的格式。之後,處理過的輸入運行以預測遮罩概率。這段代碼生成了一個經過精煉的基於概率的遮罩,用於分割區域。
“`python
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)
“`
遮罩
“`python
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)
“`
在這裡,我們嘗試使用‘ax.show’在圖像上顯示彩色遮罩。show_mask函數在圖中顯示分割遮罩。它可以使用隨機顏色或默認的黃色。遮罩被調整大小以適應圖像,並用選定的顏色覆蓋,然後使用‘ax.show’可視化。
之後,該函數使用坐標和位置繪製矩形。這個過程如下所示:
“`python
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))
“`
輸出
“`python
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(“輸入圖像和邊界框”)
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分割”)
ax[1].axis(“off”)
plt.show()
“`
這段代碼創建了一個包含兩個並排子圖的圖形,以顯示帶有邊界框的輸入圖像和結果。第一個子圖顯示原始圖像和邊界框,第二個顯示覆蓋遮罩的圖像和邊界框。
這個模型的應用:未來會如何?
SAM作為一個基礎模型是一個多用途工具;憑藉其高泛化能力和來自真實世界圖像的數百萬數據集訓練,這個模型能做很多事情。以下是這個模型的一些常見應用:
這個工具最受歡迎的用途之一是圖像和視頻編輯,簡化了物體檢測和圖像、視頻的操作。
自駕車可以利用這個模型高效檢測物體,同時理解每個場景的上下文。
機器人也需要物體檢測來與環境互動。
MEDSAM是Segment Anything Model應用案例中的一個重要里程碑。醫療影像比普通圖像更複雜;這個模型幫助我們理解這一背景。使用不同的診斷方法來檢測醫療影像中的癌症類型和其他細胞,可以使這個模型在特定任務檢測中更高效。
結論
Meta的Segment Anything Model的多功能性展示了巨大的潛力。其醫療影像能力是革命性診斷和相關任務在醫療行業中的一個重要里程碑。整合邊界框使其更有效。隨著SAM基礎模型的演變,醫療影像的應用只會變得更好。
資源
關鍵要點
SAM基礎模型的多功能性是研究人員微調醫療影像模型的基礎。另一個顯著特點是它能夠使用提示、邊界框和遮罩適應各種任務。
MEDSAM在多樣的醫療影像數據集上進行了訓練。它涵蓋了超過15種影像模式和30多種癌症類型,顯示了它在醫療掃描中檢測異常區域的高效性。
該模型的架構也採取了正確的方法。某些部分被凍結以降低計算成本,並使用邊界框作為提示來分割圖像的特定區域。
常見問題
A. SAM是一種由Meta開發的圖像處理技術,用於檢測物體並在圖像的任何區域進行分割。它還可以分割未在模型數據集中訓練的物體。這個模型經過訓練,可以使用提示和遮罩,並且在各個領域中具有適應性。
A. MEDSAM是專門為醫療影像設計的SAM的精細調整版本。雖然SAM是通用的,但MEDSAM經過優化以處理醫療影像的複雜性,這轉化為各種影像模式和癌症檢測。
A. 這個模型的多功能性和實時處理能力使其可以用於實時應用,包括自駕車和機器人。它可以快速有效地檢測和理解圖像中的物體。
本文中顯示的媒體不屬於Analytics Vidhya,並由作者自行決定使用。
本文由 AI 台灣 運用 AI 技術編撰,內容僅供參考,請自行核實相關資訊。
歡迎加入我們的 AI TAIWAN 台灣人工智慧中心 FB 社團,
隨時掌握最新 AI 動態與實用資訊!