深度学习之图像分割模型部署入门 (三),案例实战值得一看(PyTorch,Android Studio,ONNX,optimize_for_mobile)

视频讲解

android modelDeployment segmentation onnx

android modelDeployment segmentation pt

目录

方式一:deeplabv3_mobilenet_v3_large.onnx模型部署Android

方式二:best_deeplabv3plus_mobilenet_voc_os16.pt模型部署Android

总结:


模型部署
使用EfficientNetV1训练数据集进行图片预测(前端显示图片,包括微调对比)
手动搭建的VGG16网络结构训练数据和使用ResNet50微调(迁移学习)训练数据对比(图像预测+前端页面显示)
深度学习之网络模型
基于Transformer的机器翻译,使用Pytorch深度学习框架实现和gradio实现一个小小的页面
yolov5目标检测和QT 6.6.0 基于OpenCV加载yolov5.onnx模型文件实现目标检测
PyTorch加载预训练目标检测模型实现物体检测,同时将预训练模型转换为ONNX模型文件(过程详解)
PyTorch 训练之后的网络模型.pth转.onnx文件并对图像进行预测
PyTorch 训练之后的网络模型.pth转.onnx文件并对图像进行预测
QT 6.6.0 基于OpenCV加载.pth模型文件转换之后的ONNX模型文件,并且实现图像分类
QT 6.6.0 基于OpenCV中的cv::dnn::ClassificationModel实现图像分类
yolov5目标检测和QT 6.6.0 基于OpenCV加载yolov5.onnx模型文件实现目标检测
FCN图像分割和QT 6.6.0 加载分割FCN_Resnet50.ONNX模型文件进行图像分割(过程详解)
深度学习之模型部署入门 (一),案例实战值得一看(PyTorch,ONNX,ONNX Runtime,Flask,Android Studio,Gradio,Streamlit)
深度学习之模型部署入门 (二),案例实战值得一看(PyTorch,Android Studio,optimize_for_mobile)

        前面的两篇文章已经讲解了关于图像分类算法和目标检测算法在Android中的部署,并且分别讲解的是采用ONNXtorchscript两种不同的中间表示格式进行部署,同时我们也讲解了在转换为中间表示格式中应该注意哪些点。本文主要是基于前面讲解的两种表示方法将语义分割模型部署到Android中。

        其实这里和之前的一样,如果将PyTorch官方所提供的图像分割模型转换为onnx没有太大的问题,但是如果转换为torchscript中间格式并结合optimize_for_mobile用于移动端的部署的话会出现很大的问题。虽然转换为torchscript中间格式没有问题,但是在Android中加载.pt模型的时候始终加载不了,像这种问题几乎很难跟踪中间到底发生了什么,所以这个问题也暂时没有解决。采用PyTorch官方提供的图像分割模型并转换为torchscript中间表示格式和结合optimize_for_mobile使用存在以下问题:

  • Android中使用LiteModuleLoader.load加载模型失败;
  • PyTorch使用torch.jit.load加载保存.pt模型时,预测的图像分割结果全部为背景(难道使用了针对移动端进行优化的optimize_for_mobile加载就有问题了吗?);如果不结合optimize_for_mobile使用保存模型之后,PyTorch中采用torch.jit.load加载模型进行预测结果没有什么问题,即使这样,没有做优化的模型放到Android中加载依然失败。

注:针对以上的问题,从github上面找了一个DeepLapv3Plus的图像分割模型进行模型转换(转换为torchscript,不采用optimize_for_mobile进行优化)以及Android studio中加载,模型加载没有问题,但是最终的预测结果还是只是背景,在PyTorch使用torch.jit.load加载模型进行预测没有问题,虽然使用torchscript没有成功,但是下面还是会讲解思路。

方式一:deeplabv3_mobilenet_v3_large.onnx模型部署Android

  • 加载模型(深度学习之模型部署入门 (一))和读取颜色模版.txt文件如下,其中文件中包含21个类别多对应的三通道颜色(110,192,117),读取文件代码如下:
  • 图像缩放和预处理
  • 预测图像:模型输出有最终结果out和aux辅助分类结果,输出维度都是[1,21,512,512],我们这里只需要最终输出结果out即可。
  • 获得预测结果的掩码mask,也就是对应每一个像素点21个通道的最大类别:维度为[512,512]
  • 根据预测的结果对原图进行调色

注:以上只是给出了核心代码部分,实时检测部分的代码差不多。

深度学习之图像分割模型部署入门 (三),案例实战值得一看

方式二:best_deeplabv3plus_mobilenet_voc_os16.pt模型部署Android

        由于PyTorch官方提供的图像分割模型转换torchscript中间格式之后再Android studio中加载有问题,因此github上查找了一个DeepLapv3Plus模型进行图像的预测(未使用optimize_for_mobile优化,主要是因为优化之后预测存在问题):https://github.com/VainF/DeepLabV3Plus-Pytorch

下载模型:DeepLabV3Plus-MobileNet(https://share.weiyun.com/djX6MDwM

Android studio中预测的结果如下:

注:不管是什么图像都是预测为背景,如果真的是Android studio使用 LiteModuleLoader.load加载模型导致权重参数出现问题,那也不应该是每一张图像都是预测结果为背景。

总结:

ONNXtorchscript使用的情况来看,对于ONNX中间格式表示进行推理更加的稳定,除了对于pytorch官方提供的一些目标检测模型在转换为ONNX中间格式存在问题以外,其他目前没有太大的问题。但是对于torchscript中间表示格式存在的问题比较大,当模型结构比较复杂的时候,使用torch.jit.traceoptimize_for_mobile会发现保存的模型在推理阶段结果是错误的,如果使用torch.jit.script保存模型的话,中间特别容易出现问题,如果模型比较复杂或者中间的数据格式存在字典之类的就容易出现问题,因此建议还是使用ONNX中间表示格式。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值