第一次参加kaggle比赛的一些收获与心得,记录一下

时间:2024-04-01 11:45:31

#摘要
虽然陆陆续续接触过深度学习的一些相关知识,但是从来没有系统地学习和总结过。加上之前研究的领域是SLAM(实时建图和定位),没有很好的机会直接应用深度学习技术,实践深度学习的机会也比较少。近段时间希望能够全身心地投入到深度学习的领域中来,于是想要写一系列的博文来记录一下自己的成长。本期的主题就是,第一次参加kaggle比赛的心得,作为kaggle小白,对深度学习框架如pytorch等也不非常熟悉,在第一次kaggle比赛severstal-steel-defect-detection中,取得了314/2436的成绩,还是比较值得纪念的。附上比赛链接和截图:defect-detection,
第一次参加kaggle比赛的一些收获与心得,记录一下
#比赛过程
因为第一次参加,所以我也搜集了一些前人的比赛心得,看了几篇,我觉得这篇心得写得最好。让我印象最深的一点就是,特征工程很重要,其它全没记住,哈哈。
正题开始。我准备参加比赛的时候,可供选择的比赛并不多,加上我想做图像处理相关的比赛,就选了缺陷检测的这个。第一天,我把比赛相关信息都看了一遍,介绍、数据、评估标准等等,然后去discussion把置顶的几条看了一下,这几条还挺关键的,还有一个提供了一个链接视频,是讲如何参加kernel-only的比赛的。
本来想着去github上找一个开源的经典检测的代码,然后在自己电脑上训练。意外发现在Notebook模块,很多大佬开源一些分数相当不错的kernel,而且可以直接提交到比赛后端运行的。对于我们这种小白来说,当真是学习的好机会,也是我会爱上这个比赛的原因,国际友人这种开源、互相学习的氛围当真值得学习。
在开源的kernel中,我选择了一个评分最高的,copy了一下,提交,最后运行成功,首次排名就有了381,这事可让我高兴了一天呢。非常感谢作者,附上作者kernel链接。主要思想就是用3个Unet network,对图像进行预测,再对预测结果去平均;最后,移除小于阈值的区域。作者提出,可以在检测之前添加一个分类器,对是否存在缺陷进行检测,来移除 false positive的预测。
于是,仔细研读了kernel代码,还去下载了分类器的代码,研读了代码,在作者的基础上添加了分类器部分,
第一次参加kaggle比赛的一些收获与心得,记录一下

结果得到了进一步的提升。第一次参加kaggle比赛的一些收获与心得,记录一下
不过,作者说理论上能达到0.91,而我的结果还是只有0.907,我一直无法理解。猜想可能是作者提供的模型不够准确,需要自己下载分类器的模型,然后讲static_dictionary模型序列化,转换为C++和部署用的torch.jit的格式。但是我在配环境的时候,一直报C++编译器 BAI-imcompatible with pytorch,BUG还没解决,比赛已经结束。我的kaggle首战也就到此为止了,有些遗憾。

#展望
0.仔细深入代码的每一句,学习人家的代码框架。
1.比赛还要继续参加,积累经验,努力下一次可以自己搭建一套框架,从训练到测试,而不是套用别人框架。
2.下来努力把CS231上完,希望对深度学习的理论、组件有更加深入的认识。
3.希望自己能在实践中总结出一套特征工程,训练,组件的使用等的tips。