学习ONNX交易 - 页 13

 

使用 C# 和 OpenCVSharp 进行人脸检测 - 实用 ML.NET 用户组 01/19/2022



使用 C# 和 OpenCVSharp 进行人脸检测 - 实用 ML.NET 用户组 01/19/2022

在 C# 中使用 OpenCVSharp 进行人脸检测的视频教程首先介绍了 OpenCVSharp 库,这是一个用于计算机视觉任务的开源库,带有 .NET 包装器。该视频讨论了使用不同的分类器进行检测(包括眼睛检测),以及实验在分类器选择中的重要性。该教程帮助听众在代码片段、Visual Studio 和 .NET 交互式笔记本的帮助下,使用网络摄像头构建面部和眼睛检测程序。还详细阐述了不同方面,包括如何叠加透明图像和正确处理 mat 对象。演讲者承认 OpenCVSharp 的易用性、速度和与 .NET 的兼容性,但也指出缺乏示例和不确定的长期支持。

  • 00:00:00 在本节中,演讲者介绍了使用 C# 中的 OpenCVSharp 进行人脸检测的主题,并简要概述了 OpenCVSharp 是什么,它是 OpenCV 的 .NET 包装器,OpenCV 是一个用于计算机视觉任务的开源库。演讲者讨论了 OpenCVSharp 的不同功能,包括图像处理、人脸检测和人脸识别模型。演讲者还指出,虽然 OpenCVSharp 的 C# 示例不多,但由于 API 的相似性,有许多 Python 示例可以轻松转换为 C#。演讲者接着列举了一些示例,说明如何使用 OpenCVSharp 在 Python 和 C# 中执行特定任务。

  • 00:05:00 在本节中,演讲者讨论了 OpenCVSharp 的不同风格以及将托管库与本机绑定库配对的重要性。然后,他们演示了一些使用 Visual Studio Code 和 .NET 交互式笔记本、加载 NuGet 包以及使用硬级联 XML 文件执行人脸检测的示例。该代码介绍了引入硬级联分类器并使用它们来检测人脸并在图像中围绕人脸绘制方框。

  • 00:10:00 在本节中,演示者解释了在 OpenCVSharp 中正确处理和处置“mat 对象”以避免潜在内存泄漏的重要性。他们演示了如何加载源图像并创建用于人脸检测的新空“灰度图像”,因为分类器在黑白图像上效果最佳。然后,他们解释了如何使用“cb2 均衡直方图”对图像的亮度和对比度进行归一化,从而改进级联分类。演示者还讨论了如何使用人脸检测的最小尺寸要求来避免误报和伪影。最后,他们展示了如何使用“cv2 rectangle”在检测到的人脸周围绘制一个框并打开一个窗口来显示生成的图像,并使用权重键作为用户关闭窗口的一种方式。

  • 00:15:00 在视频的这一部分,演讲者讨论了他们如何不期望权重键进入,因为他们不需要它来显示静态图像。然而,当他们观看网络摄像头演示时,它会发挥更大的作用。他们还回答了有关默认命名空间的问题,并继续解释他们将如何不仅检测面部,还检测面部的眼睛。他们讨论引入两个级联文件——正面和眼睛级联——以及它们如何循环遍历面部矩形以尝试对眼睛进行额外的检测。他们解释了创建感兴趣区域 (ROI) 和在面部周围绘制矩形的过程。

  • 00:20:00 在本节中,讲师将介绍使用 OpenCVSharp 中的嵌套级联检测面部图像中眼睛的过程。他们采用先前检测到的感兴趣的面部区域,将其转换为灰色,然后专门应用嵌套级联来检测眼睛。通过这样做,他们能够在检测到的眼睛周围画圈,圆的中心点是检测到的眼睛的位置。他们注意到检测到的眼睛的大小应该小于检测到的面部的大小,并且通过一些试验和错误,他们调整了嵌套级联的参数以更好地检测不同大小面部的眼睛。总的来说,虽然这个过程并不完美,但在大多数情况下它可以有效地检测眼睛。

  • 00:25:00 在本节中,演讲者讨论了可用于人脸检测的不同分类器,以及通过实验确定哪种分类器最适合特定情况的必要性。演讲者还承认检测过程中可能存在伪影,并建议在生产过程中使用逻辑来消除它们。然后演讲者继续讨论网络摄像头的使用以及网络摄像头面部和眼睛检测的代码与前面的示例有何相似之处,唯一的区别是视频捕获的引入和窗口对象的创建。最后,强调了在帧之间等待一毫秒以查看是否按下某个键的重要性,因为它极大地影响了网络摄像头每秒捕获的帧数。

  • 00:30:00 在本节中,演示者使用 C# 演示了 OpenCVSharp 中的人脸检测功能。该代码捕获网络摄像头数据并通过在其周围放置一个框来检测主体的面部。演示者解释了权重键,这是 OpenCVSharp 的一个显着特征,窗口必须包含该特征才能显示图像。他们接着回答了一个关于权重键方法何时执行的问题,并描述了它是如何使用的。该部分还包括一个将每秒帧数添加到网络摄像头数据捕获代码的示例。演示者指出了包含重量键的重要性,因为忘记它会导致问题,并演示了如何销毁代码中的所有窗口。

  • 00:35:00 在本节中,演示者讨论了他们如何使用 C# 和 OpenCVSharp 在屏幕上放置文本并控制颜色。他们解释了他们如何为面部和眼睛周围的框定义颜色,并定义另一种颜色称为 fps 颜色,如果帧速率小于每秒 20 帧,则为红色,如果大于或等于 20,则为绿色。他们还演示了权重键延迟的影响以及它如何影响帧速率。他们提到,考虑到其中的所有变量,如果每秒能获得 20 帧或更多帧,他们就会很高兴,这使他们能够实现目前的目标。

  • 00:40:00 在本节中,演示者演示了如何叠加图像并解释了使用不变的 IamReadModes 以保留图像的透明元素的重要性。他们以太阳镜为例,承认代码没有优化,因为他们没有时间让一切都完美。他们还通过硬编码他们希望太阳镜着陆的坐标而不是使用面部矩形的 x 和 y 坐标来作弊。演示者解释说,在现实生活中,需要将 x 和 y 坐标传递给 MakeOverlay 方法才能知道将叠加层放置在何处。此外,他们提到了需要使用 Resize 方法来根据矩形的大小来调整叠加图像的大小,但这在他们的作弊示例中不是必需的。

  • 00:45:00 在本节中,演讲者解释了将透明叠加图像合并到基础图像上的过程。首先,将透明叠加图像转换为 RGB,同时保留透明通道。然后,从原始叠加层中提取 RGB 通道并合并到新地图中。之后,通过将透明通道复制三次到一个名为“overlay alpha 3 channel”的新贴图并执行按位运算,将透明通道与新贴图合并。最后,定义放置太阳镜的感兴趣区域,提取人脸矩形作为融合太阳镜的感兴趣区域。

  • 00:50:00 在本节中,演讲者简要说明了使用 OpenCVSharp 将太阳镜添加到检测到的人脸的过程。他们使用按位运算将太阳镜放在检测到的人脸之上,保持透明度,然后将人脸放回原来的位置。演讲者还强调了 OpenCVSharp 的一些优点和缺点,例如它的易用性、速度和与 .NET 的兼容性,但缺乏示例和不确定的长期支持。演讲者提供各种资源并鼓励用户赞助 GitHub 上的 OpenCVSharp 项目。一位参与者询问 OpenCVSharp 是否可以在 Raspberry Pi 等微控制器上运行,演讲者回答说它应该可以在 Linux Arm 风格上运行。
 

