一、数据准备
蛋白质比赛采用了kaggle官网提供的数据集,以及额外的人类蛋白质图谱网站的数据集。
- 人类蛋白质图谱网站:https://www.proteinatlas.org/
二、数据增强
1. 数据增强目的:
- 增加训练的数据量,提高模型的泛化能力。即使拥有大量数据,也需要采用数据增强的方法来提高模型泛化能力。
- 增加噪声数据,提升模型的鲁棒性。
2. 数据增强方法
- 对图片进行比例缩放
- 对图片进行随机位置的截取
- 对图片进行随机水平和竖直翻转
- 对图片进行随机角度的旋转
- 对图片进行亮度、对比度和颜色随机变化
3.自动数据增强方法
自动数据增强方法:Data AutoAugment。
来自谷歌研究人员在arXiv 上发表的论文,提出一种自动搜索合适数据增强策略的方法 :《AutoAugment: Learning Augmentation Policies from Data》。
该论文主要的观点是创建一个数据增强策略的搜索空间,直接在感兴趣的数据集上评估特定策略的质量。在AutoAugment的实现过程中,设计了一个搜索空间,该搜索空间中的一个策略包含了许多子策略,我们为每个小批量(mini-batch)中的每张图像随机选择一个子策略。每个子策略由两个操作组成,每个操作都是类似于平移、旋转或剪切的图像处理函数,以及应用这些函数的概率和幅度(magnitude)。
三、损失函数
比赛损失函数采用gamma值为2的Focal Loss。
1.损失函数来源
该损失函数来自于论文:《Focal Loss for Dense Object Detection》。
该论文的目的是为了探讨为什么one-stage detector相比two-stage detector精度要差。其中one-stage detector和two-stage detector属于目前目标检测的框架。
two-stage detector:基于候选区域的two-stage的检测框架(如:fast r-cnn系列)。
one-stage detector:基于回归的one-stage的检测框架(如:yolo,ssd)。
但two-stage的效果好,one-stage的快但是效果差一些。本论文作者希望弄明白为什么one-stage的检测器准确率不高的问题,作者给出的解释是由于前正负样本不均衡导致。
在目标检测算法中,对于输入的一张图像,可能会生成成千上万的预选框(region proposal),但是其中只有很少一部分是包含真实目标的,这就带来了类别不均衡问题。因此针对类别不均衡问题,作者提出一种新的损失函数:focal loss。
2.Focal Loss原理
(1)算法原理
首先回顾二分类交叉熵损失:
其中 y 是真实样本的标签(1正0负), y’ 是经过 sigmoid **函数的预测输出(数值在0-1之间)。可见普通的交叉熵对于正样本而言(y=1),输出概率(y’)越大损失越小。对于负样本(y=0)而言,输出概率(y’)越小则损失越小。此时的损失函数在大量简单样本的迭代过程中比较缓慢且可能无法优化至最优。
作者由此提出Focal loss函数:
-
首先在原有的基础上加了一个因子,其中Gamma>0使得减少易分类样本的损失(y’r越小,损失越小),使得模型更关注于困难的、错分的样本。
-
在以上基础上,再引入一个平衡因子 Alpha,用来平衡正负样本本身的数量比例不均(即类别不均衡):
这里的两个参数α和γ协调来控制,当Gamma为0时即为交叉熵损失函数,本文作者采用Alpha=0.25,gamma=2效果最好。
(2)有效性
这个损失函数是在标准交叉熵损失基础上修改得到的。 这个函数可以通过减少易分类样本的权重,使得模型在训练时更专注于难分类的样本。 为了证明focal loss的有效性,作者设计了一个模型:RetinaNet,并且在训练时采用focal loss训练。实验证明RetinaNet不仅可以达到one-stage detector的速度,也能有two-stage detector的准确率。
四、模型参数
1.优化器:
- 采用Adam优化器,该优化器来自论文:《ADAM: A METHOD FOR STOCHASTIC OPTIMIZATION》。
- 论文链接:https://arxiv.org/pdf/1412.6980.pdf
2.学习率
- 学习率为0.0005,没有学习率调整。
3.batch-size
- 对于1024x1024图像的大型图像,采用每32个图片来更新一次权重参数,即batch-size为32。
五、评价指标
采用macro F1 score。
(1)F1 Score
F1分数(F1 Score),是统计学中用来衡量二分类模型精确度的一种指标。它同时兼顾了分类模型的精确率和召回率。F1分数可以看作是模型精确率和召回率的一种加权平均,它的最大值是1,最小值是0。
数学定义:F1分数(F1-Score),又称为平衡F分数(BalancedScore),它被定义为精确率和召回率的调和平均数。
(2)macro F1 Score
macro F1 Score是计算出每一个类的Precison和Recall后计算F1,最后将F1平均。
六、模型训练
1.模型:ResNet34,5 fold ensemble with TTA
- ResNet34模型参考于微软研究院论文:《Deep Residual Learning for Image Recognition》
- 论文链接:https://arxiv.org/pdf/1512.03385.pdf
排名分数:Public LB 0.574 / Private LB 0.500
2.模型2inceptionv3: single fold with TTA:
- 参考论文:《Rethinking the Inception Architecture for Computer Vision》
- 论文链接:https://arxiv.org/pdf/1512.00567.pdf
模型排名:Public LB 0.583 / Private LB 0.549
3.模型3:se_resnext50:single fold with TTA
SE 全称 Sequeeze-and-Excitation,SE block 并不是一个完整的网络结构,而是一个子结构,可以嵌到其他分类或检测模型中
[1]. Hu J, Shen L, Sun G. Squeeze-and-excitation networks[J]. arXiv preprint arXiv:1709.01507, 2017.
[2]. Xie S, Girshick R, Dollár P, et al. Aggregated residual transformations for deep neural networks[C]//Computer Vision and Pattern Recognition (CVPR), 2017 IEEE Conference on. IEEE, 2017: 5987-5995.
模
型排名:Public LB 0.601 / Private LB 0.531
这里想特别强调的一点是,Kaggle 在计算得分的时候,有Public Leaderboard (LB)和 Private LB 之分。具体而言,参赛选手提交整个测试集的预测结果,Kaggle 使用测试集的一部分计算得分和排名,实时显示在 Public LB上,用于给选手提供及时的反馈和动态展示比赛的进行情况;测试集的剩余部分用于计算参赛选手的最终得分和排名,此即为 Private LB,在比赛结束后会揭晓。用于计算 Public LB 和 Private LB 的数据有不同的划分方式,具体视比赛和数据的类型而定,一般有随机划分,按时间划分或者按一定规则划分。
这个过程可以概括如下图3所示,其目的是避免模型过拟合,以得到泛化能力好的模型。如果不设置 Private LB(即所有的测试数据都用于计算 Public LB),选手不断地从 Public LB(即测试集)中获得反馈,进而调整或筛选模型。这种情况下,测试集实际上是作为验证集参与到模型的构建和调优中来。Public LB上面的效果并非是在真实未知数据上面的效果,不能可靠地反映模型的效果。划分 Public LB 和 Private LB 这样的设置,也在提醒参赛者,我们建模的目标是要获得一个在未知数据上表现良好的模型,而并非仅仅是在已知数据上效果好。
图1 数据挖掘比赛基本流程
图2 划分 Public LB 和 Private LB的目的