在Android上进行yolov5目标检测,使用torchscript方式

环境

  • windows 10 64bit

  • android studio 4.1.2

  • yolov5 3.0

  • pytorch 1.6+cu101

前言

前文 在Android上运行YOLOv5目标检测 我们介绍过使用ncnn的方式在android设备上进行yolov5的目标检测。本篇介绍另一种方式,即torchscript

代码实践

这个demo来自pytorch官方,地址是: https://github.com/pytorch/android-demo-app/tree/master/ObjectDetection 下载下来使用android studio打开备用。

接下来需要准备torchscript模型,这里使用yolov5 3.0的版本进行转换,来到源码目录,修改model/export.py文件

model.model[-1].export = True

改为

model.model[-1].export = False

然后,还是在这个文件,在代码块

ts = torch.jit.trace(model, img)
ts.save(f)

的中间,加入下面两句

from torch.utils.mobile_optimizer import optimize_for_mobile
ts = optimize_for_mobile(ts)

yolov5 android torchscript

修改完成后就可以进行转换了

(pytorch1.6) xugaoxiang@1070Ti:~/workshop/yolov5-3.0$ python models/export.py --weights weights/yolov5s.pt
Namespace(batch_size=1, img_size=[640, 640], weights='weights/yolov5s.pt')
Fusing layers...
Model Summary: 224 layers, 7266973 parameters, 0 gradients

Starting TorchScript export with torch 1.6.0+cu101...
/home/xugaoxiang/workshop/yolov5-3.0/models/yolo.py:49: TracerWarning: Converting a tensor to a Python boolean might cause the trace to be incorrect. We can't record the data flow of Python values, so this value will be treated as a constant in the future. This means that the trace might not generalize to other inputs!
  if self.grid[i].shape[2:4] != x[i].shape[2:4]:
/home/xugaoxiang/anaconda3/envs/pytorch1.6/lib/python3.7/site-packages/torch/jit/_trace.py:940: TracerWarning: Encountering a list at the output of the tracer might cause the trace to be incorrect, this is only valid if the container structure does not change based on the module's inputs. Consider using a constant container instead (e.g. for `list`, use a `tuple` instead. for `dict`, use a `NamedTuple` instead). If you absolutely need this and know the side effects, pass strict=False to trace() to allow this behavior.
  _force_outplace,
TorchScript export success, saved as weights/yolov5s.torchscript.pt

Starting ONNX export with onnx 1.8.1...
ONNX export success, saved as weights/yolov5s.onnx

Starting CoreML export with coremltools 4.1...
CoreML export failure: Unknown type __torch__.torch.classes.xnnpack.Conv2dOpContext encountered in graph lowering. This type is not supported in ONNX export.

Export complete (13.42s). Visualize with https://github.com/lutzroeder/netron.

命令的最后是导出onnx的报错,由于我们使用的是torchscript而没有用到onnx,所以这个错误可以忽略。将weights/yolov5s.torchscript.pt拷贝android工程中的目录app/src/main/assets

yolov5 android torchscript

注意看,app自带的测试图片也是存放在这里文件夹下,classes.txt是目标的名称,如果要替换自己训练的模型,这个文件也要记得修改。

准备工具就绪,接下来,我们就使用android studio来编译并且安装到android手机上去,测试自带的3张图片

yolov5 android torchscript

yolov5 android torchscript

yolov5 android torchscript

当然,这个app也可以选择手机内的图片进行检测

yolov5 android torchscript

除此以外,还可以使用手机摄像头进行目标检测

yolov5 android torchscript

使用自己的模型

yolov5的模型训练请参考这篇 https://xugaoxiang.com/2020/07/02/yolov5-training/,作为测试,我们也使用上文中训练出来的口罩检测模型

torchscript转换的步骤和上面是一样的,这里就省略了,把生成的torchscript.pt放到assets目录下,重命名为yolov5s.torchscript.pt

接着修改classes.txt

mask
no-mask

这里的值必须与你训练时的保持一致

然后修改文件app/src/main/java/org/pytorch/demo/objectdetection/MainActivity.java

mModule = PyTorchAndroid.loadModuleFromAsset(getAssets(), "best.torchscript.pt");
BufferedReader br = new BufferedReader(new InputStreamReader(getAssets().open("classes.txt")));

根据自己的情况,修改这2个文件名

接着修改文件ObjectDetectionActivity.java

private static int mOutputColumn = 7; // left, top, right, bottom, score and 80 class probability

