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

2021-01-10 澎湃新聞

魚羊 編輯整理

量子位 報導 | 公眾號 QbitAI

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

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

文 / 知乎用戶@Lanking

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。下面是一個示例:

plugins {

id 'java'

}

repositories {

jcenter()

}

dependencies {

implementation "ai.djl:api:0.4.0"

implementation "ai.djl:repository:0.4.0"

runtimeOnly "ai.djl.pytorch:pytorch-model-zoo:0.4.0"

runtimeOnly "ai.djl.pytorch:pytorch-native-auto:1.4.0"

}

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

開始部署模型

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

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

public static void main(String[] args) throws IOException, ModelException, TranslateException {

String url = "https://github.com/awslabs/djl/raw/master/examples/src/test/resources/dog_bike_car.jpg";

BufferedImage img = BufferedImageUtils.fromUrl(url);

Criteria criteria =

Criteria.builder()

.optApplication(Application.CV.OBJECT_DETECTION)

.setTypes(BufferedImage.class, DetectedObjects.class)

.optFilter("backbone", "resnet50")

.optProgress(new ProgressBar())

.build();

try (ZooModel model = ModelZoo.loadModel(criteria)) {

try (Predictor predictor = model.newPredictor()) {

DetectedObjects detection = predictor.predict(img);

System.out.println(detection);

}

}

}

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

[

class: "dog", probability: 0.96709, bounds: [x=0.165, y=0.348, width=0.249, height=0.539]

class: "bicycle", probability: 0.66796, bounds: [x=0.152, y=0.244, width=0.574, height=0.562]

class: "truck", probability: 0.64912, bounds: [x=0.609, y=0.132, width=0.284, height=0.166]

]

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

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

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

// 讀取一張圖片

String url = "https://github.com/awslabs/djl/raw/master/examples/src/test/resources/dog_bike_car.jpg";

BufferedImage img = BufferedImageUtils.fromUrl(url);

// 創建一個模型的尋找標準

Criteria criteria =

Criteria.builder()

// 設置應用類型:目標檢測

.optApplication(Application.CV.OBJECT_DETECTION)

// 確定輸入輸出類型 (使用默認的圖片處理工具)

.setTypes(BufferedImage.class, DetectedObjects.class)

// 模型的過濾條件

.optFilter("backbone", "resnet50")

.optProgress(new ProgressBar())

.build();

// 創建一個模型對象

try (ZooModel model = ModelZoo.loadModel(criteria)) {

// 創建一個推理對象

try (Predictor predictor = model.newPredictor()) {

// 推理

DetectedObjects detection = predictor.predict(img);

System.out.println(detection);

}

}

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

了解DJL

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

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

DJL不設限制於後端引擎:用戶可以輕鬆的使用 MXNet, PyTorch, TensorFlow和fastText來在Java上做模型訓練和推理。

DJL的算子設計無限趨近於numpy:它的使用體驗上和numpy基本是無縫的,切換引擎也不會造成結果改變。

DJL優秀的內存管理以及效率機制:DJL擁有自己的資源回收機制,100個小時連續推理也不會內存溢出。

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

對於PyTorch的支持

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

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

想了解更多,請參見下面幾個連結:

https://djl.ai

https://github.com/awslabs/djl

也歡迎加入我們slack論壇:

https://app.slack.com/client/TPX8YGQTW

— 完 —

本文系網易新聞•網易號特色內容激勵計劃籤約帳號【量子位】原創內容,未經帳號授權,禁止隨意轉載。

報名 | 智慧生活行業私享會

歡迎報名,與峰瑞資本、石頭科技、網易有道、思必馳、九號機器人、視感科技、雲丁科技等企業高管,共同探討如何借力資本市場、把握行業趨勢,打造全場景智慧生活:

量子位 QbitAI · 頭條號籤約作者

վ'ᴗ' ի 追蹤AI技術和產品新動態

原標題:《5分鐘!用Java實現目標檢測 | PyTorch》

閱讀原文

