但是,该领域对“新人”(比如在职业初期的数据科学家)并不是特别“接地气”。除非有毅力和执行力准备长期学习计算机视觉,否则很难掌握计算机视觉行业的入门知识,更不用说开始探索该领域的前沿技术了。
为了让计算机视觉技术对广泛的受众更加友好,我们将多年在这个领域工作中对处理现实世界问题的代码以及心得,都放到一个在 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 展示了如何实现数据科学过程的五个关键步骤,并提供了可用于丰富每个步骤的实用程序:
数据准备: 准备并加载数据。
建模: 使用深度学习算法构建模型。
评估: 评估模型。根据要优化的指标,深入探索不同的评估方法。
模型选择和优化: 调整和优化超参数以获得性能最高的模型。由于计算机视觉模型的计算成本通常很高,因此我们展示了如何无缝地将参数调整扩展到微软 Azure 云平台上。
工程化: 通过将模型部署到 Kubernetes 上,在 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 更多详细信息!