420. Cassava Leaf Disease Classification | cassava-leaf-disease-classification
感谢 Kaggle 和主办方举办这次比赛。这是我获得的第一枚金牌,我终于成为了竞赛大师 :)
[更新 2021.03.02]
我犯了一个错误,vit_base_patch16_384 的最后一层不是 multi-drop,而是简单的线性层。我在验证过程中发现了这个 bug。
我的最终提交是三个 ViT 模型的集成;总结如下。
这是我最好的单模型
为了使 vit_base_patch_224(预期图像大小为 224 x 224)适应 448 x 448 的图像,在数据增强后,将其分为四个部分并分别输入模型。然后,在注意力层使用计算出的权重对它们进行加权平均,最后通过 Multi-Dropout Linear 输出预测结果。
尝试了很多预训练模型,但 ViT 模型在 Public LB 上效果最好。图像尺寸越大,CV 分数越高,但我认为这是过拟合。所以我早期放弃了使用大图像尺寸的 Efficient-net 和 SE-ResNeXt 等模型。
我尝试了几种类型的数据增强,但最终采用了简单的一种。原因和选择不大尺寸图像一样,是因为过拟合。
if aug_ver == "base":
return Compose([
RandomResizedCrop(img_size, img_size),
Transpose(p=0.5),
HorizontalFlip(p=0.5),
VerticalFlip(p=0.5),
ShiftScaleRotate(p=0.5),
Normalize(mean=[0.5, 0.5, 0.5], std=[0.5, 0.5, 0.5]),
ToTensorV2(),
])
self.scheduler = LambdaLR(
self.optimizer, lr_lambda=lambda epoch: 1.0 / (1.0 + epoch)
)