返回列表

14th place solution

483. Happywhale - Whale and Dolphin Identification | happy-whale-and-dolphin

开始: 2022-02-01 结束: 2022-04-18 计算机视觉 数据算法赛
第14名解决方案

第14名解决方案

作者:Naoki Kato
比赛排名:第14名

感谢主办方举办这场有趣的比赛,并祝贺所有获奖者。比赛很艰难,但对我来说是一次很棒的经历。

数据集

分别训练了三个Yolov5模型来检测全身和背鳍。
通过改变数据集,分数有了很大提高:原始图像 -> Detic裁剪 -> 全身裁剪 -> 全身/背鳍裁剪。

模型

  • ArcFace模型分别使用全身裁剪(640×640)和背鳍裁剪(448×448)进行训练。ArcFace的参数设置为scale = 25,margin = 0.5(在我的情况下,改进的数据集配合大margin效果很好)。嵌入大小为2048。
  • 还使用了用于物种分类的Focal loss(损失权重 = 0.1)。
  • 骨干网络:Efficientnet-b7 和 ConvNeXt-L
  • 为了使嵌入更具判别力,将特征图乘以以GAP特征作为查询计算出的注意力权重。这仅在Efficientnet上有效。
  • 伪标签:取大约30%的顶部预测(使用更多数据和多次迭代可能会更好)。
  • 蒸馏:使用教师模型的特征作为软目标并计算MSE。这在训练早期极大地提高了性能,但对最终分数的贡献似乎没有那么大,因此采用余弦调度将最终权重设置为0。

数据增强

使用了平均模糊、运动模糊、高斯噪声、饱和度、亮度、对比度、灰度以及仿射变换(翻转、旋转、剪切、缩放和平移)。

训练细节

  • 超参数:AdamW,权重衰减 = 0.05,基础学习率 = 2e-4,带线性预热的余弦调度,批次大小 = 24,配合梯度累积。
  • 使用PyTorch,在单张A100 GPU上训练30个epoch,全身模型大约需要30小时,背鳍模型需要15小时。
  • 最佳单全身模型的Private LB分数为0.781。

后处理

  1. 使用测试图像的特征和每个模型的ArcFace权重计算个体的余弦相似度矩阵。
  2. 然后平均这些矩阵,集成八个全身/背鳍模型。
  3. 使用固定阈值插入new_individual(本应该为每个物种更改阈值)。
  4. 最后,基于余弦相似度的差异和类别平衡的顶部分配程度,切换相邻的顶部预测。

无效尝试

以下方法在我的情况下没有奏效:

  • Elasticface
  • Magface
  • 基于损失幅度设置样本级margin
  • 三元组损失
  • 使用DINO自蒸馏损失的半监督学习(有些效果,但采用了伪标签)
  • 在输入中添加SOD掩码通道
  • 在输入中添加注意力权重通道

感谢阅读。

同比赛其他方案