赛前学习经历
参加Kaggle赛从2020年12月开始,在此之前参加了3次百度飞桨的课程。目标检测7日打卡营、图像分割7日打卡营和论文复现第一期。三个课程都是优秀学员。一般前3%是优秀学员。在论文复现营中复现出了2篇论文。其中ECO这篇的论文复现拿了一个建模高手(第三名复现出论文)。有关ECO复现的一些内容可以看另一篇博客。飞桨论文复现之ECO。论文复现营持续了一个半月的时间,收获还是挺大的。大约5000+的学员参加了这期的论文复现营,最后有不到200位同学拿到了优秀学员证书。其他方面有关深度学习的也看过一些书籍和视频。动手操作方面,有训练过目标检测模型,并且把模型部署在jetson-nano上。也有把百度的paddle-lite模型部署在Android手机上用于检测水果。因为之前的工作是嵌入式方向,对于GPU部署模型、推理等并不陌生。 参加kaggle比赛之前用paddlepaddle框架比较多,对于pytorch框架论文复现的时候一般是把pytorch的代码用paddle复现,所以也掌握一些pytorch框架的使用方法。
第一个kaggle赛-CV分类赛
比赛链接:https://www.kaggle.com/c/cassava-leaf-disease-classification
- 赛题介绍:对木薯叶病叶分类
- 比赛结果:取得银牌 168/3900 进入前5%
- 心理历程:第一次参加kaggle,各方面的流程和方法都不太熟悉,比赛过程中排名也不靠前,坚持下来,最后模型集成,同时设置了类别的权重提交比赛结果。
- 前排方案:
VIT 模型集成,tta的5区域推理(中间和四角的5区域推理),多种类模型集成,bi-tempered logistic loss损失函数,TaylorCrossEntropyLoss。外部数据也就是2019年木薯叶比赛的数据。 - 比赛总结:
这个比赛为什么CNN似乎不行了?为什么tta的5区域推理有效了?为什么VIT类的Transformer模型表现比较好? 1)一个例子,如果是一张图片当中,大部分是健康叶,小部分是病叶。这时候标签肯定是病叶,但是特征提取的结果是健康叶的特征最多。这也是CNN有时会失效的原因。这也是为什么tta的5区域推理能涨分。这方面VIT模型表现要好很多。 2)训练数据当中有一些噪声,也就是错误标签,损失函数的设计能一定程度上解决错误标签的问题。 3)对于类别权重的设计,比如健康叶类别的权重设置的低一些,有利于得到正确的分类结果。
第二个kaggle赛-CV分割赛
比赛链接:https://www.kaggle.com/c/hubmap-kidney-segmentation
- 赛题介绍:这是一场图像分割赛,任务是从医学图像当中分割出肾小球部分。一般采用Unet等分割模型即可。
- 比赛结果:取得银牌 35/1200 进入了前3%
- 心理历程:
本次比赛更新了数据集所以,开始比赛的时间比木薯叶还靠前,在2020年底,结束比赛是在2021年5月初。持续了半年的时间。比较累人,哈哈。2021年2月木薯叶分类赛结束,开始继续这个比赛。在木薯叶赛之前已经进行了一段时间的肾小球分割赛。这是一场持久战,尝试了很多方法,收获颇多。 - 前排方案
大的训练输入图像尺寸,模型集成,外部数据,使用预测结果中间位置的结果 - 比赛总结
该比赛更换了数据集。和之前的数据集相比,新的数据集数据更多,标签更准确。有了新的数据以后大家的分数可以轻松超过0.9。所以想得到更好的结果,最基础的还是数据。首先是外部数据和test数据的伪标签。数据当然是越多越好啦。但是一旦对test数据进行了伪标签处理并加入训练数据当中,线上的LB分数基本失效。这时候构建本地的测试数据尤为重要。所以我们团队用一部分的训练数据和外部数据所为test数据。这个比赛很容易过拟合,尤其是大尺寸训练数据和较深的骨干网络模型。用本地构建的test来判断模型是否过拟合。 使用预测结果中间位置的结果,可以解决边缘识别错误的问题,是个非常有效的提分方法。
|