Skip to content

Latest commit

Β 

History

History
79 lines (64 loc) Β· 3.49 KB

mateuszbuda_brain-segmentation-pytorch_unet.md

File metadata and controls

79 lines (64 loc) Β· 3.49 KB
layout background-class body-class category title summary image author tags github-link github-id featured_image_1 accelerator order demo-model-link
hub_detail
hub-background
hub
researchers
U-Net for brain MRI
U-Net with batch normalization for biomedical image segmentation with pretrained weights for abnormality segmentation in brain MRI
unet_tcga_cs_4944.png
mateuszbuda
vision
mateuszbuda/brain-segmentation-pytorch
unet_brain_mri.png
cuda-optional
10
import torch
model = torch.hub.load('mateuszbuda/brain-segmentation-pytorch', 'unet',
    in_channels=3, out_channels=1, init_features=32, pretrained=True)

μœ„ μ½”λ“œλŠ” λ‡Œ MRI λ³Όλ₯¨ 데이터 μ…‹ kaggle.com/mateuszbuda/lgg-mri-segmentation의 이상 탐지λ₯Ό μœ„ν•΄ 사전 ν•™μŠ΅λœ U-Net λͺ¨λΈμ„ λΆˆλŸ¬μ˜΅λ‹ˆλ‹€. 사전 ν•™μŠ΅λœ λͺ¨λΈμ€ 첫 번째 κ³„μΈ΅μ—μ„œ 3개의 μž…λ ₯ 채널, 1개의 좜λ ₯ 채널 그리고 32개의 νŠΉμ§•μ„ κ°€μ§‘λ‹ˆλ‹€.

λͺ¨λΈ μ„€λͺ…

U-Net λͺ¨λΈμ€ 배치 μ •κ·œν™” 및 ReLU ν™œμ„± ν•¨μˆ˜λ₯Ό 가진 두 개의 ν•©μ„±κ³± 계측, 인코딩 κ³Όμ •μ˜ λ§₯슀 풀링(max-pooling) 계측 그리고 λ””μ½”λ”© κ³Όμ •μ˜ μ—… 컨볼루셔널(up-convolutional) 계측을 ν¬ν•¨ν•œ λ„€ 가지 λ‹¨κ³„μ˜ λΈ”λ‘μœΌλ‘œ κ΅¬μ„±λ©λ‹ˆλ‹€. 각 λΈ”λ‘μ˜ ν•©μ„±κ³± ν•„ν„° μˆ˜λŠ” 32, 64, 128, 256κ°œμž…λ‹ˆλ‹€. 병λͺ© 계측(bottleneck layer)은 512개의 ν•©μ„±κ³± ν•„ν„°λ₯Ό κ°€μ§‘λ‹ˆλ‹€. 인코딩 κ³Όμ •μ˜ κ³„μΈ΅μ—μ„œ 얻은 νŠΉμ§•μ„ 이에 μƒμ‘ν•˜λŠ” λ””μ½”λ”© κ³Όμ •μ˜ 계측에 ν•©μΉ˜λŠ” μŠ€ν‚΅ μ—°κ²°(skip connections)이 μ§„ν–‰λ©λ‹ˆλ‹€. μž…λ ₯ μ΄λ―Έμ§€λŠ” pre-contrast, FLAIR 및 post-contrast κ³Όμ •μ—μ„œ 얻은 3-채널 λ‡Œ MRI μŠ¬λΌμ΄μŠ€μž…λ‹ˆλ‹€. 좜λ ₯은 μž…λ ₯ 이미지와 λ™μΌν•œ 크기λ₯Ό 가지고 1-μ±„λ„μ˜ 이상 탐지 μ˜μ—­μ„ ν™•λ₯ μ μœΌλ‘œ λ‚˜νƒ€λƒ…λ‹ˆλ‹€. μ•„λž˜μ˜ μ˜ˆμ‹œμ²˜λŸΌ μž„κ³„ 값을 μ„€μ •ν•˜λ©΄ 좜λ ₯ 이미지λ₯Ό 이진 λΆ„ν•  마슀크둜 λ³€ν™˜ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

μ˜ˆμ‹œ

사전 ν•™μŠ΅λœ λͺ¨λΈμ— μž…λ ₯λ˜λŠ” μ΄λ―Έμ§€λŠ” 3개의 채널을 κ°€μ Έμ•Ό ν•˜λ©° 256x256 ν”½μ…€λ‘œ 크기가 μ‘°μ •λ˜κ³  각 λ³Όλ₯¨λ§ˆλ‹€ z-점수둜 μ •κ·œν™”λœ μƒνƒœμ—¬μ•Ό ν•©λ‹ˆλ‹€.

# μ˜ˆμ‹œ 이미지 λ‹€μš΄λ‘œλ“œ
import urllib
url, filename = ("https://github.com/mateuszbuda/brain-segmentation-pytorch/raw/master/assets/TCGA_CS_4944.png", "TCGA_CS_4944.png")
try: urllib.URLopener().retrieve(url, filename)
except: urllib.request.urlretrieve(url, filename)
import numpy as np
from PIL import Image
from torchvision import transforms

input_image = Image.open(filename)
m, s = np.mean(input_image, axis=(0, 1)), np.std(input_image, axis=(0, 1))
preprocess = transforms.Compose([
    transforms.ToTensor(),
    transforms.Normalize(mean=m, std=s),
])
input_tensor = preprocess(input_image)
input_batch = input_tensor.unsqueeze(0)

if torch.cuda.is_available():
    input_batch = input_batch.to('cuda')
    model = model.to('cuda')

with torch.no_grad():
    output = model(input_batch)

print(torch.round(output[0]))

μ°Έκ³ λ¬Έν—Œ