本文將從零開始詳細(xì)介紹環(huán)境搭建的完整步驟,我們基于英特爾開發(fā)套件AIxBoard為硬件基礎(chǔ)實(shí)現(xiàn)了Java在Ubuntu 22.04系統(tǒng)上成功使用OpenVINO Java API,并且成功運(yùn)行了RT-DETR實(shí)現(xiàn)實(shí)時(shí)端到端目標(biāo)檢測(cè)器AI任務(wù)。
項(xiàng)目中所使用的代碼已上傳至OpenVINO Java API倉(cāng)庫(kù)中,GitHub網(wǎng)址為:
https://github.com/Hmm466/OpenVINO-Java-API
RT-DETR是第一個(gè)實(shí)時(shí)端到端目標(biāo)檢測(cè)器。具體而言,我們?cè)O(shè)計(jì)了一個(gè)高效的混合編碼器,通過解耦尺度內(nèi)交互和跨尺度融合來高效處理多尺度特征,并提出了IoU感知的查詢選擇機(jī)制,以優(yōu)化解碼器查詢的初始化。此外,RT-DETR支持通過使用不同的解碼器層來靈活調(diào)整推理速度,而不需要重新訓(xùn)練,這有助于實(shí)時(shí)目標(biāo)檢測(cè)器的實(shí)際應(yīng)用。
RT-DETR-L在COCO val2017上實(shí)現(xiàn)了53.0%的AP,在T4 GPU上實(shí)現(xiàn)了114FPS,RT-DETR-X實(shí)現(xiàn)了54.8%的AP和74FPS,RT-DETR-H實(shí)現(xiàn)了56.3%的AP和40FPS,在速度和精度方面都優(yōu)于相同規(guī)模的所有YOLO檢測(cè)器。RT-DETR-R50實(shí)現(xiàn)了53.1%的AP和108FPS,RT-DETR-R101實(shí)現(xiàn)了54.3%的AP和74FPS,在精度上超過了全部使用相同骨干網(wǎng)絡(luò)的DETR檢測(cè)器。
基礎(chǔ)模型
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預(yù)訓(xùn)練模型
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
數(shù)據(jù)出自:
https://github.com/PaddlePaddle/PaddleDetection/tree/develop/configs/rtdetr
1
英特爾開發(fā)套件AIxBoard介紹
1.1
產(chǎn)品定位
英特爾開發(fā)套件AIxBoard是英特爾開發(fā)套件官方序列中的一員,專為入門級(jí)人工智能應(yīng)用和邊緣智能設(shè)備而設(shè)計(jì)。英特爾開發(fā)套件AIxBoard能完美勝人工智能學(xué)習(xí)、開發(fā)、實(shí)訓(xùn)、應(yīng)用等不同應(yīng)用場(chǎng)景。該套件預(yù)裝了英特爾OpenVINO 工具套件、模型倉(cāng)庫(kù)和演示。
套件主要接口與Jetson Nano載板兼容,GPIO與樹莓派兼容,能夠最大限度地復(fù)用成熟的生態(tài)資源。這使得套件能夠作為邊緣計(jì)算引擎,為人工智能產(chǎn)品驗(yàn)證和開發(fā)提供強(qiáng)大支持;同時(shí),也可以作為域控核心,為機(jī)器人產(chǎn)品開發(fā)提供技術(shù)支撐。
使用英特爾開發(fā)套件AIxBoard,您將能夠在短時(shí)間內(nèi)構(gòu)建出一個(gè)出色的人工智能應(yīng)用應(yīng)用程序。無論是用于科研、教育還是商業(yè)領(lǐng)域,英特爾開發(fā)套件AIxBoard都能為您提供良好的支持。借助OpenVINO 工具套件,CPU、iGPU都具備強(qiáng)勁的AI推理能力,支持在圖像分類、目標(biāo)檢測(cè)、分割和語音處理等應(yīng)用中并行運(yùn)行多個(gè)神經(jīng)網(wǎng)絡(luò)。
1.2
產(chǎn)品參數(shù)
1.3
AI推理單元
借助OpenVINO 工具,能夠?qū)崿F(xiàn)CPU+iGPU異構(gòu)計(jì)算推理,IGPU算力約為0.6TOPS
2
準(zhǔn)備工作
2.1
配置java環(huán)境
下載并配置JDK:
JDK(Java Development Kit)稱為Java開發(fā)包或Java開發(fā)工具,是一個(gè)編寫Java的Applet小程序和應(yīng)用程序的程序開發(fā)環(huán)境。JDK是整個(gè)Java的核心,包括了Java運(yùn)行環(huán)境(Java Runtime Environment),一些Java工具和Java的核心類庫(kù)(Java API)。不論什么Java應(yīng)用服務(wù)器實(shí)質(zhì)都是內(nèi)置了某個(gè)版本的JDK。主流的JDK是Sun公司發(fā)布的JDK,除了Sun之外,還有很多公司和組織都開發(fā)了自己的JDK.
2.1.1添加api到本地maven
添加OpenVINO Java API至Maven(目前沒有在meven中央倉(cāng)庫(kù)發(fā)布,所以需要手動(dòng)安裝)
2.1.2 clone OpenVINO Java API項(xiàng)目到本地
git clone https://github.com/Hmm466/OpenVINO-Java-API
2.1.3 通過IDEA或Eclipse打開
通過maven install到本地maven庫(kù)中
[INFO] ------------------------------------------------------------------------ [INFO] BUILD SUCCESS [INFO] ------------------------------------------------------------------------ [INFO] Total time: 14.647 s [INFO] Finished at: 2023-11-02T21:34:49+08:00 [INFO] ------------------------------------------------------------------------
jar包會(huì)放置在
/{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包含用于在處理器設(shè)備上運(yùn)行模型部署推理的核心庫(kù)。OpenVINO Development Tools是一組用于處理OpenVINO 和OpenVINO 模型的工具,包括模型優(yōu)化器、OpenVINO Runtime、模型下載器等。在此處我們只需要安裝OpenVINO Runtime即可。
2.2.1 下載OpenVINO Runtime
訪問Download the Intel Distribution of OpenVINO Toolkit頁(yè)面,按照下面流程選擇相應(yīng)的安裝選項(xiàng),在下載頁(yè)面,由于英特爾開發(fā)套件AIxBoard使用的是Ubuntu20.04,因此下載時(shí)按照指定的編譯版本下載即可。
2.2.2 解壓縮安裝包
我們所下載的OpenVINO Runtime本質(zhì)是一個(gè)C++依賴包,因此我們把它放到我們的系統(tǒng)目錄下,這樣在編譯時(shí)會(huì)根據(jù)設(shè)置的系統(tǒng)變量獲取依賴項(xiàng)。
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庫(kù)
2.3.1 下載ANT
由于OpenCV編譯出libopencv_java{version}.[so|dll|dylib]需要apache ant的支持,所以需要手動(dòng)下載ant并加入環(huán)境變量
官網(wǎng):http://ant.apache.org/
export ANT_HOME={ant_home} export PATH=$ANT_HOME/bin:$PATH
2.3.2 OpenCV 下載源代碼
opencv官網(wǎng)下載源碼:
https://opencv.org/
解壓縮之后進(jìn)入文件夾
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
在英特爾開發(fā)套件AIxBoard上進(jìn)行測(cè)試
3.1
源代碼直接測(cè)試
git clone https://github.com/Hmm466/OpenVINO-Java-API
3.2
編寫測(cè)試類
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); } }
結(jié)果將輸出
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]
詳細(xì)實(shí)現(xiàn)原理可以進(jìn)入以下網(wǎng)址查看:
https://github.com/Hmm466/OpenVINO-Java-API
4
總結(jié)
在該項(xiàng)目中,我們基于英特爾開發(fā)套件AIxBoard為硬件基礎(chǔ)實(shí)現(xiàn)了Java在Ubuntu 22.04系統(tǒng)上成功使用OpenVINO Java API,并且成功運(yùn)行了RT-DETR模型,后續(xù)我還會(huì)將繼續(xù)使用OpenVINO Java API在英特爾開發(fā)套件AIxBoard 部署更多的深度學(xué)習(xí)模型。
審核編輯:劉清
-
JAVA
+關(guān)注
關(guān)注
19文章
2966瀏覽量
104700 -
GPIO
+關(guān)注
關(guān)注
16文章
1204瀏覽量
52051 -
樹莓派
+關(guān)注
關(guān)注
116文章
1706瀏覽量
105606 -
Ubuntu系統(tǒng)
+關(guān)注
關(guān)注
0文章
91瀏覽量
3927 -
OpenVINO
+關(guān)注
關(guān)注
0文章
92瀏覽量
196
原文標(biāo)題:OpenVINO? Java API應(yīng)用RT-DETR做目標(biāo)檢測(cè)器實(shí)戰(zhàn) | 開發(fā)者實(shí)戰(zhàn)
文章出處:【微信號(hào):英特爾物聯(lián)網(wǎng),微信公眾號(hào):英特爾物聯(lián)網(wǎng)】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論