使用 ML.NET 预测自定义视觉 ONNX 模型



使用 ML.NET 预测自定义视觉 ONNX 模型

在此 YouTube 视频中,演示者讨论了使用 ML.NET 对自定义视觉 ONNX 模型进行预测。这涉及从自定义视觉服务中导出模型并将其导入到 ML.NET 项目中。实现包括调整图像大小、提取图像像素、创建数据上下文和空数据列表以加载图像数据、使用 ML.NET 框架对模型进行预测并输出结果。该视频还演示了如何使用名为 Neuron 的工具获取模型的输出名称,以及如何从模型获取给定测试图像的边界框信息。演示者还展示了如何在边界框周围绘制一个矩形并使用图形 API 显示预测标签。使用 ML.NET API 和图像大小调整的 ONNX 模型的实现被强调为实现中最重要的部分。

  • 00:00:00 我们将使用 ML.NET 框架来预测自定义视觉 ONNX 模型。为此,我们需要先从自定义视觉服务中导出模型并将其导入到我们的 ML.NET 项目中。一旦模型在我们的项目中,我们就可以创建一个管道,在对模型进行预测之前调整图像大小并提取图像像素。为此,我们需要下载几个 NuGet 包并将其添加到我们的项目中,以及创建一个新的数据上下文和空数据列表来加载图像数据。最后,我们使用 ML.NET 框架对模型进行预测并输出结果。

  • 00:05:00 在本节中,演讲者讨论了使用名为 Neuron 的工具来获取从 Custom Vision 下载的模型的输出名称。 Neuron 是一个小型桌面应用程序,可提供有关模型的信息,包括输入和输出。获取输出名称后,可以在调用转换应用模型时将其用作输出列名称。演讲者还演示了如何创建预测引擎并使用辅助方法从给定测试图像的模型中获取边界框信息。

  • 00:10:00 在本节中,演讲者通过演示如何获取边界框、在其周围绘制矩形以及使用图形 API 显示图像的预测标签,继续实施对象检测模型。获得最大置信度以获得顶部边界框,其中仅考虑具有最大置信度的边界框。该代码还使用辅助方法绘制矩形,并返回描述字符串以指示置信度百分比。最后,将测试图像保存到文件系统中以备将来参考。演讲者强调,实施的最大部分是调整图像大小和使用 ML.NET API 应用 ONNX 模型。
 

使用 ONNX 使神经网络可移植



使用 ONNX 使神经网络可移植