相關焦點

  • 5分鐘!用Java實現目標檢測|PyTorch
    這篇來自AWS軟體工程師的投稿,結合實例,詳細介紹了DJL這個為Java開發者設計的深度學習庫:5分鐘,你就能在PyTorch上,用Java實現目標檢測。5分鐘,用Java實現目標檢測文 / 知乎用戶@LankingPyTorch在深度學習領域中的應用日趨廣泛,得益於它獨到的設計。無論是數據的並行處理還是動態計算圖,一切都為Python做出了很多簡化。
  • 從零開始PyTorch項目:YOLO v3目標檢測實現
    機器之心編譯目標檢測是深度學習近期發展過程中受益最多的領域。隨著技術的進步,人們已經開發出了很多用於目標檢測的算法,包括 YOLO、SSD、Mask RCNN 和 RetinaNet。在本教程中,我們將使用 PyTorch 實現基於 YOLO v3 的目標檢測器,後者是一種快速的目標檢測算法。該教程一共有五個部分,本文包含其中的前三部分。
  • 深度學習/目標檢測——pytorch基礎(一)
    隨著這些年深度學習、目標檢測技術的發展,越來越多的公司開始提供深度學習的框架,國內百度和華為相繼發布了paddle和mindspore框架。但要說這兩年發展最快的框架,那還的是facebook的pytorch。17年推出,如今風靡學術圈,很多論文給的源碼都是基於Pytorch,也正是因為這個原因,我決定學習pytorch框架,為代碼復現提供幫助。
  • Facebook 發布 Detectron2:基於 PyTorch 的新一代目標檢測工具
    雷鋒網(公眾號:雷鋒網) AI 開發者按:Detectron 是 FAIR 在 2018 年初公開的目標檢測平臺,包含了大量業內最具代表性的目標檢測、圖像分割、關鍵點檢測算法,該框架主要基於 python 和 caffe2 實現,開源項目已獲得了超 2.2w 的星標數。
  • 使用PyTorch實現目標檢測與跟蹤
    本文將展示如何使用預訓練的分類器檢測圖像中的多個對象,並在視頻中跟蹤它們。 圖像中的目標檢測 目標檢測的算法有很多,YOLO跟SSD是現下最流行的算法。在本文中,我們將使用YOLOv3。
  • 教程| 從零開始PyTorch項目:YOLO v3目標檢測實現(下)
    原標題:教程 | 從零開始PyTorch項目:YOLO v3目標檢測實現(下) 選自Medium 作者:Ayoosh Kathuria 參與:Panda 前幾日,機器之心編譯介紹了《從零開始 PyTorch 項目:YOLO v3 目標檢測實現》的前 3 部分,介紹了 YOLO 的工作原理、創建 YOLO 網絡層級和實現網絡的前向傳播的方法
  • 目標檢測神器mmdetection
    開源的一個深度學習目標檢測工具,包括了RPN、Fast R-CNN、Faster R-CNN、Mask R-CNN、SSD、RetinaNet以及Cascade R-CNN、VGG、HRNet,還有包括了其它的特徵如DCN、Group Normalization、Soft-NMS、Generalized Attention等,mmdetection已經成為目標檢測競賽的必備工具
  • pytorch深度學習一
    聲明:因為任務是學習pytorch,所以更多的還是從框架入手,以代碼為主,深度學習的基礎知識不會涉及非常多。如有需要可以去看書。今天主要內容是pytorch的介紹以及pytorch的優點特徵。第三,提供大量api,深度學習中有很多經典的網絡層,這些實現不需要我們從0寫起,pytorch提供了很多現成的實現,比如下圖
  • 5個步驟實現目標檢測
    目標檢測技術是當今計算機視覺領域的發展趨勢。在場景圖像和視頻中,有許多方法被用來檢測物體。在資源和執行時間方面,每種技術都有自己的優勢和局限性。檢測視頻中的物體也需要大量的技術知識和資源。因此,人們一直在尋找一種簡單、快速的目標檢測方法。在本文中,我們將演示如何檢測視頻中看到的對象,只需5個步驟。
  • 雲計算學習:用PyTorch實現一個簡單的分類器
    主要流程分為以下三個部分:1,自定義生成一個訓練集,具體為在二維平面上的一些點,分為兩類;2,構建一個淺層神經網絡,實現對特徵的擬合,主要是明白在 pytorch 中網絡結構如何搭建;3,完成訓練和測試部分的工作,熟悉 pytorch 如何對網絡進行訓練和測試。1.
  • 目標檢測|SSD原理與實現
    Yolo算法缺點是難以檢測小目標,而且定位不準,但是這幾點重要改進使得SSD在一定程度上克服這些缺點。下面我們詳細講解SDD算法的原理,並最後給出如何用TensorFlow實現SSD算法。這樣做的好處是比較大的特徵圖來用來檢測相對較小的目標,而小的特徵圖負責檢測大目標,如圖4所示,8x8的特徵圖可以劃分更多的單元,但是其每個單元的先驗框尺度比較小。
  • 從R-CNN到YOLO,一文帶你了解目標檢測模型(附論文下載)
    大數據文摘作品編譯:Yanruo、小魚這是一份詳細介紹了目標檢測的相關經典論文、學習筆記、和代碼示例的清單,想要入坑目標檢測的同學可以收藏了!在大數據文摘後臺回復「目標檢測」可打包下載全部論文~R-CNNR-CNN是2014年出現的。
  • NVIDIA專家手把手教你30分鐘實現基於Python的路況目標檢測系統 |...
    智能城市正在成為未來城市發展的方向,而城市交通智能系統則是其中首先實現的可行性目標。交通智能系統的實現有賴於高度靈敏的信息採集、信息處理、信息反饋和優化決策,而智能交通系統中的運動目標檢測技術則是計算機視覺領域一個備受關注的前沿課題,在城市交通構建方面得到了廣泛的應用,隨之而來的則是對數據量、目標檢測精度和實時見解的更高要求。  那麼開發者如何使用 Python 來進行高精度的路況目標檢測系統的搭建,實現智能城市中的交通和行人理解,快速準確地對路況加以判斷呢?
  • PyTorch實現TPU版本CNN模型
    為此,PyTorch一直在通過提供最先進的硬體加速器來支持機器學習的實現。PyTorch對雲TPU的支持是通過與XLA(加速線性代數)的集成實現的,XLA是一種用於線性代數的編譯器,可以針對多種類型的硬體,包括CPU、GPU和TPU。本文演示了如何使用PyTorch和TPU實現深度學習模型,以加快訓練過程。
  • Github代碼實踐:Pytorch實現的語義分割器!
    【PConline資訊】這個代碼是按照Detectron的安裝架構來實現的,僅支持部分功能性。所以,儘管去用就好了。  它可以高效利用內存。對於數據的批處理,這兒有兩種可選擇的技術去減少顯存使用量:1)根據類別分組:同批次的一組圖像是有相似的類別比率 2)根據類別剪裁:剪裁圖像太長了。 類別分組是在Detectron運行,所以用來默認,類別剪裁是來自jwyang/faster-rcnn.pytorch,所以它不能用來默認。
  • 入門指南:用Python實現實時目標檢測(內附代碼)
    來源:Pexels從自動駕駛汽車檢測路上的物體,到通過複雜的面部及身體語言識別發現可能的犯罪活動。目標檢測 (ObjectDetection) 也是計算機視覺最酷的應用之一,這是不容置疑的事實。現在的CV工具能夠輕鬆地將目標檢測應用於圖片甚至是直播視頻。本文將簡單地展示如何用TensorFlow創建實時目標檢測器。
  • 深度學習/目標檢測——pytorch基礎(二)
    pytorch提供了自動求導機制autograph。創建tensor時,通過require_grad表示是否進行求導,默認為False。tensor默認有兩個屬性,一個是grad,即梯度,一個是grad_fn即tensor正向傳播的函數,實例如圖。
  • PyTorch 圖像:01.微調基於 torchvision 0.3的目標檢測模型
    在本教程中,我們將微調在 Penn-Fudan 資料庫中對行人檢測和分割的已預先訓練的 Mask R-CNN 模型。它包含170個圖像和345個行人實例,我們 將用它來說明如何在 torchvision 中使用新功能,以便在自定義數據集上訓練實例分割模型。
  • CPU上跑到 100 fps 的高精度PyTorch人臉特徵點檢測庫
    作者 | cunjian編譯 | CV君轉自 | 我愛計算機視覺【導讀】向大家推薦一款基於PyTorch實現的快速高精度人臉特徵點檢測庫項目地址:https://github.com/cunjian/pytorch_face_landmark該庫支持68點正面/半正面和39點側臉的特徵點檢測,支持不同的主幹網絡,支持使用ONNX的推斷。該庫人臉檢測使用MTCNN算法,特徵點檢測是基於坐標回歸的方法。
  • 60分鐘入門深度學習工具PyTorch
    要防止跟蹤歷史記錄(和使用內存),您還可以使用torch.no_grad包裝代碼塊:在評估模型時,這可能特別有用,因為模型可能具有requires_grad = True的可訓練參數,但我們不需要梯度。還有一個類對於autograd實現非常重要 - Function。