kaggle 蛋白质 第三名kernel 解读1

https://www.kaggle.com/c/human-protein-atlas-image-classification/discussion/77320

https://github.com/pudae/kaggle-hpa

数据集准备:

official + external data.

1/10 的做融合,剩下9/10 做5个交叉验证集, 使用phash and ahash来防止不同切分中的重复图像

输入预处理
我发现,官方和外部图像的平均和stdev的分布是非常不同的。因此,我使用了每个图像的平均值和stddev进行标准化。
增加
我用(https://arxiv.org/pdf/1805.09501.pdf)搜索了合适的数据增强。为了简单起见,我用随机搜索代替rl。
损失
伽玛=2的Focal loss。
训练
Adam优化,学习率为0.0005。
无学习速度调整。
对于具有1024x1024图像的大型模型,我使用了梯度累积,以便每32个例子更新权重。
Early stopping
如果我选择 best macro F1 score  的检查点来预测验证集,lb分数就差。
在分析了每个类的f1分数后,我发现虽然macro F1 score 在增加,但是高比例的class f1分数(如0,1)却在减少。因为依靠罕见的class 分数是危险的,所以我决定在0 class的f1分数下降的时候停止训练。
推论
平均10个check point的权重。
8次TTA
加权平均融合·
阈值
因为罕见的class,macro F1 score对阈值非常敏感。我试过各种方法来寻找好的阈值,但几乎都失败了。
我最后的方法是:
对于每个类,我选择阈值使验证集中的正预测比例与训练中的一样。(感谢lafoss的lb:https://www.kaggle.com/iafoss
模型
512 x512
resnet34:5 fold ensemble与tta:公榜 lb 0.574/私榜 lb 0.500
1024x1024
inceptionv3:单折,tta:公榜0.583/私榜0.549
se_resnext50:单折,带tta:公榜lb 0.601/私榜lb 0.531
从1024x1024开始,使用单个图像的平均值和stddev。
在1024x1024输入的情况下,使用全局平均池对我来说不是很好的性能。..所以我修改了最后一层
删除全局平均池化。
使用1x1卷积计算mxm权重。
使用1x1卷积和sofmax 计算权值映射。
利用权重图,计算加权平均对数。
最后提交的是以上三个预测的组合。
对其他模型进行了培训,但整体效果不佳。
因为我没能制造出稳定的cv,所以我不能肯定上述方法是否有效。在没有稳定cv的情况下寻找好的方法是一个痛苦的过程。因此,我希望能从这种能产生稳定效果的最佳方案中吸取教训。

猜你喜欢

转载自blog.csdn.net/qq_16236875/article/details/88346690