0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

OpenVINO™ Java API应用RT-DETR做目标检测器实战

英特尔物联网 来源:英特尔物联网 2024-03-18 15:04 次阅读

本文将从零开始详细介绍环境搭建的完整步骤,我们基于英特尔开发套件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检测器。

23110be0-d6eb-11ee-a297-92fbcf53809c.png

基础模型

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介绍

2480a95e-d6eb-11ee-a297-92fbcf53809c.png

1.1

产品定位

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

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

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

1.2

产品参数

24a86caa-d6eb-11ee-a297-92fbcf53809c.png

1.3

AI推理单元

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

24d01e6c-d6eb-11ee-a297-92fbcf53809c.png

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,因此下载时按照指定的编译版本下载即可。

24ef65c4-d6eb-11ee-a297-92fbcf53809c.png

25114dc4-d6eb-11ee-a297-92fbcf53809c.png

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]

252c0dbc-d6eb-11ee-a297-92fbcf53809c.png

详细实现原理可以进入以下网址查看:

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

4

总结

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




审核编辑:刘清

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • JAVA
    +关注

    关注

    19

    文章

    2904

    浏览量

    102995
  • GPIO
    +关注

    关注

    16

    文章

    1135

    浏览量

    50578
  • 树莓派
    +关注

    关注

    113

    文章

    1640

    浏览量

    104747
  • Ubuntu系统
    +关注

    关注

    0

    文章

    84

    浏览量

    3785
  • OpenVINO
    +关注

    关注

    0

    文章

    59

    浏览量

    91

原文标题:OpenVINO™ Java API应用RT-DETR做目标检测器实战 | 开发者实战

