成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

5分鐘!用Java實現目標檢測

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

 本文經AI新媒體量子位(公眾號ID:QbitAI)授權轉載,轉載請聯系出處。

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

5分鐘!用Java實現目標檢測 | PyTorch

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

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

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

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

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

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發布的預訓練模型。我們用下面這張圖來推理幾個可以識別的物體(狗,自行車以及皮卡)。

5分鐘!用Java實現目標檢測 | PyTorch

可以通過下面的代碼來實現推理的過程:

  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.     } 

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

  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實現目標檢測 | 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.    // 創建一個模型的尋找標準 
  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.    // 創建一個模型對象 
  17.    try (ZooModel<BufferedImage, DetectedObjects> model = ModelZoo.loadModel(criteria)) { 
  18.        // 創建一個推理對象 
  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多個模型。所有的模型都可以一鍵導入,用戶只需要使用默認或者自己寫的輸入輸出工具就可以實現輕松的推理。我們還在不斷的添加各種預訓練模型。

了解DJL

5分鐘!用Java實現目標檢測 | PyTorch

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

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

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

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

5分鐘!用Java實現目標檢測 | PyTorch

對于PyTorch的支持

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

現在可以在 Mac/Linux/Windows全平臺運行DJL PyTorch。DJL具有自檢測CUDA版本的功能,也會自動采用對應的CUDA版本包來運行gpu任務。

 

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

2012-06-28 10:26:51

Silverlight

2018-12-12 09:12:54

深度學習百度PaddlePaddl

2020-09-14 11:30:26

HTTP3運維互聯網

2021-04-30 16:23:58

WebRTC實時音頻

2021-01-29 11:43:53

SSHLinux命令

2009-11-16 09:53:56

PHP上傳類

2017-03-16 08:46:57

延時消息環形隊列數據結構

2012-02-24 11:11:43

Platform

2014-04-17 11:34:23

青云青云QingCloudIaaS

2020-12-07 11:23:32

Scrapy爬蟲Python

2020-05-15 07:30:08

黑客Thunderbolt漏洞

2021-03-23 15:35:36

Adam優化語言

2020-02-17 13:45:27

抓取代碼工具

2010-11-03 11:01:05

求職面試

2020-11-23 16:23:59

CSS設計技術

2020-12-17 10:00:16

Python協程線程

2011-07-11 09:58:52

2021-01-29 11:25:57

Python爬山算法函數優化

2021-03-12 09:45:00

Python關聯規則算法

2009-11-26 11:19:52

NIS服務器
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 中文字幕在线观看第一页 | 精品一区久久 | 亚洲视频在线一区 | 成人精品视频99在线观看免费 | 日韩精品一区中文字幕 | 91久久国产综合久久 | 91精品久久久久久久久 | 91国产精品在线 | 美国一级毛片a | 国产91视频一区二区 | 成人国产精品久久 | 国产精品成人在线播放 | 岛国午夜 | 精品国产一区二区三区性色av | 神马影院一区二区三区 | sese视频在线观看 | 精品国产一区二区三区久久久四川 | 成人在线免费观看视频 | 欧美成人综合 | 欧美日韩一区精品 | 99综合在线| 草比av| 99精品久久 | 91精品国产欧美一区二区 | 午夜日韩视频 | 日本福利片| 视频一区在线观看 | 久久99精品久久久 | 亚洲免费观看视频网站 | 一区二区视频 | 精品婷婷 | 一区二区三区精品视频 | 日日操夜夜操天天操 | 视频1区2区| 久久在线免费 | 伊人久久精品 | 久久最新精品视频 | 亚洲精品视频二区 | 不卡一区 | m豆传媒在线链接观看 | 欧美一区二区三区在线播放 |