作者:英特尔边缘计算创新大使 黄明明

简介

本文将从零开始详细介绍环境搭建的完整步骤,我们基于AlxBoard为硬件基础实现了Java Ubuntu 22.04 系统上成功使用OpenVINO™ Java API,并且成功运行了RT-DETR 实现实时端到端目标检测器AI任务项目中所使用的代码已上传至 OpenVINO™ Java API 仓库中,GitHub 网址为:
GitHub - Hmm466/OpenVINO-Java-API
(复制链接到浏览器打开)

RT-DETR是第一个实时端到端目标检测器。具体而言,我们设计了一个高效的混合编码器,通过解耦尺度内交互和跨尺度融合来高效处理多尺度特征,并提出了IoU感知的查询选择机制,以优化解码器查询的初始化。此外,RT-DETR支持通过使用不同的解码器层来灵活调整推理速度,而不需要重新训练,这有助于实时目标检测器的实际应用。RT-DETR-LCOCO val2017上实现了53.0%AP,在T4 GPU上实现了114FPSRT-DETR-X实现了54.8%AP74FPSRT-DETR-H实现了56.3%AP40FPS,在速度和精度方面都优于相同规模的所有YOLO检测器。RT-DETR-R50实现了53.1%AP108FPSRT-DETR-R101实现了54.3%AP74FPS,在精度上超过了全部使用相同骨干网络的DETR检测器。

  • 基础模型

Model

Epoch

Backbone

Input shape

APval

AP50val

Params(M)

FLOPs(G)

T4 TensorRT FP16(FPS)

Pretrained Model

config

RT-DETR-R18

6x

ResNet-18

640

46.5

63.8

20

60

217

download

config

RT-DETR-R34

6x

ResNet-34

640

48.9

66.8

31

92

161

download

config

RT-DETR-R50-m

6x

ResNet-50

640

51.3

69.6

36

100

145

download

config

RT-DETR-R50

6x

ResNet-50

640

53.1

71.3

42

136

108

download

config

RT-DETR-R101

6x

ResNet-101

640

54.3

72.7

76

259

74

download

config

RT-DETR-L

6x

HGNetv2

640

53.0

71.6

32

110

114

download

config

RT-DETR-X

6x

HGNetv2

640

54.8

73.1

67

234

74

download

config

RT-DETR-H

6x

HGNetv2

640

56.3

74.8

123

490

40

download

config

  • 高精度模型

Model

Epoch

backbone

input shape

APval

AP50val

Pretrained Model

config

RT-DETR-Swin

3x

Swin_L_384

640

56.2

73.5

download

config

RT-DETR-FocalNet

3x

FocalNet_L_384

640

56.9

74.3

download

config

  • Objects365预训练模型

Model

Epoch

Dataset

Input shape

APval

AP50val

T4 TensorRT FP16(FPS)

Weight

Logs

RT-DETR-R18

1x

Objects365

640

22.9

31.2

-

download

log

RT-DETR-R18

5x

COCO + Objects365

640

49.2

66.6

217

download

log

RT-DETR-R50

1x

Objects365

640

35.1

46.2

-

download

log

RT-DETR-R50

2x

COCO + Objects365

640

55.3

73.4

108

download

log

RT-DETR-R101

1x

Objects365

640

36.8

48.3

-

download

log

RT-DETR-R101

2x

COCO + Objects365

640

56.2

74.5

74

download

log

数据出自:https://github.com/PaddlePaddle/PaddleDetection/tree/develop/configs/rtdetr

1.  英特尔开发套件 AlxBoard 介绍

1.1 产品定位

英特尔开发套件 AlxBoard 是英特尔开发套件官方序列中的一员,专为入门级人工智能应用和边缘智能设备而设计。英特尔开发套件 AlxBoard 能完美胜人工智能学习、开发、实训、应用等不同应用场景。该套件预装了英特尔 OpenVINO™ 工具套件、模型仓库和演示。