文章出处:【微信号:英特尔物联网,微信公众号:英特尔物联网】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    OpenVINO Java API详解与演示

    英特尔 发行版 OpenVINO 工具套件基于 oneAPI 而开发,可以加快高性能计算机视觉和深度学习视觉应用开发速度工具套件,适用于从边缘到云的各种英特尔平台上,帮助用户更快地将更准确的真实世界
    的头像 发表于 11-09 17:03 660次阅读
    <b class='flag-5'>OpenVINO</b> <b class='flag-5'>Java</b> <b class='flag-5'>API</b>详解与演示

    如何使用OpenVINO C++ API部署FastSAM模型

    FastSAM 模型 | 开发者实战》,在该文章中我们向大家展示了基于 OpenVINO Python API 的基本部署流程。在实际部署过程中会考虑到由效率问题,使得我们可能更倾向于采用更高效的部署方式
    的头像 发表于 11-17 09:53 445次阅读
    如何使用<b class='flag-5'>OpenVINO</b> C++ <b class='flag-5'>API</b>部署FastSAM模型

    一种基于顺序统计量的距离扩展目标检测器

    一种基于顺序统计量的距离扩展目标检测器::该文提出一种高斯白噪声中的距离扩展目标检测器。实际目标的宽带雷达回波能量往往集中于若干距离单元中,
    发表于 10-29 13:07 13次下载

    Java并发编程实战

    Java并发编程实战
    发表于 03-19 11:24 7次下载

    如何结合TensorFlow目标检测API和OpenCV分析足球视频

    使用Tensorflow的目标检测API,可以快速搭建目标检测模型。如果你不熟悉这套API,可以
    的头像 发表于 07-08 09:38 6072次阅读
    如何结合TensorFlow<b class='flag-5'>目标</b><b class='flag-5'>检测</b><b class='flag-5'>API</b>和OpenCV分析足球视频

    RT-DETR用114FPS实现54.8AP远超YOLOv8

    最近,基于Transformer的端到端检测器DETR)已经取得了显著的性能。然而,DETR的高计算成本问题尚未得到有效解决,这限制了它们的实际应用,并使它们无法充分利用无后处理的好处,如非最大值抑制(NMS)。
    的头像 发表于 04-20 09:59 608次阅读

    简单聊聊目标检测新范式RT-DETR的骨干:HGNetv2

    当然,人们对RT-DETR之所以产生浓厚的兴趣,我觉得大概率还是对YOLO系列审美疲劳了,就算是出到了YOLO10086,我还是只想用YOLOv5和YOLOv7的框架来魔改做业务。。
    的头像 发表于 04-27 09:42 1003次阅读
    简单聊聊<b class='flag-5'>目标</b><b class='flag-5'>检测</b>新范式<b class='flag-5'>RT-DETR</b>的骨干:HGNetv2

    介绍RT-DETR两种风格的onnx格式和推理方式

    RT-DETR是由百度近期推出的DETR-liked目标检测器,该检测器由HGNetv2、混合编码器和带有辅助预测头的Transformer
    的头像 发表于 05-17 17:46 2254次阅读
    介绍<b class='flag-5'>RT-DETR</b>两种风格的onnx格式和推理方式

    华为诺亚提出全新目标检测器Focus-DETR

    为实现模型性能和计算资源消耗、显存消耗、推理时延之间的平衡,Focus-DETR 利用精细设计的前景特征选择策略,实现了目标检测高相关特征的精确筛选;继而,Focus-DETR 进一步
    的头像 发表于 08-02 15:43 307次阅读
    华为诺亚提出全新<b class='flag-5'>目标</b><b class='flag-5'>检测器</b>Focus-<b class='flag-5'>DETR</b>

    OpenVINO™ C# API详解与演示

    OpenVINO C# API 支持 NuGet 程序包安装方式,这与 OpenVINO C++ 库的安装过程相比,更加简单。如果使用 Visual Studio 开发 AI 项目,则可以通过 NuGet 程序包管理功能直接安装
    的头像 发表于 10-13 16:39 395次阅读
    <b class='flag-5'>OpenVINO</b>™  C# <b class='flag-5'>API</b>详解与演示

    基于OpenVINO Python API部署RT-DETR模型

    RT-DETR 是在 DETR 模型基础上进行改进的,一种基于 DETR 架构的实时端到端检测器,它通过使用一系列新的技术和算法,实现了更高效的训练和推理,我们将在 Python、C+
    的头像 发表于 10-20 11:15 534次阅读
    基于<b class='flag-5'>OpenVINO</b> Python <b class='flag-5'>API</b>部署<b class='flag-5'>RT-DETR</b>模型

    第一个基于DETR的高质量通用目标检测方法

    现有的DETR系列模型在非COCO数据集上表现较差,且预测框不够准确。其主要原因是:DETR检测头中用全局交叉注意力替换了原来的卷积,删除了以中心为中心的先验知识;另一方面,DETR
    的头像 发表于 11-01 16:12 315次阅读
    第一个基于<b class='flag-5'>DETR</b>的高质量通用<b class='flag-5'>目标</b><b class='flag-5'>检测</b>方法

    基于OpenVINO C++ API部署RT-DETR模型

    RT-DETR 是在 DETR 模型基础上进行改进的,一种基于 DETR 架构的实时端到端检测器,它通过使用一系列新的技术和算法,实现了更高效的训练和推理,在前文我们发表了《基于
    的头像 发表于 11-03 14:30 373次阅读
    基于<b class='flag-5'>OpenVINO</b> C++ <b class='flag-5'>API</b>部署<b class='flag-5'>RT-DETR</b>模型

    基于OpenVINO C# API部署RT-DETR模型

    RT-DETR 是在 DETR 模型基础上进行改进的,一种基于 DETR 架构的实时端到端检测器,它通过使用一系列新的技术和算法,实现了更高效的训练和推理,在前文我们发表了《基于
    的头像 发表于 11-10 16:59 399次阅读
    基于<b class='flag-5'>OpenVINO</b> C# <b class='flag-5'>API</b>部署<b class='flag-5'>RT-DETR</b>模型

    百度开源DETRs在实时目标检测中胜过YOLOs

    这篇论文介绍了一种名为RT-DETR的实时检测Transformer,是第一个实时端到端目标检测器
    的头像 发表于 03-06 09:24 327次阅读
    百度开源DETRs在实时<b class='flag-5'>目标</b><b class='flag-5'>检测</b>中胜过YOLOs