深度学习的 Java 推理库:Deep Java Library(DJL)

简介

Deep Java Library(DJL) 是一个开源的、高级的、与深度学习引擎无关的 Java 框架,专为 Java 开发人员设计。 DJL 旨在让 Java 开发人员轻松入门并简化深度学习的使用。它提供了与其他常规 Java 库类似的本地 Java 开发体验。无需成为机器学习/深度学习专家,您就可以利用现有的 Java 知识学习和使用机器学习和深度学习。您可以使用喜欢的集成开发环境 (IDE) 来构建、训练和部署模型。 DJL 使得将这些模型与您的 Java 应用程序集成变得容易。由于 DJL 与深度学习引擎无关,因此在创建项目时无需在引擎之间做出选择。您可以随时切换引擎。为了确保最佳性能,DJL 还根据硬件配置提供自动的 CPU/GPU 选择。

主要特点

  1. 引擎无关性:DJL 与深度学习引擎无关,可以在不同引擎之间切换,如 MXNet 、 PyTorch 和 TensorFlow 等。
  2. 简单易用:DJL 旨在让 Java 开发人员轻松入门并简化深度学习的使用。
  3. 本地 Java 开发体验:DJL 提供了与其他常规 Java 库类似的本地 Java 开发体验。
  4. 自动 CPU/GPU 选择:DJL 根据硬件配置自动选择最佳的 CPU 或 GPU 。

核心 API

  1. Criteria:Criteria 类对象定义了模型的情况,如模型路径、输入和输出等。通过 Criteria 可以实例化出 Model Zoo 对象,用于对模型进行管理。
  2. Translator:Translator 接口用于定义如何将自定义的输入输出类转换为 Tensor 类型。它包含两个方法:processInputprocessOutput
  3. NDArray:DJL 的 NDArray 类类似于 Python 中的 numpy.ndarray,可以进行各种 Tensor 操作,如创建、运算、切片等。

使用示例

以下是使用 DJL 进行模型推理的简单示例:

// 创建 Criteria 对象
Criteria<Image, Classifications> criteria = Criteria.builder()
    .optApplication(Application.CV.OBJECT_DETECTION) // 选择目标检测模型
    .setTypes(Image.class, Classifications.class)    // 定义输入和输出类型
    .optFilter("backbone", "resnet50")               // 选择网络架构
    .build();

// 加载图像
Image img = ImageFactory.getInstance().fromUrl("http://...");

// 加载模型并创建预测器
try (ZooModel<Image, Classifications> model = criteria.loadModel();
     Predictor<Image, Classifications> predictor = model.newPredictor()) {
    Classifications result = predictor.predict(img);

    // 获取分类结果和概率
    ...
}

资源

  1. DJL 快速入门 (纯 Java 跑深度学习模型)-CSDN 博客
  2. Main - Deep Java Library
  3. GitHub - deepjavalibrary/djl: An Engine-Agnostic Deep Learning Framework in Java

参考资料


DJL 为 Java 开发者提供了一个强大的工具,使得深度学习的实现变得更加容易和高效。无论是模型推理还是训练,DJL 都提供了简洁的 API 和丰富的功能,帮助开发者快速上手并实现复杂的深度学习任务。

发表评论