DJL初探
現今在深度學習領域中主要的開發語言還是以Python為主,在目前熱門的深度學習框架如TensorFlow、PyTorch、mxnet也是對Python有較大的支持。儘管Java也是目前流行的程式語言,但卻缺乏深度學習相關支持的lib。
在2019/12由Amazon發布的DJL(Deep Java Library)的深度學習開發工具包,可以讓Java開發者更容易的開發及應用原生的機器學習及深度學習的模型。
DJL在既有的深度學習框架上提供了一套基於Java的API,並簡化API的定義以降低深度學習開發的難度,通過簡化的API以及DJL事先訓練好的模型,使開發者可以在短時間內建制一套深度學習的應用。
DJL使用案例
在此範例中使用了DJL Model-Zoo提供的SSD(Single Shot Detector)模型,建立了一個人物的檢測。專案由IntelliJ IDEA建立一個Gradle專案,詳細build.gradle內容如下
plugins {
id 'java'
}
repositories {
jcenter()
}
dependencies {
compile "org.apache.logging.log4j:log4j-slf4j-impl:2.12.1"
compile "ai.djl.mxnet:mxnet-model-zoo:0.2.1"
runtime "ai.djl.mxnet:mxnet-native-mkl:1.6.0-b:linux-x86_64"
// Comment above line for Windows/Mac and un-comment line below
//runtime "ai.djl.mxnet:mxnet-native-mkl:1.6.0-b:osx-x86_64" // For macOS
//runtime "ai.djl.mxnet:mxnet-native-mkl:1.6.0-b:win-x86_64" // For Windows
}
此範例將利用以下圖片進行檢測
來源:Offered under Apache-2.0 license on Gluon-CV
以下程式碼顯示了DJL檢測圖片的流程。首先先載入Model Zoo提供的SSD模型,之後建立該模型提供的Predictor,最後使用predict方法對圖片進行檢測。DJL還提供了圖片視覺化的工具方便展示檢測的結果。
import ai.djl.modality.cv.DetectedObjects;
import ai.djl.modality.cv.ImageVisualization;
import ai.djl.modality.cv.util.BufferedImageUtils;
import ai.djl.mxnet.zoo.MxModelZoo;
import ai.djl.repository.zoo.ZooModel;
import ai.djl.training.util.ProgressBar;
import javax.imageio.ImageIO;
import java.awt.image.BufferedImage;
import java.io.File;
public class SimpleSSDExample {
public static void main(String[] args) throws Exception{
// Get image file path
BufferedImage img = BufferedImageUtils
.fromUrl("https://raw.githubusercontent.com/dmlc/web-data/master/gluoncv/pose/soccer.png");
//Get resnet model from model zoo.
ZooModel<BufferedImage, DetectedObjects> model =
MxModelZoo.SSD.loadModel(new ProgressBar());
//Create a new predictor from model and predict on image.
DetectedObjects predictResult = model.newPredictor().predict(img);
// Draw Bounding boxes on image
ImageVisualization.drawBoundingBoxes(img, predictResult);
//Save result
ImageIO.write(img, "png", new File("ssd.png"));
model.close();
}
}
以上程式碼檢測出圖片中有三位運動員,並將結果輸出至當前工作目錄的ssd.png檔案
以上為簡單的範例,Model-Zoo 還提供其他事先處理完成的模型可以在你的Java應用中快速整合深度學習應用。
對深度學習有興趣的Java開發人員透過DJL會是很好的入門方式,其官方文件還有其他的開發案例。