2-imet-2019-fgvc6 总结

背景:在此数据集中,有大量的艺术作品图像和相关的艺术属性,这些照片通常以物品为中心,而如果博物馆的艺术品是一个完整的房间,那么这些照片是风景优美的。每个照片都有注释,有些噪声可能有噪音,选择F2评分,是为了对嘈杂的标签提供一定的鲁棒性,有利于召回而非精确。

大概有20万的图片,属性有艺术家,日期,大小,文化,

只能在kernel 上运行,结束后将会把你的kernel 用一个新的test 集,大概是原来的5倍。

1 使用泰坦机器,batch会增大,BN加入会提升性能。

2 Focal loss,BCE 也有一样的功能

是在交叉熵损失函数的基础上进行的修改,回顾二分类交叉上的损失:

给不同的类别分配不同的权重,首先在原有的基础上加了一个因子,其中gamma>0使得减少易分类样本的损失,使得更关注于困难的,错分的样本。

例如gamma为2,对于正样本而言,预测结果为0.95肯定不是简单的样本,所以(1-0.95)的gamma次方会很小,这时损失函数数值就变得更小,而预测概率为0.3的样本其损失相对很大,对于负样本而言,预测0.1 的结果应当远比预测0.7 的样本损失值要小的多,对于预测概率为0.5时,损失只减少了0.25倍,所以更加关注这种难以区分的样本,这样减少了简单样本的影响,大量预测概率很小的样本叠加起来后的效应才可能比较有效。此外加入平衡因子alpha,用来平衡正负样本本身的比例不均,文中alpha 取0.25,即正样本要比负样本占比小,这是因为负例易分。

只添加alpha 虽然可以平衡正负正负样本的重要性,但是无法解决简单与困难样本的问题。

gamma 调节简单样本权重降低的速率,当gamma为0 时即为交叉熵损失函数,当gamma增大时,调整因子的影响也在增加,实验发现gamma为2是最优的。

3 one-stage和two-stage 的表现差异主要原因是大量前景背景不平衡导致的,作者设计了一个简单密集型网络RetinaNet来保证速度的同时达到了精度最优。在双阶段算法中,在候选框阶段,通过得分和nms筛选过滤掉了大量的负样本,然后在分类回归阶段又固定了正负样本比例,或者通过OHEM 在线困难挖掘使得前景和背景相对平衡,而one-stage阶段需要产生约100k的候选位置,虽然有类似的采样,但是训练仍然被大量负样本所主导。

4 多标签多类别的分类

激活函数是用softmax还是sigmoid?loss 是用BCE还是categorical-cross-entropy还是Focal loss。度量标准使用F2-score accuracy还是topk 的categorical_accuracy

多标签中softmax 是不太合适的,softmax 只得到一个answer,如果使用sigmoid 以及二元交叉熵损失,将能预测到多个类别。

BCE,Focal,以及categorical CE:

多标签的,BCE要好于交叉熵损失函数

不同的class 使用不同的阈值。F2作为度量标准。

5 1st

数据处理:裁剪:例如600*600,300*500,300*900,300*600.数据增强。

将culture和tags 分开。

loss 不用Focal,换成BCE。

构建了二进制分类的数据集,train的长度变成了数据的长度*1103。提取出来了以下几个特征:

一个模型的可能性:总和,相除,乘法,每个频道的均值,中位数,std,最大值和最小值。

调整每张图片的颜色和亮度。最大边的大小和二进制标志。

在每个epoch中加入之前epoch 中loss 最大的5%的样本

WeightedRandomSampler:根据每个样本的权重选取数据,在样本比例不均衡的问题中,可用它来进行重采样。权重越大的样本被选中的概率越大,待选区的样本数据一般小于全部的样本数目。

模型文化和标签使用不同的阈值,EDA 显示tags 是完全被标记的,culture并不一定,用下列代码将预测结果二进制化。

culture_predictions = binarize_predictions(predictions[:, :398], threshold=0.28, min_samples=0, max_samples=3)
tags_predictions = binarize_predictions(predictions[:, 398:], threshold=0.1, min_samples=1, max_samples=8)
predictions = np.hstack([culture_predictions, tags_predictions])

使用Batch normalization

6 10th

6.1 5 fold 多标签的迭代分层

6.2 seresnext50,seresnext101,pnasnet5large,inceptionv4,senet154,

6.3 数据增强:调整尺寸,随机裁剪,水平翻转,模糊,高斯噪声,色彩值;test 值只调整大小

6.4  第一阶段用BCE,第二阶段用F2

