计算机视觉
近年来,计算机视觉取得了非凡的增长,其应用涵盖人脸识别、图像理解、搜索、无人机、地图、半自动驾驶和自动驾驶汽车。这些应用中的许多关键部分都是视觉识别任务,例如图像分类、目标检测和图像相似性。
此存储库提供了构建计算机视觉系统的示例和最佳实践指南。此存储库的目标是构建一套全面的工具和示例,以利用计算机视觉算法、神经网络架构的最新进展,并实现这些系统的操作化。我们没有从头开始创建实现,而是借鉴了现有的最先进的库,并围绕加载图像数据、优化和评估模型以及扩展到云端构建了额外的实用程序。此外,在这个领域工作多年后,我们旨在回答常见问题,指出经常观察到的陷阱,并展示如何使用云进行训练和部署。
我们希望这些示例和实用程序能够通过将从定义业务问题到开发解决方案的体验简化几个数量级,从而显著缩短“上市时间”。此外,示例笔记本将作为指南,并展示在各种语言中使用工具的最佳实践和用法。
这些示例以 Jupyter 笔记本和常用实用函数的形式提供。所有示例都使用 PyTorch 作为底层深度学习库。
示例
此存储库支持各种计算机视觉场景,这些场景既可以在单个图像上操作
也可以是像动作识别这样以视频序列作为输入的场景
<img src=/scenarios/action_recognition/media/action_recognition2.gif "动作识别示例"/>
目标受众
此存储库的目标受众包括具有不同计算机视觉知识水平的数据科学家和机器学习工程师,因为我们的内容仅限源代码并针对自定义机器学习模型。提供的实用程序和示例旨在作为实际视觉问题的解决方案加速器。
入门
要开始,请导航到设置指南,其中列出了如何设置运行此存储库中笔记本所需的计算环境和依赖项的说明。设置好环境后,导航到场景文件夹并开始探索笔记本。我们建议从“图像分类”笔记本开始,因为这会引入其他场景也使用的概念(例如,在 ImageNet 上进行预训练)。
或者,我们支持 Binder ,只需点击此链接即可轻松在网络浏览器中试用我们的一个笔记本。但是,Binder 是免费的,因此只提供有限的 CPU 计算能力,并且没有 GPU 支持。预计笔记本运行会非常缓慢(通过将图像分辨率降低到例如 60 像素可以稍微改善,但代价是准确性较低)。
场景
以下是此存储库中涵盖的常用计算机视觉场景的摘要。对于每个主要场景(“基础”),我们提供了有效构建您自己的模型的工具。这包括简单的任务,例如在您自己的数据上微调您自己的模型,到更复杂的任务,例如困难样本挖掘甚至模型部署。
场景 | 支持 | 描述 |
---|---|---|
分类 | 基础 | 图像分类是一种监督式机器学习技术,用于学习和预测给定图像的类别。 |
相似性 | 基础 | 图像相似性是一种计算给定一对图像的相似度分数的方法。给定一张图像,它允许您在给定数据集中识别最相似的图像。 |
检测 | 基础 | 目标检测是一种技术,允许您检测图像中目标的边界框。 |
关键点 | 基础 | 关键点检测可用于检测物体上的特定点。提供了一个预训练模型来检测人体姿态估计的身体关节。 |
分割 | 基础 | 图像分割为图像中的每个像素分配一个类别。 |
动作识别 | 基础 | 动作识别用于识别视频/网络摄像头片段中执行的动作(例如“跑步”、“开瓶”)以及相应的开始/结束时间。我们还实现了动作识别的 i3d 实现,可以在 (contrib)[contrib] 中找到。 |
跟踪 | 基础 | 跟踪允许随着时间在视频序列中检测和跟踪多个目标。 |
人群计数 | 贡献 | 在低人群密度(例如,少于 10 人)和高人群密度(例如,数千人)场景中计数人数。 |
我们将支持的 CV 场景分为两个位置:(i) 基础:遵循严格编码规范、经过良好测试和维护的“utils_cv”和“scenarios”文件夹中的代码和笔记本;(ii) 贡献:“contrib”文件夹中的代码和其他资产,主要涵盖使用最前沿方法的不太常见的 CV 场景。“contrib”中的代码未定期测试或维护。
Azure 上的计算机视觉
请注意,对于某些计算机视觉问题,您可能不需要构建自己的模型。相反,Azure 上存在预构建或易于定制的解决方案,无需任何自定义编码或机器学习专业知识。我们强烈建议评估这些解决方案是否能充分解决您的问题。如果这些解决方案不适用,或这些解决方案的准确性不足,那么可能需要采用更复杂和耗时的自定义方法。
以下 Microsoft 服务提供了解决常见计算机视觉任务的简单解决方案
-
视觉服务是一组预训练的 REST API,可用于图像标记、人脸识别、OCR、视频分析等。这些 API 开箱即用,只需要最少的机器学习专业知识,但定制功能有限。请参阅可用的各种演示,以了解功能(例如计算机视觉)。该服务可以通过 API 调用或通过 SDK(提供 .NET、Python、Java、Node 和 Go 语言版本)使用
-
自定义视觉是一种 SaaS 服务,可根据用户提供的训练集训练模型并将其部署为 REST API。所有步骤,包括图像上传、标注和模型部署,都可以通过直观的 UI 或通过 SDK(提供 .NET、Python、Java、Node 和 Go 语言版本)执行。只需最少的机器学习专业知识即可训练图像分类或目标检测模型。自定义视觉比使用预训练的认知服务 API 提供更大的灵活性,但需要用户自带并标注自己的数据。
如果您需要训练自己的模型,以下服务和链接提供了可能对您有用的额外信息。
-
Azure 机器学习服务 (AzureML) 是一项帮助用户加速机器学习模型训练和部署的服务。虽然不是专门用于计算机视觉工作负载,但 AzureML Python SDK 可用于将机器学习解决方案可扩展且可靠地训练和部署到云端。我们在此存储库中的多个笔记本中利用了 Azure 机器学习(例如,部署到 Azure Kubernetes 服务)
-
Azure AI 参考架构提供了一组示例(由代码支持),说明如何构建利用多个云组件的常见 AI 导向型工作负载。虽然不是计算机视觉专用的,但这些参考架构涵盖了多种机器学习工作负载,例如模型部署或批量评分。
构建状态
AzureML 测试
构建类型 | 分支 | 状态 | 分支 | 状态 | |
---|---|---|---|---|---|
Linux GPU | master | 已暂停 |
staging | 已暂停 |
|
Linux CPU | master | 已暂停 |
staging | 已暂停 |
|
笔记本单元 GPU | master | 已暂停 |
staging | 已暂停 |
贡献
本项目欢迎贡献和建议。请参阅我们的贡献指南。