计算机视觉引起了世界各地企业家的兴趣,这是有充分理由的:现代人工智能技术的能力使以前不可能的想法变成了真正的产品。
对照片和视频中的对象进行检测和分类已在许多不同领域和数百个系统中得到应用——从内置面部识别和基于 X 射线扫描的疾病检测的安全摄像头到简单的移动应用程序。
但介绍已经足够了,在本文中,我想分享计算机视觉产品(尤其是复杂的产品)如何开发的“幕后”。
我有机会参与 Birdsy 的开发工作,这是一款鸟类识别应用程序,适合那些希望看到谁在他们不注意的情况下访问了他们的后院的人。
Birdsy 是一款复杂的人工智能应用程序,具有实时对象检测和分类功能,需要能够在较弱的硬件上运行,高精度检测鸟类类型和性别。
考虑到所有这些,从最初的想法到在应用程序商店中发布应用程序的道路是复杂的,同时又令人着迷。
我们面临着许多障碍——无论是从业务还是开发方面来看——我决定在一个地方分享这些障碍,希望能够帮助可能面临相同项目的企业家和人工智能开发人员。
鸟类经历了数百万年的进化,才能完美地融入环境,以避免捕食者,在这种情况下,鸟类观察者,使它们更难欣赏野生动物。
虽然观察某些鸟类面对......喙可能会出现问题,但在舒适的家中通过摄像机监控它们是享受我们有翅膀的朋友的一种可爱方式,特别是如果人工智能消除了查看数小时视频片段并发送的需要当鸟类进入相机视野时,您会发出警报,自动检测鸟类的种类。
Birdsy 有两个部分:
为了使服务更加平易近人、易于使用,任何相机都可以用于观鸟。这就是我们遇到的第一个问题:低质量的相机,因为它们是最便宜和最普遍的。
虽然“无相机限制”对用户来说很好,但它对我们提出了挑战,因为对象检测模型使用相机芯片组运行。
当有人得到一笔好交易时,其他人就会受到损失,在这种情况下,“其他人”就是我们的简历开发人员。使用廉价的相机意味着使用廉价的芯片组,这使得无法使用默认的神经网络架构。
与允许使用大约 120 层默认 YOLO v4 的顶级计算机视觉视频摄像机 (NVIDIA Jetson Nano) 相比,我们必须使用的摄像机仅允许使用 22 层。
完整的 YOLO v4 神经网络可以提供出色的识别结果,而精简版本则表现不佳。我们对两者进行了测试,并对使用廉价芯片组运行时模型深度如此之低感到不愉快。
我们首先训练默认的 YOLO v4 模型并在客户的数据集上进行测试。我们取得的结果是令人满意的 - 95% mAP,这在计算机视觉领域足以将模式投入生产。
重新训练模型以适应相机参数后,检测质量显着下降。但在机器失败的地方,人类会进步。
我们在测试数据上测试了神经网络,并直观地评估了误报和漏报。这凸显了网络在哪些方面缺乏知识以及在哪些方面犯了最多的错误。
该网络渴望将人,尤其是人的手,视为动物(我们不会责怪它,毕竟人类是动物)。虽然从生物学的角度来看,这是正确的,但最终用户对观察鸟类比观察邻居更感兴趣,因此我们必须努力教导网络忽略人类并专注于鸟类和哺乳动物。
为此,我们添加了反面示例,包括不同角度的人物照片以及人手的照片。
这些摄像机有两种模式:产生全彩色图像的常规日间模式和产生黑白图像的夜间红外模式。当摄像头切换到红外时,模型产生了大量误报:
用户可能不太高兴被通知吵醒,兴奋地看着猫头鹰或狐狸,但最终看到的是飞蛾用身体撞击相机镜头的记录。
为了将睡眠中断减少到最低限度,我们收集了夜间环境中的误报实例并手动标记它们。
您是否听说过社交媒体被称为“精彩片段”,人们可以在其中展示自己最好的一面?谁知道对于野生动物来说也是如此。
可以从 Google 图片和 Youtube 视频等公开来源获得的鸟类照片通常质量很高、非常清晰,并且以最佳状态描绘了标本,看着相机或至少正面放置,鸟类之间没有任何东西并且摄像头遮挡了视线。
现实并不总是那么美好。相机产生的图像质量低下,即使是人眼也很难理解正在发生的事情,雨、雪或灰尘等恶劣的天气条件会阻碍视野,我们确信鸟类会感知到有人想要捕捉它们,并且以最荒谬的方式定位自己。
客户提供的数据集(由在互联网上找到的短图像组成)对于该项目来说没有多大用处。
我们需要使用客户的相机收集一组真实条件下的鸟类图像,向模型展示鸟类的真实样子,而不是它们在社交媒体上的呈现方式。
因此,完成上述所有操作后:
我们已经成功实现了 97.5% 的目标检测 mAP。对于计算机视觉模型来说,这是一个非常高的结果,因为任何投入生产的 CV 模型的不成文规则都是具有超过 94% 的 mAP。
虽然我们现在取得的成果足以用于最终产品,但仍有改进的空间。
为每组收集足够的图像后,我们预计 mAP 会增加并达到 98.5%。
了解后院访客的下一步是将鸟的图像传递给对象分类模型。其目标是识别鸟类及其性别。
由于某些鸟类只生活在某些大陆上,因此我们决定创建两种模型 - 一种适用于生活在北美的鸟类,另一种适用于生活在欧洲的鸟类。
最初,物体分类问题是使用“正面”方法解决的:向网络展示所有不同物种(雄性和雌性)的照片,并试图从中了解它们的样子以及它们与每个物种的不同之处。其他。
这导致准确率非常低,换句话说,网络在识别鸟类和哺乳动物物种时犯了很多错误。
该网络试图同时学习太多方面。许多鸟类看起来彼此非常相似,但彼此之间的区别在于一小片不同颜色的羽毛或不同形状的喙。
在特定情况下,保留所有这些信息以及同一物种的不同性别的外观太困难了。该网络经常会混淆鸟类种类,同时正确确定更广泛的鸟类类型。
例如,头巾莺和肯塔基莺在一块黑色羽毛上的区别:
该网络会将头巾莺标记为肯塔基莺,产生错误的结果,但总体上是正确的:两者都是莺。出于时间考虑,客户认为检测整体鸟类类型而不是特定物种更重要,所以这就是我们的起点。
模型评估后,我们决定实施多阶段方法:
通过对鸟类物种进行分组,我们成功地将类别数量从 98 个减少到 49 个,这大大提高了准确性分数,因为网络根本没有那么多类别可供选择。
当您遇到新概念时,您会阅读书籍或观看教育视频来掌握它。如果你失败了,你可以请你的朋友向你解释,或者你参加一个关于这个主题的研讨会。换句话说,你试图积累更多有关它的信息以更好地理解它。
神经网络也是如此。你越需要了解莺的样子,你需要展示的莺的图像就越多。它查看的数据越多,准确度分数就越高。
我们选择的多阶段方法不仅提高了对象分类模型的准确性,而且还可以分析数据集并确定网络在哪里缺乏学习数据。
对象分类模型启动后,我们惊讶地发现结果比测试结果要糟糕得多:模型无法正确确定鸟类的种类或类型。
问题比这更严重:负责整个项目的计算机视觉开发人员在工作过程中自己了解了所有鸟类物种,但当他收到网络错误标记的图像时,也无法确定这些鸟类是什么。 。
事实证明,七月并不是推出鸟类分类模型的最佳时机,因为这是青少年鸟类学习飞行和离开巢穴的时期。
还记得丑小鸭的故事吗?嗯,对于大多数鸟类来说都是如此,雏鸟看起来一点也不像成年鸟,而且如果它还年轻,很难知道你看到的是哪只鸟。
我们在整个夏天收集了幼鸟的图像,并计划训练分类网络以确定不同年龄的不同鸟类种类。
观鸟者是一群充满热情的人,他们知道如何通过单根羽毛的形状来识别鸟类。它们拥有我们的分类网络梦想拥有的知识,那么为什么不将两者结合起来,形成一个世界上从未见过的鸟类联盟呢?
目前,分类网络不仅告诉用户鸟类的种类,还显示置信度以及其他猜测。
用户可以确认网络的猜测或纠正它,从而帮助我们训练它——一次训练一只鸟。用户反馈系统运行3个月后,我们已经收集了超过2万张图像。这些数据对我们来说非常宝贵,因为这些照片是在现实生活条件下(恶劣天气条件、夜间等)拍摄的,并由专家进行了标记。
值得注意的是,在这个项目中,我们自己也成为了鸟类专家。整天观察鸟类,同时本质上是在教育虚拟孩子不同类型麻雀之间的所有细微差别,使一个人立即成为观鸟社区的白金会员。
如果一切都失败了,我们的简历团队成员可以轻松地在鸟类学领域找到自己的位置。
严肃地说,通过查看数千张鸟类图像,无论是数据集标记还是分析网络在哪里犯了最多的错误,我们都深入研究了这个项目,并得出了另一端不仅有一堆鸟类知识,而且更好地理解复杂的图像识别和分类系统如何工作、如何最好地实现它们、如何分析大型数据集并找到其弱点。
这个项目对我们来说非常宝贵,它为我们提供了研究和使用最新计算机视觉技术、处理实时客户反馈以及在处理过时代码时提高解决问题的能力的机会。