在此 YouTube 视频中,Ron Dagdag 解释了如何使用 ONNX 使神经网络可移植,重点是机器学习的推理方面。 ONNX 是一个开源框架,允许跨各种处理单元和设备的机器学习模型的可移植性。演讲者讨论了将模型转换为 ONNX、部署模型并将其与应用程序集成以及将其用于云和边缘部署的过程。他们还演示了如何在 Node.js 中加载 ONNX 模型,以及如何使用 ONNX Runtime 将图像分类模型集成到 Web 和移动应用程序中。 ONNX 模型是一种开放标准,可以从各种框架创建,以便在目标平台上高效部署。

  • 00:00:00 在本节中,Ron Dagdag 介绍了通过 ONNX 使神经网络可移植的概念,重点放在机器学习的推理方面。他解释了编程与机器学习的典型过程,以及对训练数据、训练框架、模型和推理运行时创建算法的需求。他还提到,演示的重点将放在推理方面,使用 ONNX 将模型整合到应用程序中。

  • 00:05:00 在本节中,演讲者介绍了 ONNX 作为一个框架,它允许机器学习模型在各种处理单元(如 CPU、GPU 和 FPGA)以及云或物联网等不同设备之间的可移植性。他们将其与 PDF 进行比较,因为它是一种可以在任何地方使用的格式,并且在 GitHub 上是开源的,已经获得了超过 11,000 颗星和 200 名贡献者。演讲者建议在处理用 Python 训练的模型时使用 ONNX,这些模型需要与其他应用程序一起部署或需要高推理延迟,例如在 Azure Percept 等边缘设备上运行。

  • 00:10:00 在本节中,演讲者讨论了需要将在特定操作系统 (OS) 或硬件上编程的应用程序转换为在不同的操作系统或硬件上运行的情况。解决方案是将程序转换为 ONNX 格式。当运行从不同框架创建的模型以及训练时间过长时,将使用 ONNX。演讲者接着详细介绍了四种获取 ONNX 模型的方法,第一种是 GitHub 上的 ONNX 模型动物园。接下来是自定义视觉服务,从现有模型转换,并使用 Azure 机器学习或自动机器学习进行训练。

  • 00:15:00 在本节中,演讲者讨论了将模型转换为 ONNX 的过程。该过程不限于用 Python 编写的模型,也可以使用 ML.NET 完成。演讲者演示了如何转换 ML.NET 模型,然后将其保存到 ONNX。有许多可用模型已转换为 ONNX,包括图像分类和对象检测模型。 Custom Vision Service 还可用于上传图像并对其进行标记以对不同类型的对象进行分类。 GitHub 提供了一个名为 Netron 的应用程序,它允许软件工程师可视化 ONNX 模型的外观,包括它的输入和输出。演讲者解释说,还可以通过从 PyTorch 或 TensorFlow 转换生成 ONNX 模型。

  • 00:20:00 在本节中,演讲者演示了如何生成回归模型并将其导出到 ONNX,这是一种开源格式,可以在使用不同的机器学习框架时实现可移植性。使用 C# 和 ml.net,演讲者将薪水数据加载到数据框中并训练回归模型,使用管道指定标签列和输入(经验年数)。评估模型后,他们通过将模型、样本数据和流传递到上下文将其转换为 ONNX,生成一个可以使用 Netron 查看的文件。演讲者指出,ONNX 还可以用作中间格式,在 PyTorch 和 TensorFlow 等框架之间转换机器学习模型。

  • 00:25:00 在本节中,演讲者讨论了将 ONNX 模型部署和集成到应用程序中的过程。将模型转换为 ONNX 可以实现跨不同框架的兼容性,用户还可以使用 ONNX 模型进行迁移学习和微调。演讲者强调了版本控制和拥有模型注册表的重要性,就像容器注册表一样,以便于跟踪和部署。此外,演讲者强调了数据科学家构建“食谱”所需的不同技能组合与工程师开办“面包店”并将 AI 集成到应用程序所需的技能组合。演讲涵盖支持部署 ONNX 模型的各种框架和平台,例如 Azure 机器学习、Ubuntu 或 Windows Server,以及物联网边缘设备。

  • 00:30:00 在本节中,演讲者讨论了机器学习模型的部署,涵盖云端和边缘部署。演讲者表示,边缘部署是关于数据处理离用户有多近,比云端近得多。在边缘运行 AI 是低延迟和节省成本的理想选择,因为它可以在本地处理数据而无需上传到云端。此外,在本地运行更加灵活,可以确保隐私合规性,这在处理禁止在网络外共享图像的规则时尤为重要。为了方便机器学习模型在边缘的部署,微软开发了开源的ONNX运行时,它不仅支持神经网络,还支持传统的机器学习规范,可以进行高性能推理,并且具有硬件加速器的可扩展架构。

  • 00:35:00 在本节中,演讲者讨论了如何使用 ONNX 使神经网络可移植。 ONNX 运行时允许用户在不同的处理单元上运行模型,包括 GPU、CPU 和 VPU,它可以在各种平台上使用,例如 Windows、Web 浏览器、Node.js 和 React Native 应用程序。演讲者演示了如何在 Node.js 应用程序中加载 ONNX 模型以及如何传递输入值以接收所需的输出。通过使用 ONNX 运行时,开发人员可以轻松地将机器学习模型整合到他们的应用程序中,而无需担心硬件兼容性。

  • 00:40:00 在本节中,视频讨论了 ONNX Runtime Web,这是一个 JavaScript 库,旨在使用优化的 WebAssembly 和 WebGL 技术直接在浏览器中运行 ONNX 模型。这种在浏览器中进行推理的方法更快、更安全、更便宜,同时还允许离线使用。但是,对于需要特定硬件规格的较大型号,它可能效率不高,并且可能导致下载时间更长。该视频提供了一个使用 ONNX Runtime Web 分析婴儿哭泣图像的示例,演示了如何将模型集成到 HTML 文件中并使用运行时执行。

  • 00:45:00 在这部分视频中,演示者演示了如何使用 ONNX model zoo 和 ONNX runtime web 将图像分类模型集成到 web 应用程序中。他将图像上传到 Web 应用程序并调整大小并将其转换为灰度和张量以为预训练模型做准备。使用 ONNX 运行时网络加载模型并提供处理后的图像,从而预测图像中表达的情绪。然后演示者演示了在 React Native 应用程序中对预训练的 ONNX 模型进行评分。

  • 00:50:00 在本节中,演讲者讨论了使用 ONNX runtime mobile 作为在 Android 和 iOS 平台上运行优化的 ONNX 模型的轻量级推理解决方案。要将 ONNX runtime mobile 集成到应用程序中,可以使用 npm install ONNX runtime react native,这会将二进制大小最小化为一种称为 ort 格式的预优化 ONNX 模型。 onnxruntime.ai 提供的教程逐步解释了如何使用节点、网络浏览器、React Mobile 等各种平台部署 ONNX 模型。兼容性图表显示 Chrome 在 Windows 10、macOS、Ubuntu 上支持 Web Assembly 和 WebGL 、iOS 和安卓系统。 ONNX 模型是一种开放标准,可以从各种框架创建,以使用正确的工具在目标平台上高效部署。
 

