553. BirdCLEF 2023 | birdclef-2023
祝贺所有获奖者!感谢Kaggle和康奈尔鸟类学实验室举办这场有趣的比赛。
这是我个人首次获得的金牌,对此成绩我感到很高兴。
这场比赛与往届BirdClef比赛(2020/2021/2022)有很多相似之处。因此我花了很多时间收集往届比赛中顶尖团队的解决方案。特别感谢大家分享这些重要信息!
让我简要介绍一下我的解决方案,我将在几天后更新更详细的说明。
请查看下方笔记本:
openvino就是你需要的一切!!
以下是我的训练数据:
我原本打算从ebird网站收集更多录音,但意识到ebird数据不公开且无法使用。我咨询了主办方并确认了这一点。感谢@tomdenton解答我的问题。
因此,我的训练流程不包含来自ebird网站的录音。
首先,我使用了SED架构,与大家相同。
骨干网络包括:
它们都使用10秒片段进行训练。
其次,我采用了2021年比赛第二名提出的CNN架构。
骨干网络包括:
除b0外,其余都使用15秒片段训练。b0使用20秒片段训练。
我使用SED模型生成伪标签,并通过分位数阈值提取潜在的nocall(无鸟声)片段。然后我通过听录音对潜在nocall进行人工标注。我标注了约1800条录音,但未观察到改进。可能伪标签包含更多假阳性而非假阴性。我没有时间进一步分析预测结果。
数据增强方法:
我使用基于primary_label和secondary_labels计算的权重来处理数据加载器中的不平衡数据集。
我采用两阶段训练:
两个阶段都先用CrossEntropyLoss训练,再用BCEWithLogitsLoss(reduction='sum')训练。CrossEntropyLoss收敛更快,但BCEWithLogitsLoss得分更高。
为增加多样性,模型使用不同窗口和不同mixup比率训练,部分模型仅用CrossEntropyLoss训练。其中3个模型在30秒片段上微调。
CV与LB没有明显相关性,但提升LB的正确方法似乎不会显著降低CV。因此我在调优时监控CV指标。
对于SED模型,输入10秒片段但仅在中心5秒缩减的CNN图像上应用头部,并使用max(framewise, dim=time)。
此外,SED模型使用tta(2s)测试时增强。
重要提示:将pytorch模型转换为openvino模型可显著减少推理时间(约40%)。(eca_nfnet_l0骨干网络的ONXX无法转换为openvino,因为timm中的stdconv层在前向传播中使用了F.batch_norm的训练模式)。这就是能集成7个模型的奥秘。
我花了很多时间理解评估指标。集成方法如下:
基本上所有单模型在LB上的表现都达到约0.81-0.82,因此各模型权重相似以保持多样性,尽管更高的public LB需要sed v2s和sed b3_ns更大的权重。
观察private LB,加权平均似乎更好。嗯......为什么?