套件主要接口与 Jetson Nano 载板兼容,GPIO 与树莓派兼容,能够最大限度地复用成熟的生态资源。这使得套件能够作为边缘计算引擎,为人工智能产品验证和开发提供强大支持;同时,也可以作为域控核心,为机器人产品开发提供技术支撑。

使用英特尔开发套件 AlxBoard,您将能够在短时间内构建出一个出色的人工智能应用应用程序。无论是用于科研、教育还是商业领域,英特尔开发套件 AlxBoard 都能为您提供良好的支持。借助 OpenVINO™ 工具套件,CPUiGPU 都具备强劲的 AI 推理能力,支持在图像分类、目标检测、分割和语音处理等应用中并行运行多个神经网络。

1.2 产品参数

1.3 AI推理单元

借助 OpenVINO™ 工具,能够实现 CPU+iGPU 异构计算推理,IGPU 算力约为 0.6TOPS

2.准备工作

2.1 配置java 环境

下载并配置JDK:

JDKJava Development Kit)称为Java开发包或Java开发工具,是一个编写JavaApplet小程序和应用程序的程序开发环境。JDK是整个Java的核心,包括了Java运行环境(Java Runtime Environment),一些Java工具和Java的核心类库(Java API)。不论什么Java应用服务器实质都是内置了某个版本的JDK。主流的JDKSun公司发布的JDK,除了Sun之外,还有很多公司和组织都开发了自己的JDK.

2.1.1 添加api到本地maven

添加OpenVINO™ Java API Maven(目前没有在meven中央仓库发布,所以需要手动安装)

2.1.2 clone OpenVINO™ Java API 项目到本地

git clone https://github.com/Hmm466/OpenVINO-Java-API

2.1.3 通过IDEA Eclipse 打开

通过maven install 到本地maven 库中

[INFO] ------------------------------------------------------------------------

[INFO] BUILD SUCCESS

[INFO] ------------------------------------------------------------------------

[INFO] Total time:  14.647 s

[INFO] Finished at: 2023-11-02T21:34:49+08:00

[INFO] ------------------------------------------------------------------------

jar包会放置在
/{userHome}/.m2/repository/org/openvino/java-api/1.0-SNAPSHOT/java-api-1.0-SNAPSHOT.pom

2.2 安装 OpenVINO™ Runtime

OpenVINO™ 有两种安装方式: OpenVINO™ Runtime OpenVINO™ Development ToolsOpenVINO™ Runtime 包含用于在处理器设备上运行模型部署推理的核心库。OpenVINO™ Development Tools 是一组用于处理 OpenVINO™ OpenVINO™ 模型的工具,包括模型优化器、OpenVINO™ Runtime、模型下载器等。在此处我们只需要安装 OpenVINO™ Runtime 即可。

2.2.1 下载 OpenVINO™ Runtime

访问 Download the Intel Distribution of OpenVINO™ Toolkit[5] 页面,按照下面流程选择相应的安装选项,在下载页面,由于AIxBoard使用的是 Ubuntu20.04,因此下载时按照指定的编译版本下载即可。

2.2.2 解压缩安装包

我们所下载的 OpenVINO™ Runtime 本质是一个 C++ 依赖包,因此我们把它放到我们的系统目录下,这样在编译时会根据设置的系统变量获取依赖项。

cd ~/Downloads/

tar -xvzf l_openvino_toolkit_ubuntu20_2022.3.1.9227.cf2c7da5689_x86_64.tgz