关于 .NET Live - AI 无处不在:Azure ML 和 ONNX 运行时



关于 .NET Live - AI 无处不在:Azure ML 和 ONNX 运行时

视频“On .NET Live - AI Everywhere:Azure ML 和 ONNX Runtime”重点介绍了使用 Azure ML 和 ONNX Runtime 通过 C# 进行机器学习。演讲者讨论了使用 ONNX 格式跨编程语言导出模型的好处、ONNX 运行时对硬件加速和推理的优化,以及它与特定版本框架的兼容性。他们还展示了如何在 Python 和 .NET 中将 ONNX Runtime 与 Azure ML 结合使用,创建和训练神经网络模型,并解释推理及其在机器学习中的最后一步。该视频最后介绍了一个新的 ONNX 运行时提供程序,允许将 OpenVINO 用于 ARM CPU,提供调试功能。

在视频的这一部分中,主持人讨论了 ONNX 运行时的灵活性和可配置性及其在各种硬件和软件平台上运行的能力。 ONNX 运行时被视为不同平台的出色包装器,因为客户可以在云、Android、iOS 或 Snapdragon CPU 上使用它,并且它允许更快的推理。

  • 00:00:00 在本节中,主持人介绍了嘉宾Maro Benici,他是一位在人工智能(AI) 方面有经验的意大利.NET 开发人员。本集将重点介绍如何将 Azure ML 和 ONNX Runtime 与 C# 一起使用,以继续研究机器学习。在相关位部分,他们讨论了 Azure 机器学习站点上关于在 .NET 中使用 AutoML ONNX 模型进行预测的文档,该文档与当天的主题密切相关。

  • 00:05:00 在本节中,演讲者讨论了将机器学习模型导出为 ONNX 格式的选项,以便使用 Azure 机器学习中的 Automl 中的组件跨框架共享模型。为了在 .NET 中执行推理,使用了 ONNX 运行时包,ml.net 使用 ONNX 模型执行预测管道。介绍了用于理解模型输入和输出的工具 Netron,并演示了为输入和输出创建类。最后,定义包含模型的管道,并通过引擎运行输入实例以进行预测,结果输出为预测票价。演讲者随后简要介绍了一篇有关使用 ONNX runtime with Stable Difussion 生成 AI 图像的相关文章。

  • 00:10:00 在本节中,演讲者讲述了技术在过去 15 年中的发展历程,从定制硬件到数据中心和云计算。他举例说明了他在 2006 年的第一个项目,该项目涉及在葡萄园中捕获矿物的手工传感器,以及如何将数据存储在便携式硬盘上并运送到实验室进行分析。今天,同样的项目可以用手机完成,数据在云端收集并实时分析,从而实现即时警报和调整。演讲者还讨论了向云的迁移如何为企业带来机会,基于云的服务现在可供以前仅限于本地计算的客户使用。

  • 00:15:00 在本节中,演讲者讨论了使用不同编程语言构建和部署机器学习模型的客户所面临的挑战。他解释说,创建 ONNX 格式是为了解决这个问题,允许客户以一种可以用不同编程语言重新加载的语言保存他们的模型。他继续解释说,ONNX 可以导出神经网络中各层的数学函数和值,从而可以轻松地在不同语言之间进行转换。演讲者强调,ONNX 正在被许多公司使用,这使得外包代码和使用了解不同编程语言的不同公司成为可能。

  • 00:20:00 在本节中,视频讨论了 ONNX 框架及其在不同平台和编程语言上导出和运行机器学习模型的用途。 ONNX 框架允许用户导出模型并运行它们,而无需重新加载库或框架,使可能不了解 Python 和 TensorFlow 的客户更容易上手。 ONNX 运行时是开源的,可以在 GitHub 上获取,用户可以选择自己喜欢的语言和架构来运行模型。该视频还谈到了操作集兼容性及其受到的影响,因为确保与特定版本框架的兼容性至关重要。

  • 00:25:00 在本节中,演讲者讨论如何确保 AI 模型中使用的数学函数与 ONNX 运行时库兼容。他们建议使用最新版本的库,它支持模型中的所有操作。他们还提到最近对 ONNX 文档进行了更新,可以更好地了解哪些应用程序受支持,哪些不受支持。如果不支持数学函数,则会生成警报,并通知用户不支持哪个偏移量。演讲者还讨论了 ONNX 运行时库的优势,例如 GPU 的硬件加速和 AI 模型的优化。

  • 00:30:00 在本节中,演讲者讨论了 ONNX 运行时的优化以及将其用于训练和推理的能力。借助 ONNX,无需从头开始,就可以优化培训过程并适应定制硬件。演讲者还确认 ONNX 运行时可用于优化训练硬件,同时可以选择其他硬件进行推理。总的来说,演讲者强调了为任何硬件环境创建和训练模型的能力以及 ONNX 运行时的灵活性。

  • 00:35:00 在本节中,演讲者讨论了使用 Azure ML 和 ONNX Runtime 创建用于对花卉进行分类的神经网络。他们首先选择在标准 S11 机器内运行的应用程序进行测量。然后,他们使用他们公司普遍使用的Tensorflow,并选择了pandas、NumPy等预处理工具。他们讨论了将字符串编码为矩阵并在训练和测试之间拆分数据集。他们最终创建了神经网络,并以 ONNX 格式对其进行编码,以便可以在客户的数据中心中使用。

  • 00:40:00 在这部分视频中,演讲者解释了使用 Azure 机器学习和 TensorFlow 训练神经网络模型的过程。他演示了如何编译模型并在评估模型性能之前优化准确性。模型训练完成后,他展示了如何将模型导入 TensorFlow,为客户创建新模型。为了方便客户,他定义了输入规格并命名了输入和输出。他还解释了在将模型交付给客户之前将模型转换为 ONNX 格式进行测试的好处。

  • 00:45:00 在视频的这一部分,演讲者展示了如何在 Python 和 .NET 上将 ONNX Runtime 与 Azure ML 结合使用。他们在 Python 中导入 ONNX 一次,选择一个提供者,然后加载 ONNX 运行时以使用,同时忽略 TensorFlow 模型。在运行模型以获取输出之前,他们创建输入并为其提供数组值。此外,演讲者还展示了如何创建端点以直接在 Azure 上公开 ONNX,以及如何使用 .NET Core 上的控制台应用程序在 IoT 设备或智能手机上使用 ONNX。

  • 00:50:00 在本节中,主持人解释了推理的概念,这是机器学习的最后一步,其中经过训练的神经网络用于根据从未见过的新数据预测结果。他们还讨论了 ONNX 格式,它可以将任何自定义张量模型转换为 ONNX Runtime 支持的格式。他们提到,模型的前处理和后处理也可以序列化到 ONNX 模型本身,从而更容易在各个平台上运行。主持人演示了一旦加载模型,不同语言的过程是相似的。

  • 00:55:00 在本节中,演讲者讨论了为 ONNX 运行时提供的新供应商,这使得可以将 OpenVINO 用于 ARM CPU,从而实现调试。演讲者强调了这一点的力量,指出当模型被支持并且可以运行时,不需要更改代码,并且可以运行相同的模型而无需不断地转换它。演讲者指出,虽然为模型选择硬件是必不可少的,但它不是 ONNX 运行时控制的东西,在运行模型时做出的决策需要考虑硬件要求。此外,演讲者提到可以在集群上使用 ONNX 运行时,并且推断不需要每次都转换模型。
 

