数据

backfin:只保留目标的背鳍特征(通过检测的方法得到的),有点类似人脸关键点的作用。

数据增强使用:

  • 颜色增强:

    random_hue

    random_saturation

    random_contrast

    random_brightness

  • 几何增强:

    random_flip_left_right

  • 离线增强:

    使用显著性目标检测去掉背景,得到无背景(背景变为白色)图片。统计这些图片中白色背景占比,并将占比低于某个阈值的图片取出来,添加到训练集中。

模型

  • EfficientNet-B5/6/7

效果相比ConvNext和SwinTransformer要好一些,且b7>b6=b5

修改:将低层特征与高层特征分别做全局平均池化,将得到的特征向量拼接在一起,作为输入图片编码后的特征向量。

  • ConvNext-Large/Xlarge

效果其次

  • SwinTransformer

效果一般。图像尺寸最大限制为384,可能是这个原因

损失函数

ArcFace(s=15,m=0.3)+SoftMax,s和m这俩参数对于最终结果影响挺大的

训练策略

将数据集划分为5个fold

对于每个fold,训练过程分为两个阶段,第一个阶段使用较小的分辨率(384)和较大的batch szie,第二个阶段加载第一个阶段的训练权重文件,使用较大的分辨率(640)和较小的batch szie,并冻结BN层。

学习率预热

在小数据集上调参,在完整数据集上训练

融合策略

  • 特征层面融合

将相同模型的不同fold进行融合(5个fold的embedding求平均),作为每个模型的结果,再将不同模型的结果进行融合(concat后做normalize),得到每张图片编码后的特征向量

  • 硬投票融合

对每个模型的预测结果进行加权融合

这种方法使用public score作为投票权重,一定程度上可能会过拟合public dataset,然而,在这个比赛中,似乎public和private dataset分布相差

好用但没使用的方法

使用伪标签,提分就像滚雪球一样

使用更大的分辨率(但显存是个问题)

融合更多的模型,比如第一名融了100多个模型(不同数据集,不同骨干网络,不同的分辨率等)

对不同的embedding做加权融合时,使用贝叶斯优化寻找合适的权重(没有了解过)