Azure团队作者

GitHub Repository,让计算机视觉开发更上一层楼

编者按:如今,计算机视觉在许多领域都被广泛应用,且进展非凡。但是计算机视觉的准入门槛对初学者较高,为了对广泛的受众更加友好,微软将多年在计算机视觉领域工作中对处理现实世界问题的代码和心得,都放到了一个开源的 GitHub Repository(以下简称 GitHub Repo)中供更多人使用。本文将为大家介绍这个 GitHub Repo 涵盖的内容、应用场景、代码示例,以及它与微软 Azure 机器学习服务进行的深度集成,欢迎大家使用、交流。

近年来,计算机视觉领域取得了非凡的发展。它在图像理解、搜索、地图绘制、半自动或自动驾驶汽车等领域得到了广泛的应用。然而让计算机视觉模型理解视频中的动作,这在几年前还是无法想象的任务。现在,我们已经可以用相对较高的精度近乎实时地实现这种能力了。

但是,该领域对“新人”(比如在职业初期的数据科学家)并不是特别“接地气”。除非有毅力和执行力准备长期学习计算机视觉,否则很难掌握计算机视觉行业的入门知识,更不用说开始探索该领域的前沿技术了。

为了让计算机视觉技术对广泛的受众更加友好,我们将多年在这个领域工作中对处理现实世界问题的代码以及心得,都放到一个在 GitHub 开源的 GitHub Repository(以下简称 GitHub Repo)中(点击阅读原文查看 GitHub 页面更多详细信息),涵盖内容包括:

  • 基于流行的 Python fast.ai 和 torchvision 的大量文档,jupyter 笔记本和最佳实践指南

  • 使用简单的 “ conda env create -f environment.yml” 命令轻松安装

  • 针对五种不同场景的最新实现:图像分类物体识别,图像相似度,关键点检测和动作识别

  • 优化的参数设置,已被证明可以在各种数据集上很好地工作

  • 先进的数据科学支持,例如硬负数挖掘,多 GPU 超参数调整或模型部署,以及在云上部署 REST API 的解决方案

以下是我们为图像相似度和动作识别所做的示例:

图像相似度:

大多数用于图像相似性的最新系统都使用 DNN 来计算图像表示,然后将两个图像之间的相似度定义为它们各自 DNN 表示之间的余弦距离(L2)。训练通常使用三重学习(Triplet Learning)来实现,如著名的 FaceNet 论文中所建议的。尽管基于三重态的方法具有良好的准确性,但由于诸如如何开采优质三元组的问题,它们在概念上复杂、缓慢,并且难以训练/收敛。

为了避免这些弊端,我们的计算机视觉 GitHub Repo 提出并实现了 BMVC 2019 论文《Classification is a Strong Baseline for Deep Metric Learning》: 通过对标准分类模型进行较小的更改,我们在三个常见的研究数据集上所获得的结果可与以前的前沿技术相媲美或更好。

动作识别:

动作识别是一个活跃的研究领域,每年都会发布大量方法,然而许多前沿方法都是缓慢而复杂的,但准确性却仅有有限的提高。一种突出的解决方法是 R(2 + 1)D 模型,该模型在2019年的论文《Large-scale weakly-supervised pre-training for video action recognition》中进行了描述。R(2 + 1)D 具有很高的准确性,同时比其他方法要快得多,由于计算量大,所以它的速度来自于使用视频帧作为输入,而不是光学流(Optical Flow)。我们的计算机视觉 GitHub Repo 提供了 R(2 + 1)D 的实现,并具有附加功能,可以使用预训练模型或在自定义数据集上训练新模型。

应用场景综述

GitHub Repo 可支持以下全部应用场景:

应用场景

描述

图像分类

图像分类是一种学习和预测给定图像类别的方法。 (例如:照片是“狗”还是“猫”?)


图像相似度

图像相似度是在给定一对图像的情况下计算相似度得分的一种方法。给定一个图像,识别数据集中最相似的图像。 (例如:这张狗的图片最像以下哪些动物图片?)