柏林流行语 2019:Lester Solbakken – 在搜索中扩展 ONNX 和 TensorFlow 模型评估



柏林流行语 2019:Lester Solbakken – 在搜索中扩展 ONNX 和 TensorFlow 模型评估

Lester Solbakken 讨论了为搜索应用程序扩展机器学习的挑战,并提出了使用外部模型服务器的替代解决方案。他建议在内容节点上评估机器学习模型,而不是将数据发送到外部模型服务器,以提高可扩展性并控制延迟和吞吐量。 Solbakken 强调了 Vespa 使用自己的排名语言和张量 API 扩展,以便轻松地为应用程序创建声明性状态包,以及在 Vespa 中支持机器学习模型的持续努力。他强调了解排名不同阶段之间的相关性以避免系统级检索问题的重要性,并鼓励人们为开源项目做出贡献。

  • 00:00:00 在视频的这一部分,Lester Solbakken 讨论了专门针对基于搜索的应用程序扩展机器学习生产的挑战。他解释了模型服务器如何在解决性能和可扩展性问题方面变得越来越流行,但对于搜索应用程序来说,为每个搜索结果评估模型很快就会导致网络容量出现瓶颈。解决方案是要么发送更少的结果数据,要么找到一种方法在本地为每个服务器评估模型。 Solbakken 谈到了他的团队使用 Vespa 搜索平台来解决这些问题的工作。

  • 00:05:00 在本节中,Lester Solbakken 讨论了扩展 ONNX 和 TensorFlow 模型评估以进行搜索的挑战。一种可能的解决方案是将特征发送到模型服务器,但问题是内容和模型服务器可能会根据不同的特征集评估排名,这会降低获得全局最佳结果的可能性。相反,Solbakken 建议在内容服务器上评估模型以获得更好的结果,这在 Vespa 已经进行过。 Vespa 在全球范围内每秒大量使用数十万个查询,并运行着数百个美国出版物,它具有丰富的核心功能,包括弹性、可扩展性和高级相关评分的能力。

  • 00:10:00 在本节中,Lester Solbakken 讨论了 Vespa 如何集成 ONNX 和 TensorFlow,以便轻松地为应用程序创建声明性状态包,从而轻松使用机器学习模型。 Vespa 使用自己的排名语言来执行这些模型,张量 API 扩展提供了一小组核心功能,可以代表不同类型的计算。这样做的好处是可以将来自不同来源的不同模型转换成这种格式,从而更容易优化它们。 Solbakken 还强调了他们设置的基准测试,以测试发送数据效率不高的假设,模拟博客推荐系统,他们在第一阶段使用点积,在第二阶段使用神经网络。

  • 00:15:00 在本节中,演讲者讨论了用于搜索中机器学习的外部模型服务器的可扩展性限制,并提出了替代解决方案。他解释说,添加额外的内容节点来分配工作负载可以改善延迟,并建议通过让这些节点重写更多的文档,您可以增加机器学习模型的结果数量,从而可能获得更高质量的结果。通过多阶段排名,评估在内容节点上完成,而不仅仅是通过网络推送,可以扩展和控制延迟和吞吐量。演讲者得出结论,外部模型服务器不是扩展的好解决方案,并强调了在内容节点上进行评估的重要性。

  • 00:20:00 在本节中,Lester Solbakken 谈到了 Vespa 中的多阶段排序以及了解不同阶段之间的相关性以避免系统级检索问题的重要性。他还提到机器学习和 Vespa 中的模型支持是一项持续的努力,并鼓励人们为开源项目做出贡献。对于那些有兴趣玩 Vespa 的人,他们可以在 Vespa AI 主页上找到许多资源,包括示例应用程序、用例和教程。
 

