返回列表

3rd Place Solution

440. iWildcam 2021 - FGVC8 | iwildcam2021-fgvc8

开始: 2021-03-10 结束: 2021-05-28 农业遥感 数据算法赛
第三名方案

第三名方案

作者:JuanCarlosLópezEnriquez
原文发布日期:2021-06-09

这个方案是基于去年参赛者的一些想法构建的,所以我希望我的方案描述对其他人也能有所帮助。

数据集

我使用了 WCS 收集的图像以及 iNat 2017/2018/2021 收集的共享类别图像,并对整个数据集应用了 CLAHE 和 Simple WB 来增强夜间图像。

我在这一组图像上应用了 Megadetector V4 推理(包括 WCS 中标记为 empty 的图像),对于 WCS 数据,我只考虑得分 ≥ 0.3 的检测结果,而对于 iNat 数据集,只考虑检测标签为 Animal 且得分 ≥ 0.95 的结果。然后,我在检测到的边界框周围使用了方形裁剪,其大小等于边界框的最大边长,尽量使动物保持在正方形中心,除非它超出了图像边界。我为每个裁剪分配了原始完整图像的图像级注释标签(物种或 empty),以创建一个 训练边界框数据集,我以分层方式将其拆分(80% 训练 - 20% 验证),并按位置对 WCS 图像进行分组。

训练

我微调了三个带有 ImageNet 预训练权重的模型,训练在不同的图像分辨率下进行:ResNet152 (224 px)、EfficientNetB3 (300 px) 和 EfficientNetB7 (600 px)。

在训练期间,进行了非常简单的数据增强:随机旋转、随机平移、随机水平翻转和随机对比度调整。

地理先验模型

我使用了来自 WCS/iNats 数据集的位置和年度时间信息的 sin/cos 表示来训练一个 地理先验模型,在对 WCS 测试数据进行模型推理时,我将其作为补充的先验信息。为此,我使用了 地理先验模型训练的 TF 实现

测试数据预测

对于 WCS 测试数据,我遵循了与上述类似的方法(CLAHE 和 Simple WB、Megadetector V4、得分 ≥ 0.3 的检测和方形图像裁剪)来创建一个 测试边界框数据集

移动检测

基于 Megadetector 预测的分类管道的主要缺点之一是它会产生大量误检,这些误检有时很难消除。当时间和位置信息可用时,解决此问题的一种方法是使用某种运动检测方案。

在我的实验中,我测试了一种称为“累积平均”的技术,用于找出图像中检测到动物但在时间上没有显示任何明显变化(移动)的区域。因此,如果检测得分 < 0.9 并且在边界框区域中通过序列帧未检测到移动,则该检测被标记为无效。为此,我受到了 MotionMeerkat 项目想法的启发,并使用了他们的一部分 代码 和参数值。

还有其他检测运动的方法似乎更有效(例如基于高斯混合的前/背景分割),但我在这些实验中没有测试它们。

以下是通过该方法正确丢弃(红色)和正确接受(绿色)的检测序列的两个示例:

移动检测示例1 移动检测示例2

模型推理与平均

我在 测试边界框数据集 上分别应用了三个分类模型的推理,将分类器的输出向量乘以每张图像的地理先验模型的输出向量,然后对三个模型的预测进行加权平均。每个模型的权重基于验证集的评估结果。

创建提交文件

为了确定每个序列中存在的物种和个体数量,我执行了以下操作:

  • 我假设每个序列中只存在一个物种,这是根据加权分类器/地理先验对有效检测(未被移动检测方法丢弃且未分类为 empty)的最终输出确定的,这些检测的 分类概率 ≥ 0.5,并将整个序列中重复次数最多(众数)的物种作为 序列物种
  • 个体数量的计算很简单,即取序列中任何图像中存在的有效检测的最大数量。