关于DJL使用的一些问题修复

记录一次使用DJL的大坑

一、前言🗄

最近学习深度学习但是使用pytorch来部署模型到web端又不是很方便,所以想着🤔是不是Java有途径直接加载训练好的模型,经过一顿操作:🔎真就找到了一个通过Java进行深度学习的库,DJL(深度Java学习),同时寻找到以下博客:

https://blog.csdn.net/jerry11112/article/details/108166689,

直接创建springboot+Maven+DJL,使用Java调取pytorch模型,不要太爽🤣,但是万万没有想到的这里原来拥有着不少坑,所以在此记录以下自己遇见的几个少见的坑,帮助哪些想要使用DJL却遇见坑直接放弃的人,找到解决方法✨。

1.第一坑Java版本问题:

随着Java版本不断更新,Java加入的新功能越来越多可是用于学习的我们大多数还停留在Java1.8.0,虽然这个版本大部分Java功能都能用,但是如果你想要使用DJL这个包的话,最好还是直接使用java11这样会避免许多麻烦👋🏼

2.第二坑模型下载问题:

在下载模型的时候笔者直接使用的亚马逊提供的resnet模型地址,这样在国内即使没有翻🧱我们还是可以快速的下载训练好的模型,可是我还是推荐你开启你的✈这样会快不少,

3.第三坑模型加载路径中文问题:

下载好模型我们通过zoomodel加载时有时会出现找不到文件的错误这个时候请检查你的项目是不是在中文目录下,存在中文它是找不到你下好的模型的

4. 报:No deep learning engine found(最难最大的坑)

出现这种情况的原因很多,笔者遇见的问题可能是少见的,一波搜索🔎出来的答案都不尽人意,也没有解决,废话不说直接上bug截图:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传在这里插入图片描述

图片较长,分成两个部分
在这里插入图片描述

由上面的截图可以看到是我的一个文件路径出来问题,直接按照官方连接去查照解决方法官方连接:https://github.com/awslabs/djl/blob/master/docs/development/troubleshooting.md,下载了DirectX修复工具来安装遗失依赖项,但是结果一样出现这种错误,无奈另辟蹊径直接搜索文件找不到的原因,功夫不负有缘人在下面的连接中给了我灵感🥰:

python - Pytorch could not find module - Stack Overflow

这个哥们的评论:
在这里插入图片描述

所以经过一顿操作:

1️⃣找到报错的地址查看caffe2_nvrtc.dell是否存在,但是它又存在就很奇怪,

在这里插入图片描述

2️⃣去我们安装的pytorch的anaconda环境看看,会得到一个一样名字的文件,但是一会发现它们的大小不一样。

在这里插入图片描述

4️⃣将这个文件复制到前面文件路径并覆盖它,

在这里插入图片描述

5️⃣然后打开你的编译环境,运行djl相关代码神奇的现象就发生了,你的项目可以运行了,这里注意以下,自己预测的图片最好和项目同一个文件夹下

在这里插入图片描述

二、总结

java和pytorch的完美结合估计还有很远的路要走,但是DJL的出现可以说对与Java加速深度学习部署到生产环境有很好的作用,虽然在使用的时候遇见的不少的坑,但是两者融合后还是很不错的,洋洋洒洒写了这些,希望帮助到想使用DJL但是又遇见不少坑的朋友们避免这些坑。

可以使用以下代码来通过djl使用yolov5: ``` import ai.djl.Model; import ai.djl.basicmodelzoo.basiccv.YoloV5; import ai.djl.modality.cv.Image; import ai.djl.modality.cv.output.DetectedObjects; import ai.djl.repository.zoo.ZooModel; import ai.djl.translate.TranslateException; import ai.djl.translate.Translator; import ai.djl.translate.TranslatorContext; import ai.djl.translate.TranslatorFactory; import ai.djl.util.Utils; import java.io.IOException; import java.nio.file.Path; import java.nio.file.Paths; public class YoloV5Example { public static void main(String[] args) throws IOException, TranslateException { Path imageFile = Paths.get("path/to/image.jpg"); Image image = ImageFactory.getInstance().fromFile(imageFile); // Load the YOLOv5 model ZooModel<Image, DetectedObjects> model = YoloV5.builder().build(); try (Model model = model.getModel()) { model.setBlockRunner(new CudaBlockRunner()); model.load(); // Create a translator to convert input/output Translator<Image, DetectedObjects> translator = new YoloV5Translator(); // Run inference on the image DetectedObjects detections = model.predict(translator.translate(image)); System.out.println(detections); } } private static final class YoloV5Translator implements Translator<Image, DetectedObjects> { @Override public Batchifier getBatchifier() { // YOLOv5 only supports batch size 1 return Batchifier.STACK; } @Override public DetectedObjects processOutput(TranslatorContext ctx, NDList list) throws TranslateException { // Convert the output to DetectedObjects // ... } @Override public NDList processInput(TranslatorContext ctx, Image input) throws TranslateException { // Convert the input to NDList // ... } } public static final class Factory implements TranslatorFactory<Image, DetectedObjects> { @Override public Translator<Image, DetectedObjects> newInstance(Model model, Map<String, Object> arguments) { return new YoloV5Translator(); } } } ``` 这个代码使用DJL 框架来加载 YOLOv5 模型,并使用 CUDA 运行模型。它还定义了一个 `YoloV5Translator` 类来将输入和输出转换为适当的格式。最后,它使用 `model.predict()` 方法来运行推理,并将结果打印到控制台上。
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值