物体识别

物体识别是一种有监督的机器学习技术,可检测给定图像上目标物体的位置。 (例如:图片中哪里有动物?)


关键点检测

关键点检测可用于检测对象上的特定点。我们提供了一种预训练模型来检测人体关节,以进行人体姿势分析。


动作识别

动作识别用于识别录像中执行的动作以及在各自的开始/结束时间执行的动作。 (例如:视频中何时有人喝酒?)

人群计数

人群计数是一个利用监督的机器学习技术对图像中的人数进行计数的方法,适用于低人群密度(例如少于50人)和高人群密度(例如数千人)。 

我们并没有从零开始创建实现实用程序,而是从流行的最新技术库(例如 fast.ai 和 torchvision)中提取信息,围绕加载图像数据,优化模型、评估模型,然后构建了附加的实用程序。此外,我们也添加了回答常见问题,尝试解释深度学习的本质,并指出常见的研发及应用陷阱。

无论是计算机视觉方面的专家,还是初涉该领域的新手科研及开发人员,相信这个开源的 GitHub Repo 都可以提供帮助。对于初学者而言,它将指导你构建最先进的模型,并帮助开发出一种直观易懂的技术。对于专家而言,它可快速生成强大的基础模型,该基础模型可使用自定义的 Python / PyTorch 代码轻松扩展。我们还在以下方面提供支持:完整的数据科学过程,以及在微软 Azure 云平台上使用的辅助工具。

我们希望这些示例和实用程序能够使开发人员更轻松、更快速地创建自定义视觉应用程序。

完整的数据科学开发流程

开源的 GitHub Repo 展示了如何实现数据科学过程的五个关键步骤,并提供了可用于丰富每个步骤的实用程序:

  1. 数据准备: 准备并加载数据。

  2. 建模: 使用深度学习算法构建模型。

  3. 评估: 评估模型。根据要优化的指标,深入探索不同的评估方法。

  4. 模型选择和优化: 调整和优化超参数以获得性能最高的模型。由于计算机视觉模型的计算成本通常很高,因此我们展示了如何无缝地将参数调整扩展到微软 Azure 云平台上。

  5. 工程化: 通过将模型部署到 Kubernetes 上,在 Azure 的生产环境中对模型进行操作。

我们还添加了多种实用程序来支持常见任务,例如以不同算法期望的格式加载数据集,拆分训练/测试数据以及评估模型输出。

基于微软Azure云机器学习方案

