科大讯飞:脑PET疾病预测 baseline

赛题名称:脑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)

for path in train_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) return out

步骤2:模型训练

def train(train_loader, model, criterion, optimizer):
    model.train()
    train_loss = 0.0 for i, (input, target) in enumerate(train_loader):
        input = input.cuda(non_blocking=True)
        target = target.cuda(non_blocking=True)

# compute output output = model(input)
loss = criterion(output, target)

# compute gradient and do SGD step optimizer.zero_grad()
loss.backward()
optimizer.step()


if i % 20 == 0: print('Train loss', loss.item())
train_loss += loss.item() return train_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() for i, (input, target) in enumerate(test_loader):
            input = input.cuda()
            target = target.cuda()

# compute output output = model(input)
test_pred.append(output.data.cpu().numpy()) return np.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

【竞赛报名/项目咨询+微信:mollywei007】

上一篇

去英美留学选哪些学校最好找工作?

下一篇

海硕归国读博士是赚了还是亏了?

你也可能喜欢

  • 暂无相关文章!

评论已经被关闭。

插入图片
返回顶部