原文:
www.kdnuggets.com/2020/02/using-ai-identify-wildlife-images-serengeti.html
评论
作者: Marek Rogala 和 Jędrzej Świeżewski, PhD, Appsilon
生物多样性研究的机会...
1. Google 网络安全证书 - 快速进入网络安全职业轨道。
2. Google 数据分析专业证书 - 提升你的数据分析技能
3. Google IT 支持专业证书 - 支持你的组织的 IT 需求
摄像陷阱成像(自动拍摄野生动物物种)正成为生物多样性保护工作的黄金标准。它能够以空前的规模准确监测大片土地。然而,这些设备生成的数据量庞大,使得人工分析变得非常困难。随着机器学习和计算机视觉的最新进展,我们获得了解决这一问题的工具,并为生物多样性社区提供了利用由热量和运动触发的系统自动生成的知识潜力的能力。
相较于人类调查员,摄像陷阱虽然干扰较小,但仍然会引起注意
我们最近参加了Hakuna-ma Data,这是由 DrivenData 与 微软地球人工智能 合作组织的比赛,要求参与者构建一个能够跨时间和地点良好泛化的野生动物检测算法。这次比赛与之前的版本不同,研究人员、数据科学家和开发者无法直接访问测试图像集,而是需要提交他们的模型,由活动组织者在 Microsoft Azure 上运行。来自全球的 811 名参与者使用来自 10 个季节的公开数据训练他们的模型,并最终将解决方案提交以在第 11 季的私人数据集上进行测试。
我们祝贺所有的竞争者和ValAn_picekl团队赢得了$12,000 的大奖。我们也很自豪地宣布,我们在最终排名中获得了第五名,并且我们希望分享我们如何实现这一成就。
你可以在准备就绪的 Google Colab 笔记本中体验我们的最终模型,点击这里。
比赛涉及处理大量图像,因此使用一个快速的神经网络框架和强大的 GPU 是必须的。我们从 Google Cloud Platform 中提供了配备足够强大 GPU 的虚拟机(从 Tesla K80 到 Tesla V100,用于最繁重的计算)。通常,我们会并行运行几台机器以加快实验进程。我们使用 Python 代码,协调 GitHub 存储库中的关键代码部分,并使用笔记本快速实验和视觉检查模型的性能。我们在 Fast.ai 中构建了模型(以 PyTorch 为后端),并使用了与Weights & Biases的集成来跟踪我们的实验。
基于之前对数据集的研究,我们决定使用 ResNet 50,这是一个相对中等深度的架构。由于我们在比赛结束前不久才加入,因此选择不尝试其他(或更深)的架构,并在看到这个架构的初步结果令人满意后,决定专注于改进它。
由于时间有限,我们不得不优化我们的策略。我们采用了敏捷方法:迅速创建了我们的基线“ MVP”(最小可行产品)解决方案,然后根据结果进行大量迭代。最初,提交每五天仅允许一次,这给了我们一种自然的冲刺节奏。
数据集本身非常具有挑战性:660 万张照片,分辨率相对较高——数据量达到几 TB。我们使用了一个参与者提供的数据集版本,其中照片的分辨率已经显著缩小(每边缩小了 4 倍)。
数据集非常不平衡——大约 75%的图像为空。最常见的动物是角马、斑马和汤姆森的瞪羚。在光谱的另一端,有像 steenbok 或蝙蝠这样的超稀有动物,仅在少数几张照片中可见。
在自然界中也极为稀有——犀牛是数据集中最不常见的物种之一
我们认为以下 5 个关键因素对我们模型的成功贡献最大:
这对确保模型良好泛化至关重要,因为我们在最后一个赛季——一个私有的、未见过的数据集上进行了评估。每个赛季都来自不同的年份。我们决定将整个赛季(第 8 赛季)留作验证集——我们希望它包含许多图像(近百万张!),且相对较新——因为测试集由尚未公布的第 11 赛季组成。这个选择也得到了对不同物种在赛季间分布的研究支持。我们注意到只有最后三个赛季(第 8、第 9 和第 10 赛季)包含了一些相对稀有物种的照片。
我们将训练过程分为三个阶段。每个阶段都有一部分是仅训练网络的最终层,随后训练所有层。在每个阶段,我们在分辨率逐渐提高的图像上训练模型,使我们可以更长时间地训练而不会过拟合。我们使用的最大分辨率是 512×384,这仍然是提供的每个维度的四分之一。
最终模型在以下阶段进行训练:
-
在 128×96 像素图像上对网络最终层进行 5 个周期的训练
-
在 128×96 像素图像上对所有层进行 5 个周期的训练
-
在 256×192 像素图像上对网络最终层进行 5 个周期的训练
-
在 256×192 像素图像上对所有层进行 5 个周期的训练
-
在 512×384 像素图像上对网络最终层进行 5 个周期的训练
-
在 512×384 像素图像上对所有层进行 5 个周期的训练
这种方法显著加快了我们的训练速度——即使是操作在 128×96 图像上的模型也达到了良好的准确性,而且我们可以比 512×384 模型更快地训练它。此时我们要特别感谢 Pavel Pleskov,这位竞赛参与者以健康竞争的精神,与社区分享了一个缩小版的数据集,节省了我们的下载时间,并允许更多参与者加入。
我们在训练过程中使用了标准的图像增强(水平翻转、小旋转、小缩放、小变形和光照调整),以防止模型在像素级别上过拟合并帮助其泛化。我们使用了Leslie Smith 的一个周期策略来加速训练。
我们从训练集中去除了大部分最常见的类别(例如,95%的空照片),以在训练中更多地关注来自较少见类别的示例。这使得我们可以显著加快训练速度,帮助模型集中于输入空间的挑战性部分。这里的一个警告是需要以智能的方式去除这些示例——保留包含多个动物的示例,因为这些对模型来说更难处理。
一张图片中的多只动物——对 ML 模型的挑战
帮助我们将准确率提升到前列的是深入分析数据和初始模型的结果。我们想要查看哪些图像被误判了,以及在我们预测的置信度范围内发生了什么。为了最小化损失并优化我们的提交结果,我们研究了各个类别并检查了我们最容易出错的地方。
在这个阶段,我们选择从序列中的所有图像中整合简单的推断机制,而不仅仅是单张图像。我们取每个序列中第一张图像的预测(同样根据在验证集上的结果),除非在序列中后来的某张照片中,某个物种的最大预测值更高且超过了某个阈值(这样,我们允许例如“otherbird”类别的鸟在序列后续帧中出现时影响预测)。对于“空”的类别也是类似的,我们取序列中第一张照片的预测值,除非在后来的照片中,该类别的预测值低于某个阈值(这样,如果动物只在之后出现,"空"的预测值就会适当地降低)。
接下来,我们对每个高频出现的物种的预测值范围进行了处理,并进行网格搜索以找到最小化验证集上损失的基本线性变换。这大大提高了分数——很可能是通过使模型返回的概率更好地反映数据集中物种的分布。
我们还有一些其他的想法很想尝试,但由于我们在比赛结束前仅有 3 周时间才加入,所以没有尝试。最值得注意的是:
当前的数据集高度不平衡。相比于我们实现的激进下采样方法(见上文),一种替代方案是使用修改后的损失函数,即焦点损失。虽然**焦点损失**最初是在物体检测的背景下提出的,但最近也在不平衡分类问题中得到了应用。
各种迹象表明,我们的模型可能只是需要更长时间的训练来获得更好的分数。虽然我们对过拟合保持谨慎,但如果有更多的时间,我们希望探索在各个阶段更长时间的训练(见上文)。
我们考虑过使用两阶段的方法,第一阶段的模型关注动物的存在而不考虑其种类,第二阶段的模型则专注于物种分类。这种方法可能会提高准确性,之前的研究也提出过这种建议。由于时间有限,我们选择不尝试这种方法。
比赛后,我们了解到 Microsoft AI for Earth 的 Siyu Yang 和 Dan Morris 在这一领域的伟大工作。他们建立了一种动物检测模型。它识别照片中的动物存在,为正面预测提供边界框。该模型的优势在于它基于来自多个地理位置的数据进行训练。
他们建议了一种非常有趣的方法:使用一个通用模型来检测动物的位置,以及一个项目和位置特定的模型来进行物种分类。一个明显的优点是,第二个模型可以精确关注动物,这显然有可能提高准确性。这种方法在识别图像中的多只动物时也能大有帮助。
在调查我们模型的性能时,我们注意到许多标签错误的例子(例如,图像序列中只看到一条斑马的腿——被标记为空白,但我们的模型以很高的确定性将其分类为斑马)。还有许多在夜间拍摄的图像,人类标注者未发现任何动物,而模型却非常确信看到它们。手动调整这些图像的颜色水平后,黑暗确实揭示了被检测到的动物。这一事实涉及一个非常重要的话题:我们是否应该构建模型来复制标注者的工作(这是比赛规则提倡的方法),还是应关注尽可能好地检测图像中的动物。
比赛让我们深入了解了野生动物图像分类的世界。我们对结果非常满意,并且在这些模型的工作中获得了很多乐趣。我们能够展示和完善我们的计算机视觉技能,这对于我们的AI for Good计划至关重要。我们目前正在为加蓬国家公园管理局构建野生动物图像分类器的试点版本,并将应用我们的新知识。请关注有关我们即将开展的项目的更多信息。我们决心展示人工智能如何对我们共同的生活和世界产生切实的积极影响。
-
在 Twitter 上关注 @Appsilon
-
关注 Appsilon 的LinkedIn
-
注册我们的公司通讯
-
尝试我们的 R Shiny开源包
-
注册 AI for Good通讯
-
我们正在招聘软件工程师
原文。经许可转载。
相关:
-
创建你自己的计算机视觉沙盒
-
从 NeurIPS 2019 中窥探现代 AI 的全貌
-
我们日常生活中的 AI 和机器学习