吸收 ONNX



吸收 ONNX

在此视频中,演示者介绍了 ONNX 作为机器学习互操作性的开放标准,可以在所有不同平台上工作。他们经历了从头开始创建 ONNX 项目、调整 Microsoft 存储库中的示例、解决问题以及探索其他与 ONNX 相关的 Github 项目的过程。然后,他们使用 GPT2 和 CUDA 测试 ONNX 绑定,表示有兴趣在未来进一步探索 ONNX 运行时 Rust 绑定。演示者注意到 ONNX 的多功能性和可移植性,并将其视为未来进行实验和构建更多实质性项目的好工具。

  • 00:00:00 在本节中,演讲者介绍了 ONNX,这是一种机器学习互操作性的开放标准,允许使用许多不同的框架和加速器对云服务进行推理。他们提到了使用跨平台高性能 ML 推理和训练加速器围绕 ONNX 运行时的安全包装器的可用性。他们还强调了与 ONNX 相关的可移植性,因为它可以在所有不同的平台上工作,并演示了如何使用 Microsoft Branch 中的示例从头开始创建新的 ONNX 项目。演讲者指出,随着 ONNX 的积极开发和持续集成,它提供了一个很好的机器学习工具。

  • 00:05:00 在视频的这一部分,演示者导航到 ONNX 网站以获取最新版本并创建 ONNX 运行时。他们还展示了如何从 Microsoft repo 复制和调整示例并添加 makefile。此外,他们在代码中集成了tracing subscriber和gbt,并添加了squeeze net模型。演示者遇到了一些错误,但通过检查前面的示例并确保可以使用正确的模型来解决这些错误。

  • 00:10:00 在本节中,演讲者正在解决他们尝试使用特定版本的 ONNX 但遇到错误的问题。他们尝试了各种方法来解决问题,例如复制一个工作示例并重建项目,但似乎都没有用。最终,他们在 ONNX 文档中找到了一个适用于他们所需版本的旧示例。他们换出模型并能够成功编译和运行程序。总的来说,本节强调了彻底检查依赖关系以及在调试时愿意尝试不同解决方案的重要性。

  • 00:15:00 在视频的这一部分,演讲者讨论了基本的“Hello world”ONNX 示例的局限性,并建议有一个加载和操作图像的示例会更有用。他们重点介绍了其他一些与 ONNX 相关的 Github 项目,例如 Rust Code Search 和 Track ONNX ,它们具有更高级的功能,并表示有兴趣试用它们。此外,他们探索了 GPT-RS 项目,该项目支持将 GPT2 模型与 CUDA 结合使用,并解释了它如何可能用于处理图像数据。

  • 00:20:00 在本节中,用户使用 GPT2 和 CUDA 测试 ONNX 绑定,为代码完成或文本完成生成测试输出。用户发现此示例很有前途,并表示有兴趣在未来进一步探索 ONNX 运行时 Rust 绑定。他们将他们的经验总结为一个有趣的实验,并表示希望在他们下一次使用 ONNX 的尝试中构建更实质性的东西。
 

