本文將從零開始詳細介紹環境搭建的完整步驟,我們基于英特爾開發套件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 部署更多的深度學習模型。
審核編輯:劉清
-
JAVA
+關注
關注
20文章
2983瀏覽量
106461 -
GPIO
+關注
關注
16文章
1237瀏覽量
53256 -
樹莓派
+關注
關注
118文章
1904瀏覽量
106564 -
Ubuntu系統
+關注
關注
0文章
91瀏覽量
4190 -
OpenVINO
+關注
關注
0文章
111瀏覽量
377
原文標題:OpenVINO? Java API應用RT-DETR做目標檢測器實戰 | 開發者實戰
文章出處:【微信號:英特爾物聯網,微信公眾號:英特爾物聯網】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
OpenVINO Java API詳解與演示

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

RT-DETR用114FPS實現54.8AP遠超YOLOv8
簡單聊聊目標檢測新范式RT-DETR的骨干:HGNetv2

一種新型的DETR輕量化模型Focus-DETR

華為諾亞提出全新目標檢測器Focus-DETR

基于BEV的視覺3D目標檢測器

OpenVINO? C# API詳解與演示

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

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

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

用OpenVINO C# API在intel平臺部署YOLOv10目標檢測模型

評論