自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

5分鐘!用Java實現(xiàn)目標檢測

新聞 前端
作為一個Java開發(fā)者,你是否曾為在PyTorch上部署模型而苦惱?這篇來自AWS軟件工程師的投稿,結(jié)合實例,詳細介紹了DJL這個為Java開發(fā)者設計的深度學習庫:5分鐘,你就能在PyTorch上,用Java實現(xiàn)目標檢測。

 本文經(jīng)AI新媒體量子位(公眾號ID:QbitAI)授權(quán)轉(zhuǎn)載,轉(zhuǎn)載請聯(lián)系出處。

編者按:作為一個Java開發(fā)者,你是否曾為在PyTorch上部署模型而苦惱?這篇來自AWS軟件工程師的投稿,結(jié)合實例,詳細介紹了DJL這個為Java開發(fā)者設計的深度學習庫:5分鐘,你就能在PyTorch上,用Java實現(xiàn)目標檢測。

5分鐘!用Java實現(xiàn)目標檢測 | PyTorch

PyTorch在深度學習領域中的應用日趨廣泛,得益于它獨到的設計。無論是數(shù)據(jù)的并行處理還是動態(tài)計算圖,一切都為Python做出了很多簡化。很多論文都選擇使用PyTorch去實現(xiàn)也證明了它在訓練方面的效率以及易用性。

在PyTorch領域,盡管部署一個模型有很多選擇,可為Java開發(fā)人員準備的選項卻屈指可數(shù)。

在過去,用戶可以用PyTorch C++ 寫JNI (Java Native Interface) 來實現(xiàn)這個過程。最近,PyTorch 1.4 也發(fā)布了試驗性的Java 前端。

可是這兩種解決方案都沒有辦法能讓Java開發(fā)者很好的使用:用戶需要從易于使用和易于維護中二選一。

針對于這個問題,亞馬遜云服務 (AWS)開源了 Deep Java Library (DJL),一個為Java開發(fā)者設計的深度學習庫。它兼顧了易用性和可維護性,一切運行效率以及內(nèi)存管理問題都得到了很好的處理。

DJL使用起來異常簡單。只需幾行代碼,用戶就可以輕松部署深度學習模型用作推理。那么我們就開始上手用DJL部署一個PyTorch 模型吧。

前期準備