6.5 优化器:Adam,lr=2e-4

6.6 使用 ReduceLROnPlateau,当指标停止提升时,降低学习速率

6.7 batchsize=128

最开始使用了 seresnext50 ,BCE做loss,然后对网络做了一些小的修改,我们的logit接收的最后两层的输出不是最后一层。调整LR 降低后,F2的分数有了显著的提高,

在另一个实验中发现先用BCE训练得到一个最佳模型,然后再使用F2 loss 训练3-5 个epoch 可以提升0.01。

然后跑了以下几个模型:

Seresnext50: 0.6078
Seresnext101: 0.6207 (0.646 on LB)
Pnasnet5large: 0.6066
Inceptionv4: 0.6030 
Senet154: 0.6212 (0.642 on LB)

对上面的模型使用简单的加权平均,裁剪增强和TTA 都没有效果,我们尝试了批量累积,也没有提升很大,我认为大批量和BN 有差不多的效果。

7 2nd place solution

模型:SE-ResNext-50,SE_DenseNet-161 ,6 fold

数据增强:640*640 裁剪到320*320,train是随机裁剪,验证和test 是中心裁剪,包括 随机水平翻转,旋转,gamma ,亮度和对比度,test 中包括原始+翻转的增强。

训练过程:所有的模型训练分为3个阶段:第一个:用冷冻的编码器;第二:整个网络;第三:只使用标签。batch size=512 ,使用adam 优化器,权重衰减为0.01 ,LR=1e-4,然后使用SGD lr=1e-3 。标签平滑和混搭在这次比赛中也发挥了作用。

阈值:culture 和tags 验证的时候使用的是分开的阈值。tags的阈值时候更小一些

清洗和假标签:

我有两个阶段的清洗和伪标签数据集,一处高误差样本和假标签大大提高了公众的LB 评分。

第二层模型:作为第二层模型,尝试使用了lgbm,我们把前30个tags和前20个cultures作为lgmb的数据集,

8 未知名次:

基本思想:数据集包含了许多各种size的图片,所以训练了许多模型然后组合在一起。

level1 :(纯分类模型)

SE-ResNeXt50(1 model) 和SE-ResNeXt101(8 model) 全局平均池化层后面接着是FC,ReLU,Dropout和FC。

数据增强:随机失真(亮度,对比度,饱和度,色调),水平翻转,随机裁剪,随机擦除和PCA 照明。

loss:

我用的焦散度是α=0.75,γ=1.5,这个α 设置是因为f2的权重比精度高。

优化:

优化器:SGD + NesterovAG,动量为0.9,权重衰减为1e-4。 不同的模型lr 和batch size不一样,epoch 为20,阈值:cultures 和tags 是不同的。

level2:合并模型

1 通过类别宽度的MLPs 合并

2 MLP 没有考虑其他类别的输出,所以用了GNN(图神经网络)

3 GNN和MLP整合,考虑了图片的大小

GNN 整合有两个优点:(1) 有9个模型*1103 个class的特征,展开然后放到lgb 中,这样子属于相同类别组的特征的信息就丢失了,然后用了GNN,GNN 可以提取出每个class 的关系。

8 3rd place

validation: 5 fold

model:seresnext50 seresnext101 ,senet154 

预处理:使用了随机大小的裁剪,大小在200到800之间,高度/宽度的比例在0.4 到1.6之间,还使用了水平翻转,随机亮度对比,随机gamma 增强。在实验中我们发现随机擦除和亮度旋转可以提高验证分数。

使用了一些标签平滑技术:用经验分布来平滑,用整体预测来平滑前面方法的经验分布,所有的方法再综合,这里最棘手的是必须优化每个平滑技术的阈值。

loss 函数: FocalLoss,发现tags的噪声比culture 更大,有2倍的错误率,所以在loss 中tags的权重 会是cultures的两倍。由于度量是F2分数,权重更高,所以我们降低了错误的负的预测,忽略了错的正的预测。

训练:

训练分为三个阶段:

只有adam的fc 层,当验证集F2的分数达到0.4 的时候,但是在冻结的encoder 层的太多训练会导致过拟合和模型退化。使用Adam 和学习率衰减直到学习率从1e-4 减小到1e-7。 

一般的工作流程:

用上面所描述的东西,训练出了一个由不同平滑组成的整合模型:seresnext50,seresnext101,, senet154,nasnet,densenet161,

然后丢弃了train中错误率高的样本,然后重新训练se_resnext101 和senet154

 

 

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值