这个值是5+class数量,针对口罩这个就是5+2=7,同样是这个文件,往下拉

Result result = new Result(cls, outputs[i*7+4], rect);

修改i*后面的值,与mOutputColumn是一样的。

最后,重新编译下工程并安装到手机上进行测试

yolov5 android torchscript

yolov5 android torchscript

yolov5 android torchscript

yolov5 android torchscript

参考资料

  • 借助NCNN,在Android上运行YOLOv5目标检测

  • windows 10安装cuda和cudnn

  • yolov5模型训练

  • yolov5 5.0版本

  • Android studio gradle构建失败的解决方法

  • https://pytorch.org/tutorials/recipes/script_optimized.html

  • https://github.com/pytorch/android-demo-app/issues/102

  • 8
    点赞
  • 71
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 22
    评论
YOLO系列是基于深度学习的端到端实时目标检测方法。 PyTorch版的YOLOv5轻量而性能高,更加灵活和易用,当前非常流行。 本课程将手把手地教大家使用labelImg标注和使用YOLOv5训练自己的数据集。课程实战分为两个项目:单目标检测(足球目标检测)和多目标检测(足球和梅西同时检测)。 本课程的YOLOv5使用ultralytics/yolov5,在Windows系统上做项目演示。包括:安装YOLOv5、标注自己的数据集、准备自己的数据集、修改配置文件、使用wandb训练可视化工具、训练自己的数据集、测试训练出的网络模型和性能统计。 希望学习Ubuntu上演示的同学,请前往 《YOLOv5(PyTorch)实战:训练自己的数据集(Ubuntu)》课程链接:https://edu.csdn.net/course/detail/30793  本人推出了有关YOLOv5目标检测的系列课程。请持续关注该系列的其它视频课程,包括:《YOLOv5(PyTorch)目标检测实战:训练自己的数据集》Ubuntu系统 https://edu.csdn.net/course/detail/30793Windows系统 https://edu.csdn.net/course/detail/30923《YOLOv5(PyTorch)目标检测:原理与源码解析》课程链接:https://edu.csdn.net/course/detail/31428《YOLOv5目标检测实战:Flask Web部署》课程链接:https://edu.csdn.net/course/detail/31087《YOLOv5(PyTorch)目标检测实战:TensorRT加速部署》课程链接:https://edu.csdn.net/course/detail/32303《YOLOv5目标检测实战:Jetson Nano部署》课程链接:https://edu.csdn.net/course/detail/32451《YOLOv5+DeepSORT多目标跟踪与计数精讲》课程链接:https://edu.csdn.net/course/detail/32669《YOLOv5实战口罩佩戴检测》课程链接:https://edu.csdn.net/course/detail/32744《YOLOv5实战中国交通标志识别》课程链接:https://edu.csdn.net/course/detail/35209《YOLOv5实战垃圾分类目标检测》课程链接:https://edu.csdn.net/course/detail/35284       
Android YOLOv5是一种基于深度学习目标检测算法,适用于在Android设备上进行实时目标检测任务。该算法是基于YOLO系列算法的最新版本,通过引入一系列的改进来提高检测性能和速度。 Android YOLOv5通过使用深度卷积神经网络,将输入图像分割成不同的网格单元,每个单元负责检测图像中的一个目标。与传统的基于区域提议网络(R-CNN)的目标检测算法相比,YOLOv5具有更高的检测速度和更低的计算资源消耗。 Android YOLOv5的主要优点之一是其算法结构的简单性和高效性。它只需要单独的一个神经网络模型即可完成目标检测任务,无需复杂的预处理和后处理步骤。这使得在Android设备上运行该算法变得更加快速和便捷。 此外,Android YOLOv5还具有高准确性的优点。通过使用更深的卷积神经网络和更大的数据集进行训练,YOLOv5能够更好地识别并定位图像中的目标物体,从而实现更精准的目标检测结果。 使用Android YOLOv5进行实时目标检测还提供了良好的可扩展性和灵活性。该模型可以在不同的Android设备上运行,并且可以适应不同的目标检测场景,例如人脸识别、车辆检测、行人检测等。 综上所述,Android YOLOv5是一种高效、准确且具有良好可扩展性的目标检测算法,适用于在Android设备上实现实时目标检测任务。它的简单性和高效性,使得该算法成为在Android平台上进行目标检测的一种理想选择。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 22
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

迷途小书童的Note

请博主喝矿泉书!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值