赛题名称:脑PET疾病预测挑战赛
赛题类型:计算机视觉、图像分类
赛题报名链接?:https://challenge.xfyun.cn/topic/info?type=pet-2023&ch=vWxQGFU
赛题背景
脑PET全称为脑部正电子发射计算机断层显像(brain positron emission tomography PET),是反映脑部病变的基因、分子、代谢及功能状态的显像。它是利用正电子核素标记葡萄糖等人体代谢物作为显像剂,通过病灶对显像剂的摄取来反映其代谢变化,从而为临床提供疾病的生物代谢信息,为脑癫痫病、脑肿瘤、帕金森病、阿尔茨海默综合征等提供了有效的检测手段。
可利用脑PET图像检测出轻度认知障碍病灶,并提前介入治疗,从而延缓发病,对后续患者康复治疗有着积极的意义。因此本赛题以轻度认知障碍为例对脑PET图像进行分析与疾病预测。
赛事任务
为研究基于脑PET图像的疾病预测,本次大赛提供了海量脑PET数据集作为脑PET图像检测数据库的训练样本,参赛者需根据提供的样本构建模型,对轻度认知障碍进行分析和预测。
脑PET图像检测数据库,记录了老年人受试志愿者的脑PET影像资料,其中包括确诊为轻度认知障碍(MCI)患者的脑部影像数据和健康人(NC)的脑部影像数据。
被试者按医学诊断分为两类:
- NC:健康
- MCI:轻度认知障碍
赛题数据
本次大赛所用脑PET图像检测数据库,图像格式为nii。
评估指标
本次竞赛的评价标准采用F1_score,分数越高,效果越好。
解题思路
赛题是一个典型的图像分类的比赛,但需要单独的对数据格式进行读取,并进行数据增强。
步骤0:读取图片
import nibabel as nib from nibabel.viewers import OrthoSlicer3D
train_path = glob.glob('./脑PET图像分析和疾病预测挑战赛公开数据/Train/*/*')
test_path = glob.glob('./脑PET图像分析和疾病预测挑战赛公开数据/Test/*')
np.random.shuffle(train_path)
np.random.shuffle(test_path)
forpathintrain_path:
img = nib.load(path)print(path, img.dataobj[:, :, :, 0].shape)
步骤1:定义模型
class XunFeiNet(nn.Module): def __init__(self): super(XunFeiNet, self).__init__() model = models.resnet18(True) model.avgpool = nn.AdaptiveAvgPool2d(1) model.fc = nn.Linear(512, 9) self.resnet = model def forward(self, img): out = self.resnet(img)returnout
步骤2:模型训练
def train(train_loader, model, criterion, optimizer): model.train() train_loss = 0.0fori, (input, target)inenumerate(train_loader): input = input.cuda(non_blocking=True) target = target.cuda(non_blocking=True)
# compute outputoutput = model(input)
loss = criterion(output, target)
# compute gradient and do SGD stepoptimizer.zero_grad()
loss.backward()
optimizer.step()
ifi % 20 == 0:print('Train loss', loss.item())
train_loss += loss.item()returntrain_loss/len(train_loader)
步骤3:模型预测
def predict(test_loader, model, criterion): model.eval() val_acc = 0.0 test_pred = [] with torch.no_grad(): end = time.time()fori, (input, target)inenumerate(test_loader): input = input.cuda() target = target.cuda()
# compute outputoutput = model(input)
test_pred.append(output.data.cpu().numpy())returnnp.vstack(test_pred)
方案开源地址:
https://github.com/datawhalechina/competition-baseline/tree/master/competition/%E7%A7%91%E5%A4%A7%E8%AE%AF%E9%A3%9EAI%E5%BC%80%E5%8F%91%E8%80%85%E5%A4%A7%E8%B5%9B2023