我们的计算机视觉开源 GitHub Repo 还与微软 Azure 机器学习服务(https://docs.microsoft.com/azure/machine-learning/?WT.mc_id=azureai-blog-azureai)进行了深度集成,以拓展线下的建模与研究。并且提供了代码示例,以便用户有选择地、轻松地将训练扩展到云中。

对于某些不需要构建模型的计算机视觉问题,微软认知服务(https://azure.microsoft.com/zh-cn/services/cognitive-services/)可提供不需要机器学习专业知识的人工智能解决方案,例如:

  • 视觉服务是一组经过预训练的 REST API,可用于图像标记、OCR、视频分析等。这些 API “开箱即用”,使用者不需要精通机器学习,直接使用微软研究人员预训练的模型即可。

  • Custom Vision 是一项 SaaS 服务,用于根据用户提供的训练集将模型作为 REST API 进行训练和部署。它可以使用 UI 或 Python SDK 来执行包括图像上载、注释和模型部署在内的所有步骤。只需很少的机器学习知识就可以实现训练图像分类或物体检测模型。与使用预先训练的认知服务 API 相比,自定义视觉提供了更大的灵活性,但它需要用户携带并注释自己的数据。

在使用开源的计算机视觉 GitHub Repo 之前,建议用户先评估一下以上方案是否已经可以充分解决自身的问题。

方案示例:物体识别

下面让我们来进一步了解如何使用 GitHub Repo 构建最新的模型。以下是一个关于物体识别场景的方案示例,用户可以进一步添加自定义 PyTorch 代码,但是入门非常简单:

1.加载数据

第一步是加载数据

from utils_cv.detection.data import DetectionLoader

data = DetectionLoader("path/to/data")

快速确认数据是否正确加载:

data.show_ims()

2.训练/微调模型

创建一个学习对象 (learner object),以帮助管理和训练模型。默认情况下,它将使用 Torchvision 的 Faster R-CNN 模型,但是用户可以轻松地将其替换。

from utils_cv.detection.model import DetectionLearner

detector = DetectionLearner(data)

detector.fit()

3.评估

最后使用内置的辅助函数来评估模型。查看精度和召回曲线,可以使我们对模型的性能有所了解。

from utils_cv.detection.plot import plot_pr_curves

eval = detector.evaluate()

plot_pr_curves(eval)

随着我们继续构建这个开源的 GitHub Repository,今后将“解锁”更多新的计算机视觉方案。如果你希望我们添加某个案例或者应用场景,请随时联系 cvbp@microsoft.com 或直接在 GitHub 上发表评论。

点击 https://github.com/microsoft/computervision-recipes,查看 GitHub Repository 更多详细信息!

微软研究院AI头条
微软研究院AI头条

专注科研19年,盛产黑科技

工程计算机视觉
1
相关数据
深度学习技术

深度学习(deep learning)是机器学习的分支,是一种试图使用包含复杂结构或由多重非线性变换构成的多个处理层对数据进行高层抽象的算法。 深度学习是机器学习中一种基于对数据进行表征学习的算法,至今已有数种深度学习框架,如卷积神经网络和深度置信网络和递归神经网络等已被应用在计算机视觉、语音识别、自然语言处理、音频识别与生物信息学等领域并获取了极好的效果。

机器学习技术

机器学习是人工智能的一个分支,是一门多领域交叉学科,涉及概率论、统计学、逼近论、凸分析、计算复杂性理论等多门学科。机器学习理论主要是设计和分析一些让计算机可以自动“学习”的算法。因为学习算法中涉及了大量的统计学理论,机器学习与推断统计学联系尤为密切,也被称为统计学习理论。算法设计方面,机器学习理论关注可以实现的,行之有效的学习算法。

人工智能技术

在学术研究领域,人工智能通常指能够感知周围环境并采取行动以实现最优的可能结果的智能体(intelligent agent)

数据科学技术

数据科学,又称资料科学,是一门利用数据学习知识的学科,其目标是通过从数据中提取出有价值的部分来生产数据产品。它结合了诸多领域中的理论和技术,包括应用数学、统计、模式识别、机器学习、数据可视化、数据仓库以及高性能计算。数据科学通过运用各种相关的数据来帮助非专业人士理解问题。

自动驾驶汽车技术

自动驾驶汽车,又称为无人驾驶汽车、电脑驾驶汽车或轮式移动机器人,是自动化载具的一种,具有传统汽车的运输能力。作为自动化载具,自动驾驶汽车不需要人为操作即能感测其环境及导航。

计算机视觉技术

计算机视觉(CV)是指机器感知环境的能力。这一技术类别中的经典任务有图像形成、图像处理、图像提取和图像的三维推理。目标识别和面部识别也是很重要的研究领域。

物体识别技术

计算机视觉领域的一个分支,研究物体的识别任务

模型选择技术

模型选择是从给定数据的一组候选模型中选择统计模型的任务。对于具有类似预测或解释力的候选模型,最简单的模型最有可能是最佳选择(奥卡姆剃刀)。

图像分类技术

图像分类,根据各自在图像信息中所反映的不同特征,把不同类别的目标区分开来的图像处理方法。它利用计算机对图像进行定量分析,把图像或图像中的每个像元或区域划归为若干个类别中的某一种,以代替人的视觉判读。

人群计数技术

指从图像中得出人群的计数。主要两种思路:1.使用检测算法找到图像中所有的人;2.抽取图像特征,基于特征作regression,得到图像中人数。

推荐文章
暂无评论
暂无评论~