Java 中的機器學習正在加速圖像處理 Java 開發人員可以使用預訓練的機器學習模型快速實現圖像分類或對象檢測。

來源: https://www.infoworld.com/article/3601711/machine-learning-in-java-is-speeding-image-processing.html

 

近年來,人們對機器學習的興趣穩步增長。具體來說,企業現在在各種用例中使用機器學習進行圖像識別。在 汽車行業、 醫療保健、 安全、 零售、 倉庫中的自動化產品跟蹤、 農業和農業、 食品識別 甚至 通過指向手機攝像頭的實時翻譯中都有應用。由於機器學習和視覺識別,機器可以  在 MRI 和 CT 掃描中 檢測癌症 和 COVID-19 。

如今,其中許多解決方案主要是使用開源和專有 ML 工具包在 Python 中開發的,每個工具包都有自己的 API。儘管Java 在企業中很受歡迎,但沒有任何標準可以用 Java 開發機器學習應用程序。JSR-381 的 開發旨在通過爲 Java 應用程序開發人員提供一組用於視覺識別 (VisRec) 應用程序(例如圖像分類和對象檢測)的標準、靈活且對 Java 友好的 API 來彌補這一差距。JSR-381 有幾個依賴機器學習平臺的實現,例如 TensorFlow、MXNet 和 DeepNetts。其中一個實現 是基於Deep Java Library  (DJL),一個開源庫    由亞馬遜開發,用於在 Java 中構建機器學習。DJL通過捆綁必要的圖像處理例程 ,爲 TensorFlow、  MXNet和 PyTorch等流行的機器學習框架提供掛鉤 ,使其成爲 JSR-381 用戶的靈活而簡單的選擇。 

在本文中,我們演示了 Java 開發人員如何使用 JSR-381 VisRec API 在不到 10 行代碼的情況下通過 DJL 的預訓練模型實現圖像分類或對象檢測。我們還通過兩個示例演示了用戶如何在不到 10 分鐘的時間內使用預訓練的機器學習模型。讓我們開始吧!

使用預訓練模型識別手寫數字

視覺識別的一個有用應用程序和“hello world”示例是識別手寫數字。識別手寫數字對人類來說似乎很容易。由於我們大腦中視覺和模式匹配子系統的處理能力和協作,我們通常可以從草率的手寫文檔中正確辨別出正確的數字。然而,由於許多可能的變化,這個看似簡單的任務對於機器來說非常複雜。這是機器學習的一個很好的用例,特別是視覺識別。JSR 381 存儲庫有一個很好的 示例 ,它使用 JSR-381 VisRec API 來正確識別手寫數字。此示例將手寫數字與MNIST 手寫數字數據集進行比較 ,一個包含超過 6 萬張圖像的公開數據庫。預測圖像代表什麼稱爲圖像分類。我們的示例查看一張新圖像並嘗試確定它是什麼特定數字的概率。

對於此任務,VisRec API 提供了一個 ImageClassifier 接口,該接口可以專門用於使用通用參數的輸入圖像的特定 Java 類。它還提供了一個 classify() 方法,該方法執行圖像分類並返回所有可能圖像類別的類別概率圖。按照 VisRec API 的約定,每個模型都提供一個靜態的 builder() 方法,該方法返回相應的構建器對象,並允許開發人員配置所有相關設置,例如 imageHeight、imageWidth。

inputClass(BufferedImage.class). With that you specify the class which is used to represent the image. 要爲我們的手寫數字示例定義圖像分類器,您可以使用 imageHeight(28) 和 i配置輸入處理 mageWidth(28) 以將輸入圖像的大小調整爲 28x28 形狀,因爲這是用於訓練模型的原始大小。

構建分類器對象後,將輸入圖像提供給分類器以識別圖像。


屏幕截圖 2020 年 12 月 18 日下午 2.43.09
 
AWS

運行此代碼會產生以下輸出。

屏幕截圖 2020 年 12 月 18 日下午 2.44.26
 
AWS

該模型爲圖像中嵌入的數字確定了五個可能的選項,併爲每個選項關聯了概率。分類器以 99.98% 的壓倒性概率正確預測基礎數字爲 0

這種情況的一個明顯概括是當您需要檢測同一圖像中的不同對象時該怎麼做的問題?

使用預訓練的單次檢測器 (SSD) 模型識別對象

Single Shot Detector  (SSD) 是一種使用單個深度神經網絡檢測圖像中對象的機制。在此示例中,您使用預訓練的 SSD 模型識別圖像中的對象。目標檢測是一項更具挑戰性的視覺識別任務。除了對圖像中的對象進行分類外,對象檢測還可以識別圖像中對象的位置。它還可以在每個感興趣的對象周圍繪製一個邊界框以及一個類(文本)標籤。 

SSD 機制是機器學習的最新發展,它能以驚人的速度檢測對象,同時與計算密集型模型相比還能保持準確性。您可以通過了解 SSD MultiBox — 深度學習中的實時對象檢測 博客文章和深入學習一書中 的練習瞭解更多關於 SSD 模型的信息   

通過 DJL 的 JSR-381 實施,用戶可以訪問可立即使用的 SSD 模型的預訓練實施。DJL 使用 ModelZoo 來簡化模型部署。在以下代碼塊中,您使用 ModelZoo.loadModel() 加載預訓練模型,實例化對象檢測器類並將該模型應用於示例圖像。

屏幕截圖 2020 年 12 月 18 日下午 2.45.25
 
AWS

這是我們可以使用的新圖像。

屏幕截圖 2020 年 12 月 18 日下午 2.46.23
 
AWS

在此圖像上運行我們的代碼會產生以下結果:

屏幕截圖 2020 12 18 下午 2.47.14
 
AWS

如果您想將每個檢測到的對象周圍的邊界框添加到圖像上,您只需添加幾行代碼即可。有關詳細信息,請參閱 完整的 GitHub 示例。該模型對三個感興趣的對象(自行車、汽車和狗)進行分類,在每個對象周圍繪製一個邊界框,並提供由概率反映的置信度。

屏幕截圖 2020 12 18 下午 2.48.10
 
AWS

下一步是什麼?

在這篇文章中,我們只是粗淺地介紹了您可以使用 JSR-381 API 的 DJL 實現做什麼。您可以使用 ModelZoo 中預訓練模型的存儲庫探索和實施更多模型,或引入您自己的模型。

我們還邀請您查看DJL,這是一個由Amazon 的 Java 開發人員爲 Java 社區 構建的開源庫。我們試圖簡化在 Java 中開發和部署機器學習。請加入我們的使命。 

DJL 有很多用例,您可以  爲客戶服務 開發一個問答應用程序,對您的瑜伽姿勢進行姿勢估計 或 訓練您自己的模型 來檢測您後院的入侵者。我們的 Spring Boot 入門工具包 還可以直接將 ML 與您的 Spring Boot 應用程序集成。您可以通過我們的介紹性博客、  網站 和 示例庫瞭解更多關於 DJL 的信息 前往我們的Github 存儲庫並在我們的 Slack頻道 上與我們協作  

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章