HITNET 与。 ACVNet 神经立体深度估计比较 (ONNX)



HITNET 与。 ACVNet 神经立体深度估计比较 (ONNX)

Driving Stereo 数据集中 HITNET 和 ACVNet 立体深度估计模型的比较。

模型推理详细信息(NVIDIA 1660 SUPER):
HITNET(640X480):220 毫秒
ACVNet (640x384):480 毫秒
参考资料:【HITNET推理】 https://github.com/ibaiGorordo/ONNX-HITNET-Stereo-Depth-estimation
[ACVNet 推理] https://github.com/ibaiGorordo/ONNX-ACVNet-Stereo-Depth-Estimation
[驾驶立体数据集] https://drivingstereo-dataset.github.io/

GitHub - ibaiGorordo/ONNX-HITNET-Stereo-Depth-estimation: Python scripts form performing stereo depth estimation using the HITNET model in ONNX.
  • ibaiGorordo
  • github.com
Python scripts form performing stereo depth estimation using the HITNET model in ONNX. Requirements Installation ONNX model The original models were converted to different formats (including .onnx) by PINTO0309...
 

使用 NVIDIA TAO 工具包导入、训练和优化 ONNX 模型



使用 NVIDIA TAO 工具包导入、训练和优化 ONNX 模型

该视频展示了如何使用 NVIDIA TAO 工具包导入、训练和优化 ONNX 模型。它首先下载预训练的 ResNet18 模型,使用 TAO 在 Pascal VOC 数据集上对其进行微调,并提供导入模型和可视化 ONNX 图的步骤。可以使用 TensorBoard 可视化监控训练进度,并且可以在 ONNX 转换错误的情况下使用自定义层。该视频还解释了如何通过观察减少的损失、验证损失以及分析权重和偏差来评估模型的性能。用户可以评估模型在测试数据集和样本图像上的准确性,并继续进行修剪和优化以进一步改进它。

  • 00:00:00 在本节中,视频介绍了如何使用 NVIDIA TAO 工具包导入、训练和优化 ONNX 模型。该视频首先下载预训练的 ResNet18 模型,然后使用 TAO 在 Pascal VOC 数据集上对该模型进行微调。还介绍了导入 ONNX 模型和可视化 ONNX 图的步骤。此外,该视频还讨论了如何使用 TensorBoard 可视化来监控训练作业的进度。最后,该视频提到 TAO 可以处理自定义层,并提供了有关如何使用它们导入无法转换的模型的指导。

  • 00:05:00 在本节中,演讲者讨论了如何评估训练模型的性能。用户可以查看减少的损失以确保模型正在改进。此外,验证损失可以帮助识别过度拟合。更高级的用户可以查看图形和直方图以了解模型的权重和偏差。演讲者演示了如何检查模型在测试数据集上的整体准确性以及如何评估模型在样本图像上的性能。该模型还有改进的空间,用户可以继续对模型进行剪枝和优化,进一步提升准确率。
 

NVAITC 网络研讨会:使用 TensorRT 部署模型



NVAITC 网络研讨会:使用 TensorRT 部署模型

