数据情况:brats(brain tumor segmentation)是MICCAI举办的脑部肿瘤分割比赛,本次数据采用Brats18数据集,brats 2018中的训练集( training set) 有285个病例,每个病例有四个模态(t1、t2、flair、t1ce),需要分割三个部分。一个MR序列有155张图片,每张图片的大小为240x240。
- HGG :高级别胶质瘤(WHO3~4级)为低分化胶质瘤;这类肿瘤为恶性肿瘤,患者预后较差。
- LGG :低级别胶质瘤(WHO1~2级)为分化良好的胶质瘤;虽然这类肿瘤在生物上并不属于良性肿瘤,但是患者的预后相对较好。
本次实验采用其中T1序列实现HGG和LGG二分类。
数据预处理:3D切片成2D
import os
import SimpleITK as sitk
import numpy as np
import imageio
import nibabel as nib
from matplotlib import pylab as plt
import cv2
from PIL import Image
Folder=r'E:\data\BraTS17\MICCAI_BraTS_2019_Data_Training\MICCAI_BraTS_2019_Data_Training'
subfolder=['HGG','LGG','image_HGG','image_LGG']
Path=Folder+"\\"+subfolder[1]
filename_list=os.listdir(Path)
for filename in filename_list:
file_path = Path+'\\'+filename+'\\'+filename+'_t1.nii.gz'
src = sitk.ReadImage(file_path)
array = sitk.GetArrayViewFromImage(src)
seg_file_path = Path+'\\'+filename+'\\'+filename+'_seg.nii.gz'
seg_src = sitk.ReadImage(seg_file_path)
seg_array=sitk.GetArrayViewFromImage(seg_src)
filename=filename+'_t1.nii.gz'
print(filename)
# 找到病灶区域开始和结束的slice,并各向外扩张
z = np.any(seg_array, axis=(1, 2))
start_slice, end_slice = np.where(z)[0][[0, -1]]
print("Cut out range:",str(start_slice) + '--' + str(end_slice))
# 截取保留区域
array = array[start_slice:end_slice + 1, :, :]
seg_array = seg_array[start_slice:end_slice + 1, :, :]
print("Preprocessed shape:",array.shape,seg_array.shape)
for n_slice in range(array.shape[0]):
cbct_slice = array[n_slice,:,:]
#plt.imshow(cbct_slice, cmap='gray')
#cbct_slice = ((cbct_slice - cbct_slice.min()) / (cbct_slice.max() - cbct_slice.min()))
#cbct_slice = cbct_slice.astype("uint8")
savepath = Folder+ "\\" +subfolder[3]+'\\'+ filename.rstrip('.nii.gz')+"_"+str(n_slice) + ".jpg"
#np.save(savepath,cbct_slice)#(512, 512),dtype('uint8')
imageio.imsave(savepath,cbct_slice)
网络架构:resnet
参考【 使用pytorch搭建ResNet并基于迁移学习训练-哔哩哔哩】 https://b23.tv/GRynSUJ
参考文章:
MICCAI+BraTS+多模态+t1,t2,flair,t1c+HGG,LGG+WT,ET,TC - 知乎 (zhihu.com)