PyTorch在深度学习领域中的应用日趋广泛,得益于它独特的规划。无论是数据的并行处理仍是动态计算图,全部都为Python做出了许多简化。许多论文都挑选运用PyTorch去完成也证明了它在练习方面的功率以及易用性。
  在PyTorch领域,虽然布置一个模型有许多挑选,可为Java开发人员准备的选项却寥寥无几。
  在曩昔,用户能够用PyTorchC++写JNI(JavaNativeInterface)来完成这个进程。最近,PyTorch1.4也发布了试验性的Java前端。
  但是这两种解决方案都没有方法能让Java开发者很好的运用:用户需要从易于运用和易于保护中二选一。
  针关于这个问题,亚马逊云服务(AWS)开源了DeepJavaLibrary(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"}
  然后只需gradlebuild,根本配置就功德圆满了。
  开端布置模型
  咱们用到的方针检测模型来源于NVIDIA在torchhub发布的预练习模型。咱们用下面这张图来推理几个能够识别的物体(狗,自行车以及皮卡)。
  能够经过下面的代码来完成推理的进程:
  publicstaticvoidmain(String[]args)throwsIOException,ModelException,TranslateException{Stringurl="https://github.com/awslabs/djl/raw/master/examples/src/test/resources/dog_bike_car.jpg";BufferedImageimg=BufferedImageUtils.fromUrl(url);Criteriacriteria=Criteria.builder().optApplication(Application.CV.OBJECT_DETECTION).setTypes(BufferedImage.class,DetectedObjects.class).optFilter("backbone","resnet50").optProgress(newProgressBar()).build();try(ZooModelmodel=ModelZoo.loadModel(criteria)){try(Predictorpredictor=model.newPredictor()){DetectedObjectsdetection=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来看一下实际的检测作用:
  你或许会说,这些代码都包装的过于凶猛,真实的小白该如何上手呢?
  让咱们仔细的看一下刚才的那段代码:
  //读取一张图片Stringurl="https://github.com/awslabs/djl/raw/master/examples/src/test/resources/dog_bike_car.jpg";BufferedImageimg=BufferedImageUtils.fromUrl(url);//创立一个模型的寻觅标准Criteriacriteria=Criteria.builder()//设置应用类型:方针检测.optApplication(Application.CV.OBJECT_DETECTION)//确认输入输出类型(运用默许的图片处理工具).setTypes(BufferedImage.class,DetectedObjects.class)//模型的过滤条件.optFilter("backbone","resnet50").optProgress(newProgressBar()).build();//创立一个模型对象try(ZooModelmodel=ModelZoo.loadModel(criteria)){//创立一个推理对象try(Predictorpredictor=model.newPredictor()){//推理DetectedObjectsdetection=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个小时连续推理也不会内存溢出。JamesGosling(Java创始人)在运用后给出了赞誉:
  关于PyTorch的支撑
  DJL现已支撑PyTorch1.5。咱们深度整合了PyTorchC++API,开发了一套JNI供给Java的底层支撑。DJL供给各类PyTorch原生算子算法,现在支撑一切的TorchScript模型。
  现在能够在Mac/Linux/Windows全渠道运行DJLPyTorch。DJL具有自检测CUDA版本的功能,也会自动选用对应的CUDA版本包来运行gpu使命。

posted on 2020-07-25 18:20  林口  阅读(872)  评论(0编辑  收藏  举报