在 NVAITC 网络研讨会的这一部分,解决方案架构师 Nikki Loppie 介绍了 TensorRT,这是 NVIDIA 用于高性能深度学习推理的软件开发套件。 TensorRT 提供推理优化器和运行时,可跨从嵌入式设备到数据中心的一系列平台进行低延迟和高吞吐量推理。 Loppie 解释了 TensorRT 用于优化推理性能的五种技术,包括内核融合和精度校准。开发人员可以使用 TensorRT 的 Python 和 C++ API 将这些优化合并到他们自己的应用程序中,并且可以使用 trtorch 等转换器库来优化 PyTorch 模型以进行推理。 Loppie 演示了如何使用 trtorch 库保存 TensorRT 优化模型,并将优化模型与未优化模型进行基准测试以进行图像分类,显示了半精度的显着加速。

  • 00:00:00 在网络研讨会的这一部分,解决方案架构师 Nikki Loppie 讨论了推理效率的重要性以及平台可移植性的必要性。她介绍了 TensorRT,这是 NVIDIA 的一款软件开发套件,用于解决这两个挑战的高性能深度学习推理。 TensorRT 包括一个推理优化器和运行时,可在从嵌入式设备到数据中心的各种平台上实现低延迟和高吞吐量推理。它还与所有主要的深度学习框架兼容。 Loppie 随后解释了 TensorRT 为优化推理性能而实施的五项技术,包括内核融合、精度校准和内核自动调整。

  • 00:05:00 在本节中,网络研讨会介绍了 TensorRT 优化内核执行时间、减少内存占用以及使用多流执行支持并行推理的能力。开发人员可以使用 TensorRT 的 Python 和 C++ API 将这些优化合并到他们自己的应用程序中。该网络研讨会还解释了如何使用 tr torch 等转换器库来优化 PyTorch 模型以进行推理。这些步骤包括保存模型、加载模型、初始化 ResNet 模型、使用 TorchScript 编译它,最后将其转换为 TensorRT 格式。然后可以将优化后的模型部署到目标平台上。

  • 00:10:00 在网络研讨会的这一部分,演讲者演示了如何使用 trtorch 库保存 TensorRT 优化模型供以后使用或在其他平台上部署。演讲者使用在 ImageNet 数据集上运行 ResNet-18 和 ResNet-50 模型的图像分类示例。与未优化的模型相比,trtorch 优化模型显示出显着的半精度加速,ResNet-18 的加速因子为 5.5 倍,ResNet-50 的加速因子为 6.4 倍。演讲者还强调了公正基准测试的重要性,并提供了有关如何开始使用 trtorch 的说明。
 

ESP 教程 - 如何:在 Keras/Pytorch/ONNX 中设计加速器



ESP 教程 - 如何:在 Keras/Pytorch/ONNX 中设计加速器

本教程介绍了一个名为 Chalice for ML 的工具,它可以自动从 Keras/Pytorch/ONNX 模型生成加速器。然后教程继续演示如何将加速器集成到 ESP(早期原型机)中。演讲者还展示了如何在 Keras/Pytorch/ONNX 中设计加速器,并介绍了导入加速器、添加测试台、生成 RTL 和创建两个版本的加速器的步骤。该视频还介绍了编译 Linux 和为加速器创建 Linux 用户空间应用程序。最后,本教程以供进一步学习的资源结束。

  • 00:00:00 在教程的这一部分,演示者介绍了一个名为 Chalice for ML 的工具,它可以自动从 Keras/Pytorch/ONNX 模型生成加速器。该流程通过使用 HLS 4 ML 从 ESP for NXP 的 GitHub 存储库中提供的预构建 Keras 模型生成加速器来演示。然后使用交互式脚本将生成的加速器集成并测试到 ESP 中。演示者强调,在尝试按照教程进行操作之前,用户应该阅读先决条件指南并设置他们的环境。该教程还提供了预建材料,用户可以使用这些材料进行实验,而无需完成所有步骤。

  • 00:05:00 在这部分教程中,讲师解释了如何将前面步骤中设计的加速器集成到ESP(Early Stage Prototyper)中。加速器的三位十六进制 ID 已分配,请记住该数字不应大于十进制的 1024。然后定义加速器的数据位宽,在当前用例中为 32 位,并确定输入和输出文件大小。最后,讲师演示了为 MLP 三层加速器运行高层次综合,并展示了如何使用 ESP 运行 HLS。所有步骤都与 System C 或 C++ 加速器的其他指南相同,并且 MLP 项目文件夹的 HLS 已添加到 ESP,其中包含用于包装加速器并将其与 ESP 系统的其余部分连接的所有必要文件。

  • 00:10:00 在这部分视频中,演讲者演示了在 Keras/Pytorch/ONNX 中设计加速器的步骤。他们首先展示了如何导入加速器并添加自动测试模拟的测试平台。然后他们通过 HLS 步骤,生成一个在选择器搜索和 FPGA 技术上运行的项目。然后将生成的 RTL 置于 FPGA 技术中,并创建两个版本的加速器,一个是 32 位,另一个是 64 位。演讲者使用 ESP X config 命令配置 SOC,并展示如何编译自动生成的裸机应用程序。模拟加速器裸机测试,需要指定测试程序。一旦验证通过,就可以生成 FPGA 比特流。

  • 00:15:00 在本节中,视频教程介绍了编译 Linux,它不仅编译 cynics,还编译加速器的用户空间测试应用程序。 Linux 完成后,将创建加速器的可执行文件,这是将在 FPGA 上运行的 Linux 用户空间应用程序。然后本教程继续使用 make FPGA run 命令对 FPGA 进行编程并运行裸机测试。要运行减速器裸机单元测试,需要指定先前生成的测试程序。随后运行Linux,执行单元测试应用程序,成功找到卖家Reiter,测试通过验证。本教程以一些供进一步学习的资源结尾。