kaggle竞赛报告:APTOS 2019 Blindness Detection

记录比赛过程中的所思所想。

1 基线模型

1.1 model 1

地址为
Intro APTOS Diabetic Retinopathy (EDA & Starter)。
这个代码主要使用的是fastai的框架。

1.2 model 2

地址为baseline-APTOS 2019 Blindness Detection。

1.3 model 3

efficientnet-pytorch-ignite

2 基线模型的改进

2.1 数据

存在严重的训练 样本不均衡的问题。
两种方法

  • 将前几年比赛的数据加入进来。
  • 数据增广

2.2 模型

想使用EfficientNet来做训练,这个有现成脚本,但是需要进行模型的预训练,训练和推理也要分开在两个kernel上跑。但是7月1日的早上,看到了大佬的新kernel,于是乎,果断的fork。爽!
在大佬的基础上在做一些TTA,以期望提高识别效果。当然是用EN已经感觉将会有很大的提高。

使用sklearn的

2.3 损失函数

使用Focal Loss来平衡难易样本。

2.4 模型的trick

因为本地没有比较强的算力,所以使用kaggle的kernel来计算结果。
这里使用3个kernel同时运算,计算结果,将所有的结果都输出,然后放到一个脚本中去做推理。

  1. 回调函数
    在fastai框架中使用了early stop和记录最优模型的回调函数,
    先总结下fastai的重要回调函数:
    详细内容可以参考这里。
  • TerminateOnNaNCallback
learn = Learner(data, model, metrics=[accuracy], callbacks=[TerminateOnNaNCallback()])
  • EarlyStoppingCallback
learn = Learner(data, model, metrics=[accuracy], 
                callback_fns=[partial(EarlyStoppingCallback, monitor='accuracy', min_delta=0.01, patience=3)])
  • SaveModelCallback
learn.fit_one_cycle(5,1e-4, callbacks=[SaveModelCallback(learn, every='epoch', monitor='accuracy', name='model')])
  • ReduceLROnPlateauCallback

回调函数在fastai中的使用倒还好,这个focal loss在fastai设置的就问题多了。如果真正想灵活使用fastai还是要将pytorch的基础知识和fastai的代码框架弄明白。

在fastai用的不是很6的情况下,可以使用keras和pytorch在kaggle比赛中使用各种灵活的方法。

2)损失函数
本来使用Focal和Fbeta一起是否会更好一点。

3 结果比对

3.1 列表对比

3.2 结果分析

你可能感兴趣的:(kaggle竞赛报告:APTOS 2019 Blindness Detection)