Datawhale视觉夏令营学习笔记1

Datawhale视觉夏令营学习笔记1_第1张图片

 实践任务:脑PET图像分析和疾病预测挑战赛

https://challenge.xfyun.cn/topic/info?type=pet-2023&ch=vWxQGFU

数据审查

数据为nii数据,与之前学到的图片模型有很大差别,nii数据为4维(由于第四维数据皆是一帧,所以给出前三维的说明)这导致我不能直接按照常规方法进行数据增强,在实际应用中使用了将nii进行channel层的抽样和将nii变成图片再进行数据增强两种方案。另外还发现图片的大小是不一致的,在实验中直接resize成同一大小,并没有更多的考虑。

Datawhale视觉夏令营学习笔记1_第2张图片

实验报告

总共成功提交了五次成绩

第一次实验评分0.484,用逻辑回归的baseline,我觉得这个模型是不及格的,因为对于二分类来讲,全猜测为正常或全异常,模型结果准确率也有一个大于0.5(评分用的是F1 score,严格来说并不能直接比较)
第二次实验评分0.714,用的CNN的baseline,这个模型的原理是对于inn文件直接随机选择50个通道(不满50可重复抽取)然后接一个resnet18,首先我觉得随机50个通道有些草率,这样完全忽视了数据的空间信息,而且resnet18也比较简单(PS:没想到竟然是第一天实验最好的结果)

第三次实验评分0.57,用的是升级版的baseline,有些失望,因为在前面简介中说该模型比swin-transformer还要好,结果差强人意,由于我不熟悉paddle,所以没有细看,吸取了将inn数据转成图片,再最后对测试集每个inn数据分出来的图片进行分类,再类似树模型一样投票,我起初觉得这个方法很好,因为在图片的基础上数据增强就好做多了。

第四次实验评分0.587,用的是数据增强+k折验证+efficientnet+label_smooth,

由于感觉数据量实在不应该用太大量级的模型,选了efficientnet,在验证集上取得了很好的结果!

INFO:root:K/Epoch[4/5 4/5]:
INFO:root:[  0/312]    Time  0.140 ( 0.140)    Loss 0.4379 (0.4379)    Acc@1  90.00 ( 90.00)
INFO:root:[100/312]    Time  0.162 ( 0.176)    Loss 0.5329 (0.4951)    Acc@1  70.00 ( 84.06)
INFO:root:[200/312]    Time  0.171 ( 0.179)    Loss 0.4808 (0.4983)    Acc@1  90.00 ( 84.08)
INFO:root:[300/312]    Time  0.172 ( 0.176)    Loss 0.4863 (0.5017)    Acc@1  80.00 ( 83.99)
INFO:root: * Acc@1 89.757 Acc@5 100.000
INFO:root:best_acc is :89.75672149658203, lr:0.005

我此时觉得这个模型应该是已经学习的很好了,但是在测试集效果很差只有0.587,我私以为训练集和测试集应该是近似的,但是不清楚为什么会效果这么差。我觉得或许是投票环节的问题,如果一个nii数据有100个切片,那如果有53个是NC,47个是MCI,那我直接判定是NC,我觉得可能这个有问题。

第五次实验是第四次和第二次的fusion,我将两次实验不同的结果拿出来,看第四次实验的投票比例,如果投票比例大于0.7,我就相信第四次实验,否则就相信第二次实验,结果还不如第二次单独来做好,我就彻底怀疑自己第四次是做错了,还是很不理解为什么会这样,也希望能有人给解答一下,code也准备重新看一遍是哪里出了问题。

报错和思考

dataset中的array问题,dataset Unexpected type  

是在做数据增强时,直接将array放到transform里面会有问题,要先将array变成tensor或者PIL

img = self.crop_1(self.train_jpg[index])
img = Image.fromarray(img)

dataloader中的num_workers问题,这个就没啥,忘记了设成0

CrossEntropyLoss_label_smooth函数中的targets type问题smoothed_labels.scatter_只能int64不能int32      targets = targets.type(torch.int64)

accuracy中的连续值问题,reshape没有内存连续,加上contiguous()

correct[:k].contiguous().view(-1).float().sum(0, keepdim=True)

summarywriter函数的用法,参数用错了

思考

1.训练集问题-数据重复要类似resnet样例一样抽样 2.模型复杂度问题,模型过大了 3.epoch5过少 k折取交叉验证的K取5有点少,这个大概率不会,因为在验证集时的表现很好4.感觉resnet例子前加入attention会好

你可能感兴趣的:(学习,笔记)