用戶可以輕松使用maven或者gradle等Java常用配置管理包來引用DJL。下面是一個示例:

  1. plugins { 
  2.     id 'java' 
  3. repositories {                            
  4.     jcenter() 
  5. dependencies { 
  6.     implementation "ai.djl:api:0.4.0" 
  7.     implementation "ai.djl:repository:0.4.0" 
  8.     runtimeOnly "ai.djl.pytorch:pytorch-model-zoo:0.4.0" 
  9.     runtimeOnly "ai.djl.pytorch:pytorch-native-auto:1.4.0" 

然后只需gradle build,基本配置就大功告成了。

開始部署模型

我們用到的目標檢測模型來源于NVIDIA在torchhub發(fā)布的預訓練模型。我們用下面這張圖來推理幾個可以識別的物體(狗,自行車以及皮卡)。

5分鐘!用Java實現(xiàn)目標檢測 | PyTorch

可以通過下面的代碼來實現(xiàn)推理的過程:

  1. public static void main(String[] args) throws IOException, ModelException, TranslateException { 
  2.     String url = "https://github.com/awslabs/djl/raw/master/examples/src/test/resources/dog_bike_car.jpg"
  3.     BufferedImage img = BufferedImageUtils.fromUrl(url); 
  4.  
  5.     Criteria<BufferedImage, DetectedObjects> criteria = 
  6.             Criteria.builder() 
  7.                     .optApplication(Application.CV.OBJECT_DETECTION) 
  8.                     .setTypes(BufferedImage.class, DetectedObjects.class
  9.                     .optFilter("backbone""resnet50"
  10.                     .optProgress(new ProgressBar()) 
  11.                     .build(); 
  12.  
  13.     try (ZooModel<BufferedImage, DetectedObjects> model = ModelZoo.loadModel(criteria)) { 
  14.         try (Predictor<BufferedImage, DetectedObjects> predictor = model.newPredictor()) { 
  15.             DetectedObjects detection = predictor.predict(img); 
  16.             System.out.println(detection); 
  17.         } 
  18.     } 

然后,就結(jié)束了。相比于其他解決方案動輒上百行的代碼,DJL把所有過程簡化到了不到30行完成。那么我們看看輸出的結(jié)果:

  1.     class"dog", probability: 0.96709, bounds: [x=0.165, y=0.348, width=0.249, height=0.539
  2.     class"bicycle", probability: 0.66796, bounds: [x=0.152, y=0.244, width=0.574, height=0.562
  3.     class"truck", probability: 0.64912, bounds: [x=0.609, y=0.132, width=0.284, height=0.166

你也可以用我們目標檢測圖形化API來看一下實際的檢測效果:

5分鐘!用Java實現(xiàn)目標檢測 | PyTorch

你也許會說,這些代碼都包裝的過于厲害,真正的小白該如何上手呢?

讓我們仔細的看一下剛才的那段代碼:

  1. // 讀取一張圖片 
  2.    String url = "https://github.com/awslabs/djl/raw/master/examples/src/test/resources/dog_bike_car.jpg"
  3.    BufferedImage img = BufferedImageUtils.fromUrl(url); 
  4.    // 創(chuàng)建一個模型的尋找標準 
  5.    Criteria<BufferedImage, DetectedObjects> criteria = 
  6.            Criteria.builder() 
  7.                    // 設置應用類型:目標檢測 
  8.                    .optApplication(Application.CV.OBJECT_DETECTION) 
  9.                    // 確定輸入輸出類型 (使用默認的圖片處理工具) 
  10.                    .setTypes(BufferedImage.class, DetectedObjects.class
  11.                    // 模型的過濾條件 
  12.                    .optFilter("backbone""resnet50"
  13.                    .optProgress(new ProgressBar()) 
  14.                    .build(); 
  15.  
  16.    // 創(chuàng)建一個模型對象 
  17.    try (ZooModel<BufferedImage, DetectedObjects> model = ModelZoo.loadModel(criteria)) { 
  18.        // 創(chuàng)建一個推理對象 
  19.        try (Predictor<BufferedImage, DetectedObjects> predictor = model.newPredictor()) { 
  20.            // 推理 
  21.            DetectedObjects detection = predictor.predict(img); 
  22.            System.out.println(detection); 
  23.        } 
  24.    } 

這樣是不是清楚了很多?DJL建立了一個模型庫(ModelZoo)的概念,引入了來自于GluonCV, TorchHub, Keras 預訓練模型, huggingface自然語言處理模型等70多個模型。所有的模型都可以一鍵導入,用戶只需要使用默認或者自己寫的輸入輸出工具就可以實現(xiàn)輕松的推理。我們還在不斷的添加各種預訓練模型。

了解DJL

5分鐘!用Java實現(xiàn)目標檢測 | PyTorch

DJL是亞馬遜云服務在2019年re:Invent大會推出的專為Java開發(fā)者量身定制的深度學習框架,現(xiàn)已運行在亞馬遜數(shù)以百萬的推理任務中。

如果要總結(jié)DJL的主要特色,那么就是如下三點:

  • DJL不設限制于后端引擎:用戶可以輕松的使用 MXNet, PyTorch, TensorFlow和fastText來在Java上做模型訓練和推理。
  • DJL的算子設計無限趨近于numpy:它的使用體驗上和numpy基本是無縫的,切換引擎也不會造成結(jié)果改變。
  • DJL優(yōu)秀的內(nèi)存管理以及效率機制:DJL擁有自己的資源回收機制,100個小時連續(xù)推理也不會內(nèi)存溢出。

James Gosling (Java 創(chuàng)始人) 在使用后給出了贊譽:

5分鐘!用Java實現(xiàn)目標檢測 | PyTorch

對于PyTorch的支持

DJL現(xiàn)已支持PyTorch 1.5。我們深度整合了PyTorch C++ API,開發(fā)了一套JNI提供Java的底層支持。DJL提供各類PyTorch原生算子算法,現(xiàn)在支持所有的 TorchScript模型。

現(xiàn)在可以在 Mac/Linux/Windows全平臺運行DJL PyTorch。DJL具有自檢測CUDA版本的功能,也會自動采用對應的CUDA版本包來運行g(shù)pu任務。

 

責任編輯:張燕妮 來源: 量子位
相關推薦

2018-12-12 09:12:54

深度學習百度PaddlePaddl

2012-06-28 10:26:51

Silverlight

2020-09-14 11:30:26

HTTP3運維互聯(lián)網(wǎng)

2021-04-30 16:23:58

WebRTC實時音頻

2021-01-29 11:43:53

SSHLinux命令

2012-02-24 11:11:43

Platform

2017-03-16 08:46:57

延時消息環(huán)形隊列數(shù)據(jù)結(jié)構(gòu)

2009-11-16 09:53:56

PHP上傳類

2014-04-17 11:34:23

青云青云QingCloudIaaS

2010-11-03 11:01:05

求職面試

2020-12-17 10:00:16

Python協(xié)程線程

2009-11-26 11:19:52

NIS服務器

2011-07-11 09:58:52

2020-11-23 16:23:59

CSS設計技術(shù)

2021-01-29 11:25:57

Python爬山算法函數(shù)優(yōu)化

2021-03-12 09:45:00

Python關聯(lián)規(guī)則算法

2020-02-17 13:45:27

抓取代碼工具

2020-12-07 11:23:32

Scrapy爬蟲Python

2020-05-15 07:30:08

黑客Thunderbolt漏洞

2021-03-23 15:35:36

Adam優(yōu)化語言
點贊
收藏

51CTO技術(shù)棧公眾號