의료 영상 분할을 위해 Medical Segment Anything Model 시작하기
MedSAM(Medical Segment Anything Model)은 2차원 의료 영상을 대화형 방식으로 쉽게 분할하기 위한 딥러닝 알고리즘입니다. 데이터 세트에 맞춰 모델을 다시 훈련시킬 필요 없이 MedSAM을 사용하여 여러 의료 영상 모달리티에서 객체를 분할할 수 있습니다. MedSAM은 SAM(Segment Anything Model)을 기반으로 합니다.
SAM은 추가적인 훈련 없이도 영상 내의 객체를 정확하게 분할하기 위해 시각적 프롬프트와 함께 사용할 수 있는 사전 훈련된 영상 분할 모델입니다. 시각적 프롬프트는 분할하려는 객체를 특성화하는 모델에 대한 입력입니다. 예를 들어, 분할하려는 객체를 둘러싸는 경계 상자를 제공할 수 있습니다. SAM은 제로샷(zero-shot) 분할 모델이기도 합니다. SAM에 프롬프트와 그에 상응하는 분할 마스크의 예를 제공할 필요는 없습니다.
MedSAM은 SAM의 적용 가능성을 의료 영역으로 확장하여 의료 영상의 정확하고 효율적인 분할을 가능하게 합니다. SAM은 SA-1B Dataset을 기반으로 훈련되는 반면, MedSAM은 여러 영상 모달리티와 암 유형을 포괄하는 150만 개 이상의 영상-마스크 쌍이 포함된 대규모 의료 영상 데이터 세트를 기반으로 훈련됩니다.

이 아키텍처는 다음의 주요 컴포넌트로 이루어집니다.
영상 인코더 — 영상 인코더는 영상 임베딩을 생성합니다. 영상 임베딩은 영상 내용의 의미 체계를 인코딩하는 영상의 특징 표현입니다. 영상 인코더는 영상을 분석하고 다양한 특징을 생성합니다. 이러한 모든 특징이 합쳐져 영상 임베딩을 구성합니다.
프롬프트 인코더 — 프롬프트 인코더는 사용자가 제공한 프롬프트(예: 경계 상자)를 특징 표현으로 변환합니다. 본질적으로, 프롬프트 인코더는 프롬프트에서 공간 정보를 인코딩하여 분할하려는 객체의 컨텍스트를 MedSAM이 이해하고 분할 프로세스를 안내할 수 있도록 합니다.
마스크 디코더 — 마스크 디코더는 영상 임베딩과 프롬프트 임베딩을 사용하여 분할 마스크를 생성합니다.
Medical Imaging Toolbox™ Model for Medical Segment Anything Model을 사용하여 의료 영상 분할을 수행할 수 있습니다.
지원 패키지 설치
애드온 탐색기에서 Medical Imaging Toolbox Model for Medical Segment Anything Model을 설치할 수 있습니다. 애드온 설치에 대한 자세한 내용은 애드온을 받고 관리하기 항목을 참조하십시오. 이 지원 패키지를 사용하려면 Deep Learning Toolbox™와 Computer Vision Toolbox™도 필요합니다. GPU에서 영상 데이터를 처리하려면 지원되는 GPU 장치와 Parallel Computing Toolbox™가 필요합니다.
MedSAM을 사용하여 의료 영상 분할하기
다음 절차에 따라 MedSAM을 사용하여 의료 영상을 분할할 수 있습니다.
의료 영상을 작업 공간으로 불러오고 영상 크기를
imageSize변수에 저장합니다.zipFile = matlab.internal.examples.downloadSupportFile("medical","CardiacMRI.zip"); filepath = fileparts(zipFile); unzip(zipFile,filepath) imageDir = fullfile(filepath,"Cardiac MRI"); medImg = medicalImage(fullfile(imageDir,"images","SC-HF-I-01","SC-HF-I-01_rawdcm_099.dcm")); I = medImg.Pixels; I = mat2gray(I);
MedSAM은 2차원 회색조 영상, 2차원 RGB 영상, 2차원 회색조 영상 배치 또는 2차원 RGB 영상 배치를 지원합니다. B개의 영상으로 구성된 배치를 분할하는 경우 해당 영상을 전부 작업 공간으로 불러옵니다. 배치에 있는 모든 영상의 크기는 동일해야 합니다.
사전 훈련된 MedSAM을 구성하기 위한
medicalSegmentAnythingModel객체를 만듭니다.medsam = medicalSegmentAnythingModel;
extractEmbeddings객체 함수를 사용하여 영상 한 개 또는 B개의 영상으로 구성된 배치에서 영상 임베딩을 추출합니다.embeddings = extractEmbeddings(medsam,I);
단일 영상을 사용하는 경우
embeddings의 크기는 64×64-256입니다. B개의 영상으로 구성된 배치를 사용하는 경우embeddings의 크기는 64×64-256×B입니다.분할을 위한 시각적 프롬프트를 분할하려는 객체의 경계 상자로 지정합니다. 영상 배치의 임베딩을 추출한 경우에도 한 번에 하나의 영상만 분할할 수 있습니다. 영상 배치를 분할하려면 분할할 영상을 선택하고 시각적 프롬프트를 지정하십시오.
단일 영상
I의 경우 시각적 프롬프트를 프로그래밍 방식이나 대화형 방식으로 지정할 수 있습니다.프로그래밍 방식의 시각적 프롬프트
boxPrompt = [100 110 50 50];
대화형 방식의 시각적 프롬프트
f = figure; ax = axes(f); imshow(I,[],Parent=ax); roi = drawrectangle(ax); boxPrompt = roi.Position;

단일 영상
I와 그 임베딩embeddings의 경우,segmentObjectsFromEmbeddings객체 함수를 사용하여 영상의 경계 상자로 정의된 객체를 분할합니다.imageSize = size(I); mask = segmentObjectsFromEmbeddings(medsam,embeddings,imageSize,BoundingBox=boxPrompt);
입력 영상 위에 검출된 객체 마스크를 겹쳐 놓고 객체 마스크가 포함된 영상을 표시합니다.
imMask = insertObjectMask(I,mask); imshow(imMask)

의료 영상 레이블 지정기 앱에서 MedSAM 알고리즘을 사용하여 의료 영상과 의료 볼륨의 단면에서 객체를 대화형 방식으로 분할할 수 있습니다. 시작하려면 의료 영상 레이블 지정기에서 MedSAM 시작하기 항목을 참조하십시오.
응용 사례
MedSAM을 사용하면 의료 영상 응용 사례의 다양한 단계에서 의료 영상을 대상으로 의료 영상 분할을 수행할 수 있습니다. 검출된 객체를 분할하여 장기 분할과 같은 응용 사례를 위한 다운스트림 작업을 수행할 수 있습니다. 분할된 객체에 대한 라디오믹스 분석도 수행할 수 있습니다.
참고 문헌
[1] Ma, Jun, Yuting He, Feifei Li, Lin Han, Chenyu You, and Bo Wang. “Segment Anything in Medical Images.” Nature Communications 15, no. 1 (January 22, 2024): 654. https://doi.org/10.1038/s41467-024-44824-z.
참고 항목
medicalSegmentAnythingModel | extractEmbeddings | segmentObjectsFromEmbeddings | 의료 영상 레이블 지정기
도움말 항목
- Interactively Segment and Analyze ROI Using MedSAM and Radiomics
- 의료 영상 레이블 지정기 시작하기
- 의료 영상 레이블 지정기에서 MedSAM 시작하기
- 의료 영상 레이블 지정기에서 MONAI Label 시작하기