用于脑部MRI的U-Net

import torch
model = torch.hub.load('mateuszbuda/brain-segmentation-pytorch', 'unet',
    in_channels=3, out_channels=1, init_features=32, pretrained=True)

加载在脑部MRI体积数据集上预训练的U-Net模型,用于异常分割 kaggle.com/mateuszbuda/lgg-mri-segmentation 预训练模型需要3个输入通道、1个输出通道,并且第一层有32个特征。

模型描述

该U-Net模型包含四个级别的块,每个块在编码部分包含两个卷积层(带批量归一化和ReLU激活函数)和一个最大池化层,在解码部分则包含上采样卷积层。每个块中的卷积滤波器数量分别为32、64、128和256。瓶颈层有512个卷积滤波器。从编码层到解码部分的相应层使用了跳跃连接。输入图像是来自造影前、FLAIR和造影后序列的3通道脑部MRI切片。输出是一个与输入图像大小相同的单通道异常区域概率图。可以通过阈值处理将其转换为二进制分割掩码,如下例所示。

示例

预训练模型的输入图像应具有3个通道,并调整为256×256像素,并按体积进行z-score归一化。

# Download an example image
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]))

参考文献

带批量归一化的U-Net,用于生物医学图像分割,预训练权重用于脑部MRI中的异常分割

模型类型: 视觉
提交者: mateuszbuda