本文将从零开始详细介绍环境搭建的完整步骤,我们基于英特尔开发套件AIxBoard为硬件基础实现了Java在Ubuntu 22.04系统上成功使用OpenVINO Java API,并且成功运行了RT-DETR实现实时端到端目标检测器AI任务。
项目中所使用的代码已上传至OpenVINO Java API仓库中,GitHub网址为:
https://github.com/Hmm466/OpenVINO-Java-API
RT-DETR是第一个实时端到端目标检测器。具体而言,我们设计了一个高效的混合编码器,通过解耦尺度内交互和跨尺度融合来高效处理多尺度特征,并提出了IoU感知的查询选择机制,以优化解码器查询的初始化。此外,RT-DETR支持通过使用不同的解码器层来灵活调整推理速度,而不需要重新训练,这有助于实时目标检测器的实际应用。
RT-DETR-L在COCO val2017上实现了53.0%的AP,在T4 GPU上实现了114FPS,RT-DETR-X实现了54.8%的AP和74FPS,RT-DETR-H实现了56.3%的AP和40FPS,在速度和精度方面都优于相同规模的所有YOLO检测器。RT-DETR-R50实现了53.1%的AP和108FPS,RT-DETR-R101实现了54.3%的AP和74FPS,在精度上超过了全部使用相同骨干网络的DETR检测器。
基础模型
Model | Epoch | Backbone | Input shape | APvcal | 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 | https://bj.bcebos.com/v1/paddledet/models/rtdetr_r18vd_dec3_6x_coco.pdparams | https://file+.vscode-resource.vscode-cdn.net/Users/ming/MyWorkspace/IdeaWorkspace/OpenVINO-Java-API/docs/rt_detr/rtdetr_r18vd_6x_coco.yml |
RT-DETR-R34 | 6x | ResNet-34 | 640 | 48.9 | 66.8 | 31 | 92 | 161 | https://bj.bcebos.com/v1/paddledet/models/rtdetr_r34vd_dec4_6x_coco.pdparams | https://file+.vscode-resource.vscode-cdn.net/Users/ming/MyWorkspace/IdeaWorkspace/OpenVINO-Java-API/docs/rt_detr/rtdetr_r34vd_6x_coco.yml |
RT-DETR-R50-m | 6x | ResNet-50 | 640 | 51.3 | 69.6 | 36 | 100 | 145 | https://bj.bcebos.com/v1/paddledet/models/rtdetr_r50vd_m_6x_coco.pdparams | https://file+.vscode-resource.vscode-cdn.net/Users/ming/MyWorkspace/IdeaWorkspace/OpenVINO-Java-API/docs/rt_detr/rtdetr_r50vd_m_6x_coco.yml |
RT-DETR-R50 | 6x | ResNet-50 | 640 | 53.1 | 71.3 | 42 | 136 | 108 | https://bj.bcebos.com/v1/paddledet/models/rtdetr_r50vd_6x_coco.pdparams | https://file+.vscode-resource.vscode-cdn.net/Users/ming/MyWorkspace/IdeaWorkspace/OpenVINO-Java-API/docs/rt_detr/rtdetr_r50vd_6x_coco.yml |
RT-DETR-R101 | 6x | ResNet-101 | 640 | 54.3 | 72.7 | 76 | 259 | 74 | https://bj.bcebos.com/v1/paddledet/models/rtdetr_r101vd_6x_coco.pdparams | https://file+.vscode-resource.vscode-cdn.net/Users/ming/MyWorkspace/IdeaWorkspace/OpenVINO-Java-API/docs/rt_detr/rtdetr_r101vd_6x_coco.yml |
RT-DETR-L | 6x | HGNetv2 | 640 | 53.0 | 71.6 | 32 | 110 | 114 | https://bj.bcebos.com/v1/paddledet/models/rtdetr_hgnetv2_l_6x_coco.pdparams | https://file+.vscode-resource.vscode-cdn.net/Users/ming/MyWorkspace/IdeaWorkspace/OpenVINO-Java-API/docs/rt_detr/rtdetr_hgnetv2_l_6x_coco.yml |
RT-DETR-X | 6x | HGNetv2 | 640 | 54.8 | 73.1 | 67 | 234 | 74 | https://bj.bcebos.com/v1/paddledet/models/rtdetr_hgnetv2_x_6x_coco.pdparams | https://file+.vscode-resource.vscode-cdn.net/Users/ming/MyWorkspace/IdeaWorkspace/OpenVINO-Java-API/docs/rt_detr/rtdetr_hgnetv2_x_6x_coco.yml |
RT-DETR-H | 6x | HGNetv2 | 640 | 56.3 | 74.8 | 123 | 490 | 40 | https://bj.bcebos.com/v1/paddledet/models/rtdetr_hgnetv2_h_6x_coco.pdparams | https://file+.vscode-resource.vscode-cdn.net/Users/ming/MyWorkspace/IdeaWorkspace/OpenVINO-Java-API/docs/rt_detr/rtdetr_hgnetv2_h_6x_coco.yml |
More
高精度模型
Model | Epoch | Backbone | Input shape | APvcal | AP50val | Pretrained Model | config |
RT-DETR-Swin | 3x | Swin_L_384 | 640 | 56.2 | 73.5 | https://bj.bcebos.com/v1/paddledet/models/rtdetr_swin_L_384_3x_coco.pdparams | https://file+.vscode-resource.vscode-cdn.net/Users/ming/MyWorkspace/IdeaWorkspace/OpenVINO-Java-API/docs/rt_detr/rtdetr_swin_L_384_3x_coco.yml |
RT-DETR-FocalNet | 3x | FocalNet_L_384 | 640 | 56.9 | 74.3 | https://bj.bcebos.com/v1/paddledet/models/rtdetr_focalnet_L_384_3x_coco.pdparams | https://file+.vscode-resource.vscode-cdn.net/Users/ming/MyWorkspace/IdeaWorkspace/OpenVINO-Java-API/docs/rt_detr/rtdetr_focalnet_L_384_3x_coco.yml |
More
Objects365预训练模型
Model | Epoch | Dataset | Input shape | APvcal | AP50val | T4 TensorRT FP16(FPS) | Weight | Logs |
RT-DETR-R18 | 1x | Objects365 | 640 | 22.9 | 31.2 | - | https://bj.bcebos.com/v1/paddledet/models/rtdetr_r18vd_1x_objects365.pdparams | https://github.com/lyuwenyu/RT-DETR/issues/8 |
RT-DETR-R18 | 5x | COCO + Objects365 | 640 | 49.2 | 66.6 | 217 | https://bj.bcebos.com/v1/paddledet/models/rtdetr_r18vd_5x_coco_objects365.pdparams | https://github.com/lyuwenyu/RT-DETR/issues/8 |
RT-DETR-R50 | 1x | Objects365 | 640 | 35.1 | 46.2 | - | https://bj.bcebos.com/v1/paddledet/models/rtdetr_r50vd_1x_objects365.pdparams | https://github.com/lyuwenyu/RT-DETR/issues/8 |
RT-DETR-R50 | 2x | COCO + Objects365 | 640 | 55.3 | 73.4 | 108 | https://bj.bcebos.com/v1/paddledet/models/rtdetr_r50vd_2x_coco_objects365.pdparams | https://github.com/lyuwenyu/RT-DETR/issues/8 |
RT-DETR-R101 | 1x | Objects365 | 640 | 36.8 | 48.3 | - | https://bj.bcebos.com/v1/paddledet/models/rtdetr_r101vd_1x_objects365.pdparams | https://github.com/lyuwenyu/RT-DETR/issues/8 |
RT-DETR-R101 | 2x | COCO + Objects365 | 640 | 56.2 | 74.5 | 74 | https://bj.bcebos.com/v1/paddledet/models/rtdetr_r101vd_2x_coco_objects365.pdparams | https://github.com/lyuwenyu/RT-DETR/issues/8 |
More
数据出自:
https://github.com/PaddlePaddle/PaddleDetection/tree/develop/configs/rtdetr
1
英特尔开发套件AIxBoard介绍
1.1
产品定位
英特尔开发套件AIxBoard是英特尔开发套件官方序列中的一员,专为入门级人工智能应用和边缘智能设备而设计。英特尔开发套件AIxBoard能完美胜人工智能学习、开发、实训、应用等不同应用场景。该套件预装了英特尔OpenVINO 工具套件、模型仓库和演示。
套件主要接口与Jetson Nano载板兼容,GPIO与树莓派兼容,能够最大限度地复用成熟的生态资源。这使得套件能够作为边缘计算引擎,为人工智能产品验证和开发提供强大支持;同时,也可以作为域控核心,为机器人产品开发提供技术支撑。
使用英特尔开发套件AIxBoard,您将能够在短时间内构建出一个出色的人工智能应用应用程序。无论是用于科研、教育还是商业领域,英特尔开发套件AIxBoard都能为您提供良好的支持。借助OpenVINO 工具套件,CPU、iGPU都具备强劲的AI推理能力,支持在图像分类、目标检测、分割和语音处理等应用中并行运行多个神经网络。
1.2
产品参数
1.3
AI推理单元
借助OpenVINO 工具,能够实现CPU+iGPU异构计算推理,IGPU算力约为0.6TOPS
2
准备工作
2.1
配置java环境
下载并配置JDK:
JDK(Java Development Kit)称为Java开发包或Java开发工具,是一个编写Java的Applet小程序和应用程序的程序开发环境。JDK是整个Java的核心,包括了Java运行环境(Java Runtime Environment),一些Java工具和Java的核心类库(Java API)。不论什么Java应用服务器实质都是内置了某个版本的JDK。主流的JDK是Sun公司发布的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 Tools。OpenVINO Runtime包含用于在处理器设备上运行模型部署推理的核心库。OpenVINO Development Tools是一组用于处理OpenVINO 和OpenVINO 模型的工具,包括模型优化器、OpenVINO Runtime、模型下载器等。在此处我们只需要安装OpenVINO Runtime即可。
2.2.1 下载OpenVINO Runtime
访问Download the Intel Distribution of OpenVINO Toolkit页面,按照下面流程选择相应的安装选项,在下载页面,由于英特尔开发套件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并加入环境变量
官网:http://ant.apache.org/
export ANT_HOME={ant_home} export PATH=$ANT_HOME/bin:$PATH
2.3.2 OpenCV 下载源代码
opencv官网下载源码:
https://opencv.org/
解压缩之后进入文件夹
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
在英特尔开发套件AIxBoard上进行测试
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]
详细实现原理可以进入以下网址查看:
https://github.com/Hmm466/OpenVINO-Java-API
4
总结
在该项目中,我们基于英特尔开发套件AIxBoard为硬件基础实现了Java在Ubuntu 22.04系统上成功使用OpenVINO Java API,并且成功运行了RT-DETR模型,后续我还会将继续使用OpenVINO Java API在英特尔开发套件AIxBoard 部署更多的深度学习模型。
审核编辑:刘清
全部0条评论
快来发表一下你的评论吧 !