第一部分:引言
脑肿瘤按组织来源可分为原发性(如胶质瘤)和继发性(转移性肿瘤)。MRI 提供多序列图像(T1、T1c、T2、FLAIR),为 AI 模型提供丰富数据,但存在形态多样、边界不规则和异质性强等特点。AI 能自动提取特征,实现精确分割与分类,辅助临床决策。
第二部分:数据处理与预处理
2.1 数据加载
假设使用 BraTS 2021 数据集:
import nibabel as nib
import numpy as np
import os
def load_brats_image(path):
"""加载 NIfTI MRI 图像"""
img = nib.load(path)
return img.get_fdata()
# 示例
t1_path = 'BraTS2021/train/BRATS_001/T1.nii.gz'
t1_img = load_brats_image(t1_path)
print("Image shape:", t1_img.shape)
2.2 数据增强
from tensorflow.keras.preprocessing.image import ImageDataGenerator
datagen = ImageDataGenerator(
rotation_range=15,
width_shift_range=0.1,
height_shift_range=0.1,
zoom_range=0.1,
horizontal_flip=True
)
# 对二维切片应用增强
augmented = datagen.flow(np.expand_dims(t1_img[:,:,50], axis=(0,-1)), batch_size=1)
2.3 标签处理
def load_label(path):
label = nib.load(path).get_fdata()
# 将不同肿瘤区域编码为 0,1,2,3
label[label==4] = 3
return label
第三部分:脑肿瘤分割模型(U-Net 3D)
import tensorflow as tf
from tensorflow.keras import layers, models
def build_3d_unet(input_shape=(128,128,128,1), num_classes=4):
inputs = layers.Input(shape=input_shape)
# 编码器
c1 = layers.Conv3D(32, (3,3,3), activation='relu', padding='same')(inputs)
c1 = layers.Conv3D(32, (3,3,3), activation='relu', padding='same')(c1)
p1 = layers.MaxPooling3D((2,2,2))(c1)
c2 = layers.Conv3D(64, (3,3,3), activation='relu', padding='same')(p1)
c2 = layers.Conv3D(64, (3,3,3), activation='relu', padding='same')(c2)
p2 = layers.MaxPooling3D((2,2,2))(c2)
# 底层
c3 = layers.Conv3D(128, (3,3,3), activation='relu', padding='same')(p2)
c3 = layers.Conv3D(128, (3,3,3), activation='relu', padding='same')(c3)
# 解码器
u2 = layers.UpSampling3D((2,2,2))(c3)
u2 = layers.concatenate([u2, c2])
c4 = layers.Conv3D(64, (3,3,3), activation='relu', padding='same')(u2)
u1 = layers.UpSampling3D((2,2,2))(c4)
u1 = layers.concatenate([u1, c1])
c5 = layers.Conv3D(32, (3,3,3), activation='relu', padding='same')(u1)
outputs = layers.Conv3D(num_classes, (1,1,1), activation='softmax')(c5)
model = models.Model(inputs, outputs)
return model
model = build_3d_unet()
model.summary()
3.1 训练与评估
model.compile(optimizer='adam', loss='sparse_categorical_crossentropy', metrics=['accuracy'])
# X_train, y_train 为训练数据
# model.fit(X_train, y_train, batch_size=2, epochs=50, validation_split=0.2)
第四部分:脑肿瘤分类模型(CNN)
4.1 2D CNN 分类示例
from tensorflow.keras import layers, models
def build_2d_cnn(input_shape=(128,128,1), num_classes=3):
model = models.Sequential([
layers.Conv2D(32, (3,3), activation='relu', input_shape=input_shape),
layers.MaxPooling2D((2,2)),
layers.Conv2D(64, (3,3), activation='relu'),
layers.MaxPooling2D((2,2)),
layers.Flatten(),
layers.Dense(128, activation='relu'),
layers.Dense(num_classes, activation='softmax')
])
return model
cnn_model = build_2d_cnn()
cnn_model.compile(optimizer='adam', loss='sparse_categorical_crossentropy', metrics=['accuracy'])
4.2 多序列融合
# 假设 T1、T2、FLAIR 三序列
import tensorflow as tf
input_t1 = layers.Input(shape=(128,128,1))
input_t2 = layers.Input(shape=(128,128,1))
input_flair = layers.Input(shape=(128,128,1))
def conv_block(x):
x = layers.Conv2D(32, (3,3), activation='relu', padding='same')(x)
x = layers.MaxPooling2D((2,2))(x)
return x
x1 = conv_block(input_t1)
x2 = conv_block(input_t2)
x3 = conv_block(input_flair)
merged = layers.concatenate([x1, x2, x3])
flatten = layers.Flatten()(merged)
dense = layers.Dense(128, activation='relu')(flatten)
output = layers.Dense(3, activation='softmax')(dense)
multi_modal_model = tf.keras.Model(inputs=[input_t1, input_t2, input_flair], outputs=output)
multi_modal_model.compile(optimizer='adam', loss='sparse_categorical_crossentropy', metrics=['accuracy'])
第五部分:模型可视化与评价
import matplotlib.pyplot as plt
# 可视化分割结果
pred_mask = model.predict(X_val[0:1])[0]
plt.imshow(pred_mask[:,:,64,1]) # 显示第64层的第1类预测
plt.show()
评价指标:Dice 系数、IoU、准确率、召回率
- BraTS 官方挑战赛指标:Dice 对增强肿瘤(ET)、肿瘤核心(TC)、全肿瘤(WT)
第六部分:前沿技术与挑战
-
自监督学习:利用未标注 MRI 提升泛化能力
-
生成模型(GAN)数据增强
-
联邦学习:跨医院模型训练,保护隐私
-
3D 高分辨率模型计算成本高
-
模型可解释性不足,影响临床信任度
第七部分:未来方向
-
多模态数据融合(影像+临床+基因组)
-
可解释 AI 和人机协作诊疗
-
轻量化模型用于实时 MRI 分析
-
多中心验证和临床落地
参考文献
-
Menze, B. et al., The Multimodal Brain Tumor Image Segmentation Benchmark (BraTS), IEEE TMI, 2015
-
Ronneberger, O. et al., U-Net: Convolutional Networks for Biomedical Image Segmentation, MICCAI, 2015
-
Kamnitsas, K. et al., Efficient Multi-Scale 3D CNN with Fully Connected CRF for Accurate Brain Lesion Segmentation, MedIA, 2017
-
MONAI: Medical Open Network for AI (https://monai.io)
-
Goodfellow, I., Deep Learning, MIT Press, 2016