sudo mv l_openvino_toolkit_ubuntu20_2022.3.1.9227.cf2c7da5689_x86_64/runtime/lib/intel64/* /usr/lib/

2.3 编译OpenCV java

2.3.1 下载ANT

由于OpenCV 编译出libopencv_java{version}.[so|dll|dylib] 需要apache ant的支持,所以需要手动下载ant 并加入环境变量
官网:ant.apache.org

export ANT_HOME={ant_home}

export PATH=$ANT_HOME/bin:$PATH

2.3.2 OpenCV 下载源代码

opencv官网 下载源码

解压缩之后进入文件夹

mkdir build

cd build

cmake -DBUILD_SHARED_LIBS=OFF -DWITH_IPP=OFF -DBUILD_ZLIB=OFF -DCMAKE_INSTALL_PREFIX=你的opencv目录

  -DJAVA_INCLUDE_PATH={jdk 所在位置}/include -DJAVA_AWT_INCLUDE_PATH={jdk 所在位置}/include

  -DJAVA_INCLUDE_PATH2={jdk 所在位置}/include -DBUILD_JAVA=ON ../

注意看输出有没有

--   Java:                         

--     ant:                        

--     JNI:                        

--     Java wrappers:              

--     Java tests:  

需要不为NO或者有目录

然后编译安装

make -j 8

make install

3.  AlxBoard 上进行测试

3.1 源代码直接测试

git clone https://github.com/Hmm466/OpenVINO-Java-API

3.2 编写测试类

public class RT_DETRTest {

    private OpenVINO vino;

    private String classerPath = "dataset/lable/COCO_lable.txt";

    private String imgPath = "dataset/image/WechatIMG28.jpg";

    private String modelPath = "model/rtdetr/rtdetr_r18vd_6x_coco.xml";



    @Before

    public void setUp() {

        vino = OpenVINO.load();

        vino.loadCvDll();

    }



    @After

    public void tearDown() {

    }



    @Test

    public void rtDetrTest() {

        Mat image = Imgcodecs.imread(imgPath);

        Mat resultMat = new Mat();

        modelPath = "model/rtdetr/rtdetr_r50vd_6x_coco.xml";

        RTDETR predictor = new RTDETR(modelPath, classerPath, "CPU", false);

        resultMat = predictor.predict(image);

        HighGui.imshow("result", resultMat);

        HighGui.waitKey(0);

    }

}

结果将输出

Model path: model/rtdetr/rtdetr_r50vd_6x_coco.xml

Device name: CPU

Inference Model

  Model name: Model from PaddlePaddle.

  Input:

     name: image

     type: 5

  Output:

     name: stack_7.tmp_0_slice_0

     type: 5

     name: stack_8.tmp_0_slice_0

     type: 5

Infer result:

  class_id : 0, label : person, confidence : 0.9453949, left_top : [290, 199], right_bottom: [475, 789]

  class_id : 0, label : person, confidence : 0.9366737, left_top : [740, 262], right_bottom: [866, 491]

  class_id : 0, label : person, confidence : 0.95133895, left_top : [-1, 306], right_bottom: [268, 826]

  class_id : 56, label : chair, confidence : 0.7857964, left_top : [108, 612], right_bottom: [292, 830]

  class_id : 0, label : person, confidence : 0.8834057, left_top : [885, 317], right_bottom: [1124, 539]

  class_id : 63, label : laptop, confidence : 0.67640233, left_top : [493, 460], right_bottom: [615, 560]

  class_id : 63, label : laptop, confidence : 0.8890746, left_top : [533, 511], right_bottom: [812, 794]

  class_id : 0, label : person, confidence : 0.8422087, left_top : [622, 100], right_bottom: [1249, 825]

  class_id : 63, label : laptop, confidence : 0.74342567, left_top : [859, 446], right_bottom: [954, 529]

  class_id : 62, label : tv, confidence : 0.92532605, left_top : [245, 167], right_bottom: [717, 463]

  class_id : 63, label : laptop, confidence : 0.7818358, left_top : [897, 475], right_bottom: [1093, 647]

详细实现原理可以进入GitHub - Hmm466/OpenVINO-Java-API 查看

4. 总结

在该项目中,我们基于AlxBoard为硬件基础实现了Java Ubuntu 22.04 系统上成功使用OpenVINO™ Java API,并且成功运行了RT-DETR模型,后续我还会将继续使用 OpenVINO™ Java API 英特尔开发套件 AlxBoard 部署更多的深度学习模型。

Logo

为开发者提供丰富的英特尔开发套件资源、创新技术、解决方案与行业活动。欢迎关注!

更多推荐