📚 简介
OpenVINO™ 是一个用于优化和部署 AI 推理的开源工具包,旨在提升深度学习在计算机视觉、自动语音识别、自然语言处理和其他常见任务中的性能。它支持使用流行框架(如TensorFlow,PyTorch等)训练的模型,减少资源需求,并在从边缘到云的一系列英特尔®平台上高效部署。
友情链接:ACEJoy
该项目通过Java Native Access (JNA) 实现了基于OpenVINO™工具套件的OpenVINO™ Java API,旨在推动 OpenVINO™在Java领域的应用。由于是基于 OpenVINO™ 开发,OpenVINO™ Java API 支持的所有平台与OpenVINO™ 一致。
版本计划
- 1.0: 实现基本函数,并提供Yolov8范例
- 1.1: 实现Maven在线安装
- 2.0: 实现库本地加载,告别复杂安装
- 3.0: 实现在线加载
Java库公示
- JNA
- OpenCV
- OpenVINO
⚙ 如何安装
以下文章提供了OpenVINO™ Java API在不同平台的安装方法,可以根据自己使用的平台进行安装。
简短安装步骤
- 在OpenVINO官网下载对应平台的runtime库
- 将Runtime库加入环境变量
- Windows: 放在系统路径中
- Linux/Mac OS: 将库文件放入
/usr/lib/
详细使用文档
🏷 开始使用
快速体验
使用以下代码简单了解OpenVINO Java API的使用方法:
public class OpenVINOTest {
public static void main(String[] args) {
// 实现OpenVINO 库加载
OpenVINO vino = OpenVINO.load("libopenvino_c.dylib");
// 如果将库放置在系统路径中,可以这样简写
// OpenVINO vino = OpenVINO.load();
Core core = new Core(); // 初始化 Core 核心
Model model = core.read_model("./model.xml"); // 读取模型文件
CompiledModel compiled_model = core.compiled_model(model, "AUTO"); // 将模型加载到设备
InferRequest infer_request = compiled_model.create_infer_request(); // 创建推理通道
Tensor input_tensor = infer_request.get_tensor("images"); // 获取输入节点Tensor
infer_request.infer(); // 模型推理
Tensor output_tensor = infer_request.get_tensor("output0"); // 获取输出节点Tensor
// 清理 Core 非托管内存
core.free();
}
}
项目中所封装的类、对象例如Core、Model、Tensor等,通过调用 C API 接口实现,具有非托管资源,需要调用 dispose()
方法处理,否则就会出现内存泄漏。
💻 应用案例
- 爱克斯开发板使用OpenVINO™ Java API部署Yolov8模型
- 基于Spring Boot 的在线AI服务
- 基于客户端模式运行
测试系统
- Mac OS: Sonoma
- Ubuntu: 23.04 (64位)
- Windows
🗂 API 文档
(链接到相关API文档)
🔃 更新日志
(链接到更新日志)
🎖 贡献
如果您对OpenVINO™ 在Java使用感兴趣,有兴趣对开源社区做出自己的贡献,欢迎加入我们,一起开发OpenVINO™ Java API。如果你对该项目有一些想法或改进思路,欢迎联系我们,指导我们的工作。
许可证书
本项目的发布受Apache 2.0 license许可认证。
GitHub 仓库地址: Hmm466/OpenVINO-Java-API
通过这个项目,您可以在Java中更方便地使用OpenVINO™进行AI推理,加速您的开发流程并优化性能。如果有任何问题或建议,欢迎在仓库中提出Issue或进行讨论。
OpenVINO™ Java API 安装指南(Windows)
当前验证/测试环境
- Windows: 7
- JDK: 11.0.10
- OpenVINO Runtime: 2023.2.0-12538-e7c1344d3c3
- OpenCV: 4.8.0
OpenVINO™ 环境配置
OpenVINO™ 是一个用于优化和部署 AI 推理的开源工具包,旨在提升深度学习在计算机视觉、自动语音识别、自然语言处理和其他常见任务中的性能。它支持使用流行框架(如TensorFlow,PyTorch等)训练的模型,减少资源需求,并在从边缘到云的一系列英特尔®平台上高效部署。
步骤
- 下载OpenVINO™ Runtime库 下载适用于您电脑平台的OpenVINO™ Runtime库。
- 拷贝动态链接库 将
runtime/3rdparty/tbb/lib/*.dll
拷贝至runtime/lib/intel64/release/
下。 - 配置默认库路径 将
runtime/lib/intel64/release/*.dll
拷贝至以下任意路径之一:
- 自己喜欢的路径
C:\Windows
OpenCV 环境配置
- 下载OpenCV 在官网下载适用于Windows平台的OpenCV,解压缩,并将其加入环境变量。
- 拷贝OpenCV动态链接库 将
opencv_java*.dll
拷贝到自己喜欢的目录,或者将build/lib/
的libopencv_java*.dll
移动到自己喜欢的目录。 - 加载OpenCV库 使用以下代码加载OpenCV库:
OpenVINO.loadCvDll({opencv_java所在的目录});
OpenVINO™ Java API 安装
源码构建
- 克隆代码仓库
git clone https://github.com/Hmm466/OpenVINO-Java-API.git
- 使用Maven安装 在代码仓库根目录下运行:
mvn install
Maven 引用
如果您想在Maven项目中引用OpenVINO™ Java API,可以在 pom.xml
文件中添加以下依赖项:
<dependencies>
<dependency>
<groupId>org.openvino</groupId>
<artifactId>java-api</artifactId>
<version>[按照最新下载的版本填入]</version>
</dependency>
</dependencies>
在线Maven 安装
该功能将在1.1版本上线。
通过以上步骤,您可以在Windows平台上成功安装并配置OpenVINO™ Java API。如果有任何问题或需要进一步的帮助,请在GitHub仓库中提出Issue或进行讨论。
GitHub 仓库地址: Hmm466/OpenVINO-Java-API
OpenVINO™ 生态系统概述
简介
OpenVINO™ 不只是一个工具,它还是一个庞大的实用程序生态系统,提供用于开发深度学习解决方案的整套工作流程。通过详细了解每个实用程序,可以充分利用 OpenVINO™ 工具套件。
神经网络压缩框架 (NNCF)
NNCF 是一套用于优化神经网络推理的高级算法,可以最大限度地减少准确度下降。在训练期间,NNCF 会对 PyTorch 和 TensorFlow 模型应用量化、过滤器修剪、二值化和稀疏性算法。
更多资源:
OpenVINO™ 安全插件
OpenVINO™ 安全插件为模型开发人员和独立软件开发商提供了用于进行安全封装并安全执行模型的解决方案。
更多资源:
OpenVINO™ 与 TensorFlow 集成 (OVTF)
OVTF 为 TensorFlow 开发人员提供 OpenVINO™ 优化功能的解决方案。只需在应用中添加两行代码,即可将推理分载给 OpenVINO™,同时保留 TensorFlow API。
更多资源:
DL Streamer
DL Streamer 是一个基于 GStreamer 多媒体框架的流媒体分析框架,用于创建复杂的媒体分析管道。
更多资源:
深度学习工作台
深度学习工作台是一个用于部署深度学习模型的基于 Web 的工具。它依托 OpenVINO™ 的核心功能并配有图形用户界面,提供了一种用于探索 OpenVINO™ 工作流程的各种可能性,以及导入、分析、优化并构建预训练模型的绝佳途径。您可以通过访问英特尔® DevCloud for the Edge 并在线启动深度学习工作台,执行所有此类任务。
更多资源:
OpenVINO™ 训练扩展 (OTE)
OpenVINO™ 训练扩展 (OTE) 提供了一种用于使用 OpenVINO™ 工具套件训练深度学习模型并对其进行转换,以优化推理的便捷环境。
更多资源:
计算机视觉注释工具 (CVAT)
CVAT 是一款用于计算机视觉的在线交互式视频和图像注释工具。
更多资源:
数据集管理框架 (Datumaro)
Datumaro 是一个用于构建、转换和分析数据集的框架兼 CLI 工具。
更多资源:
通过详细了解和使用这些实用工具,能够充分发挥 OpenVINO™ 的强大功能,优化和部署高性能的深度学习解决方案。
详细文档地址: OpenVINO™ 生态系统概述
OpenVINO™ API 2.0 迁移指南
概述
本指南介绍了全新的 OpenVINO™ API (API 2.0) 以及新型 OpenVINO™ IR 模型格式:IR v11。本文将对新旧版本进行比较,并提供详细的迁移步骤。
API 2.0 简介
在从 TensorFlow、ONNX 运行时、PyTorch、PaddlePaddle 等其他框架迁移应用时,2022.1 之前的 OpenVINO™ 版本需要更改应用逻辑。这是因为:
- 模型优化器更改了某些输入的输入精度。例如,具有 I64 输入的神经语言处理模型已更改为包含 I32 输入。
- 模型优化器更改了 TensorFlow 模型的布局(请参阅 OpenVINO™ 中的布局)。
- 由于设备插件的限制,推理引擎 API (InferenceEngine::CNNNetwork) 应用了一些输入和输出精度的转换规则。
- 在模型优化器中进行模型转换期间,用户需要指定输入形状,并在应用中使用静态形状。
OpenVINO™ 2022.1 引入了 API 2.0(也称为 OpenVINO™ API v2),以调整使用模型的逻辑。API 2.0 未更改布局和精度,使用张量名称和索引来执行操作以对输入和输出进行寻址。OpenVINO™ 运行时将用于推理的推理引擎 API 与用于处理模型和操作的 nGraph API 结合在一起。API 2.0 有通用的结构、命名约定样式、命名空间,并移除了重复的结构。
现有的应用将继续正常使用 OpenVINO™ 运行时 2022.1,但强烈建议迁移到 API 2.0,以便使用其他功能,如预处理和动态形状支持。
全新 OpenVINO™ IR v11
为了支持这些功能,OpenVINO™ 引入了 OpenVINO™ IR v11,它现在是默认版本的模型优化器。以 OpenVINO™ IR v11 表示的模型的输入和输出与原始框架格式下的原始模型完全匹配,无需在转换过程中指定输入形状。生成的 OpenVINO™ IR v11 包含 -1,用于表示未定义维度。OpenVINO™ IR v11 完全兼容借助旧版 OpenVINO™ 使用的推理引擎 API 编写的应用。这种向后兼容性归功于 OpenVINO™ IR v11 中包含的其他运行时信息。
向后兼容 OpenVINO™ IR v10
API 2.0 还支持向后兼容 OpenVINO™ IR v10 模型。如果您拥有 OpenVINO™ IR v10 文件,也可以将其馈送到 OpenVINO™ 运行时。某些 OpenVINO™ 开发工具也支持将 OpenVINO™ IR v10 和 v11 作为输入:
- 精度检查器默认使用 API 2.0 来测量模型精度,也支持通过使用
--use_new_api False
命令行参数切换到旧版 API。 - 编译工具默认编译要在 API 2.0 中使用的模型。要在推理引擎 API 下使用生成的已编译 Blob,应传递附加
ov_api_1_0
选项。
OpenVINO™ 2022.1 的训练后优化工具和深度学习工作台不支持 OpenVINO™ IR v10,需使用最新版本的模型优化器生成 OpenVINO™ IR v11 文件。
API 2.0 与推理引擎 API 的行为差异
推理引擎和 nGraph API 不会因引入了新 API 而被弃用,用户仍可以在应用中使用这些 API。但强烈建议迁移到 API 2.0,因为它提供了更多功能(在未来版本中会进一步扩展),例如:
- 使用动态形状,提高神经语言处理 (NLP) 和超分辨率模型等兼容模型的性能。
- 预处理模型,在推理模型中添加预处理操作并完全占用加速器,从而释放 CPU 资源。
下表说明了基于这两个 API 的模型会使用哪种行为:旧行为还是新行为。
API | IR v10 | IR v11 | ONNX 文件 | 使用代码创建的模型 |
---|---|---|---|---|
推理引擎/nGraph API | 旧 | 旧 | 旧 | 旧 |
API 2.0 | 旧 | 新 | 新 | 新 |
通过迁移到 OpenVINO™ API 2.0,您可以充分利用新特性和增强功能,提升模型推理的性能和灵活性。
详细文档地址: OpenVINO™ API 2.0 迁移指南