深度学习算法模型部署

 绝大数情况,我们使用网上公开数据集,跑通一个深度学习算法模型,获得了较高的准确率,这样仅停留在仿真阶段,并未考虑算法实际的部署。以下将以故障诊断为例,将深度学习算法模型部署到Android系统,并实时进行故障诊断,此处输入为一维振动信号。

        对于目标检测而言,可以考虑使用硬件加速接口以及对网络模型进行剪枝、量化、蒸馏等优化技术,从而加速模型推理。

将深度学习部署到移动端有以下几个重要的优势:

  1. 实时推理: 在移动设备上部署深度学习模型可以实现实时推理,使移动应用程序能够即时响应用户的请求和输入。这对于需要即时反馈的应用程序(如语音识别、图像识别、自然语言处理等)非常重要。

  2. 隐私保护: 在移动设备上执行推理可以保护用户的隐私数据,因为数据不需要传输到远程服务器进行处理。这对于处理敏感数据(如人脸识别、语音识别等)的应用程序非常重要。

  3. 离线功能: 移动设备上部署的深度学习模型可以在没有互联网连接的情况下工作,从而使应用程序具有离线功能。这对于在网络连接不稳定或不可用的环境下使用应用程序的用户非常有用。

  4. 减少延迟: 将深度学习模型部署到移动端可以减少与远程服务器进行通信的延迟,从而提高应用程序的响应速度和性能。

  5. 降低带宽消耗: 在移动设备上执行推理可以减少与远程服务器之间的数据传输量,从而降低带宽消耗和通信成本。

  6. 定制化需求: 将深度学习模型部署到移动端可以根据特定应用程序的需求进行定制化开发,从而提供更好的用户体验和功能。

1.仅使用PyCharm+AndroidStudio

PyCharm相关

将网络模型转换为TochScript模型并保存,便于后续部署

  • android_test.py
import torch.utils.data.distributed

# 定义转化后的模型名称
model_ori_pt = 'model_ori.pt'

'加载pytorch模型'
model_ori = torch.load('androidTest.pth')
# 打印模型类型
print(type(model_ori))
# 将模型移动到 CPU 上
device = torch.device('cpu')
model_ori = model_ori.to(device)

# 设置模型为评估模式
model_ori.eval()

# 定义输入信号的大小
input_tensor = torch.rand(1, 1, 2048)

# 转化模型并存储
mobile_ori = torch.jit.trace(model_ori, input_tensor)
mobile_ori.save(model_ori_pt)
  • androidTest.pth 
torch.save(net, f"./results/androidTest.pth")            # 保存整个模型的结构信息
  • models.py为网络模型的源码 

AndroidStudio相关

在gradle中添加依赖

implementation 'org.pytorch:pytorch_android:1.12.1'
implementation 'org.pytorch:pytorch_android_torchvision:1.12.1'

将生成的model_ori.pt拷贝到安卓目录

在MainActivity中编写代码

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        Module module_ori = null;
        try {
            module_ori = Module.load(assetFilePath(this, "model_ori.pt"));
        } catch (IOException e) {
            e.printStackTrace();
        }
        //生成随机信号数组
        float[] signal = new float[2048];
        Random random = new Random();
        for (int i = 0; i < 2048; i++) {
            signal[i] = random.nextFloat(); // 在[0, 1)范围内生成随机浮点数
        }

    // 将一维信号转换为张量
        Tensor inputTensor = Tensor.fromBlob(signal, new long[]{1, 1,signal.length});

        Tensor outputTensor = module_ori.forward(IValue.from(inputTensor)).toTensor();

        final float[] scores = outputTensor.getDataAsFloatArray();
        System.out.println("------------------------------------");
        System.out.println(Arrays.toString(scores));
    }
    public static String assetFilePath(Context context, String assetName) throws IOException {
        File file = new File(context.getFilesDir(), assetName);
        if (file.exists() && file.length() > 0) {
            return file.getAbsolutePath();
        }

        try (InputStream is = context.getAssets().open(assetName)) {
            try (OutputStream os = new FileOutputStream(file)) {
                byte[] buffer = new byte[4 * 1024];
                int read;
                while ((read = is.read(buffer)) != -1) {
                    os.write(buffer, 0, read);
                }
                os.flush();
            } catch (IOException e) {
                e.printStackTrace();
            }
            return file.getAbsolutePath();
        }
    }

}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/509205.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

SwiftUI Swift 显示隐藏系统顶部状态栏

Show me the code // // TestHideSystemTopBar.swift // pandabill // // Created by 朱洪苇 on 2024/4/1. //import SwiftUIstruct TestHideSystemTopBar: View {State private var isStatusBarHidden falsevar body: some View {Button {withAnimation {self.isStatusBa…

数字化生活的引擎:探索Facebook如何影响我们的日常生活

在当今数字化时代&#xff0c;社交媒体平台已经成为人们日常生活中不可或缺的一部分&#xff0c;而Facebook作为最具影响力和用户数量的社交网络之一&#xff0c;深刻地改变了我们的生活方式和社交行为。本文将深入探讨Facebook如何影响我们的日常生活&#xff0c;以及它在数字…

火鸟门户拖拽专题可视拖拽面板快速创建网站,无需懂代码,形式灵活,功能强大

可视化拖拉面板简介 可视化拖拽面板是一种消耗代码即可创建网站的工具。它提供了一个分析的界面&#xff0c;用户可以通过拖拽预先设计的组件来构建页面。这种方式可以大大降低网站开发的效率&#xff0c;让不懂代码的人也能轻松创建自己的网站。 可视化拖拉面板的优势 可视…

算法打卡day23

今日任务&#xff1a; 1&#xff09;39. 组合总和 2&#xff09;40.组合总和II 3&#xff09;131.分割回文串 39. 组合总和 题目链接&#xff1a;39. 组合总和 - 力扣&#xff08;LeetCode&#xff09; 给定一个无重复元素的数组 candidates 和一个目标数 target &#xff0c;…

【WEEK6】 【DAY1】DQL查询数据-第一部分【中文版】

2024.4.1 Monday 目录 4.DQL查询数据&#xff08;重点&#xff01;&#xff09;4.1.Data Query Language查询数据语言4.2.SELECT4.2.1.语法4.2.2.实践4.2.2.1.查询字段 SELECT 字段/* FROM 表查询全部的某某查询指定字段 4.2.2.2.给查询结果或者查询的这个表起别名&#xff08…

Linux基础命令篇:Linux文件权限与访问控制基础

Linux文件权限与访问控制基础 下面将详细介绍Linux文件权限管理&#xff0c;帮助有需要的ikun理解和应用这些概念。从基本的权限概念开始&#xff0c;然后介绍如何查看和修改权限。最后&#xff0c;我们整点高级的东西&#xff0c;如访问控制列表&#xff08;ACL&#xff09;。…

【THM】Active Reconnaissance(主动侦察)-初级渗透测试

介绍 在网络安全模块的第一个房间里,我们主要进行被动侦察。在第二个房间中,我们重点关注主动侦察以及与之相关的基本工具。我们学习使用网络浏览器来收集有关我们目标的更多信息。此外,我们讨论使用简单的工具(例如ping、traceroute、telnet和 )nc来收集有关网络、系统和…

OpenCV 4.9使用通用内部函数对代码进行矢量化

返回&#xff1a;OpenCV系列文章目录&#xff08;持续更新中......&#xff09; 上一篇&#xff1a;OpenCV使用通用内部函数对代码进行矢量化 下一篇&#xff1a;OpenCV系列文章目录&#xff08;持续更新中......&#xff09; ​ 目标 本教程的目标是提供使用通用内部函数功…

HarmonyOS 应用开发之LifecycleService接口切换LifecycleData接口切换

LifecycleService接口切换 FA模型接口Stage模型接口对应d.ts文件Stage模型对应接口onStart?(): void;ohos.app.ability.ServiceExtensionAbility.d.tsonCreate(want: Want): void;onCommand?(want: Want, startId: number): void;ohos.app.ability.ServiceExtensionAbility.…

ZooKeeper 的持久化机制

持久化的定义&#xff1a; 数据&#xff0c;存到磁盘或者文件当中。机器重启后&#xff0c;数据不会丢失。内存 -> 磁盘的映射&#xff0c;和序列化有些像。 ZooKeeper 的持久化&#xff1a; SnapShot 快照&#xff0c;记录内存中的全量数据TxnLog 增量事务日志&#xff…

C++类设计:一个不同版本的日志类(完整源码)

初级代码游戏的专栏介绍与文章目录-CSDN博客 我的github&#xff1a;codetoys&#xff0c;所有代码都将会位于ctfc库中。已经放入库中我会指出在库中的位置。 这些代码大部分以Linux为目标但部分代码是纯C的&#xff0c;可以在任何平台上使用。 如何设计日志类请看&#xff1…

独角数卡安装前后常见问题汇总

PHP终端环境对应不上 服务器终端下执行以下命令将宝塔php版本设置为系统php-cli版本 ln -sf /www/server/php/73/bin/php /usr/bin/phpBash Copy Bash Copy 根据自己宝塔安装的php版本执行&#xff0c;不要照抄&#xff0c;这里是/php/73&#xff0c;你如果是php7.2的话就…

Vue-05

v-model 应用于其他表单元素 常见的表单元素都可以用v-model绑定关联 → 快速获取或设置表单元素的值 它会根据控件类型自动选取正确的方法来更新元素 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name…

苏州金龙助力旅游客运加速蜕变

近日&#xff0c;北京铭悦旅游客运有限公司又迎来一批苏州金龙海格纯电动客车。&#xff08;以下简称北京铭悦旅游&#xff09;总经理郭保生在车辆交付时说到&#xff0c;“为迎接强劲复苏的旅游市场&#xff0c;要求旅游客运向绿色客运转型&#xff0c;以及人民对品质生活、美…

c# 插值搜索-迭代与递归(Interpolation Search)

给定一个由 n 个均匀分布值 arr[] 组成的排序数组&#xff0c;编写一个函数来搜索数组中的特定元素 x。 线性搜索需要 O(n) 时间找到元素&#xff0c;跳转搜索需要 O(? n) 时间&#xff0c;二分搜索需要 O(log n) 时间。 插值搜索是对实例二分搜索的改进&#xff0c;…

测试Windows域控制器服务是否运行

测试Windows域控制器服务是否正常运行&#xff0c;可以通过以下几种方法&#xff1a; 检查服务状态&#xff1a; 打开“服务器管理器”&#xff08;Server Manager&#xff09;。在左侧导航栏中选择“工具”&#xff08;Tools&#xff09;&#xff0c;然后打开“服务”&#xf…

基于springboot实现在线文档管理系统项目【项目源码+论文说明】计算机毕业设计

基于springboot实现在线文档管理系统演示 摘要 随着科学技术的飞速发展&#xff0c;社会的方方面面、各行各业都在努力与现代的先进技术接轨&#xff0c;通过科技手段来提高自身的优势&#xff0c;在线文档管理当然也不能排除在外。在线文档管理系统是以实际运用为开发背景&am…

语义分割——自动驾驶鱼眼数据集

一、重要性及意义 环境感知&#xff1a;语义分割技术能够精确识别道路、车辆、行人、障碍物、交通标志和信号等各种交通场景元素。这为自动驾驶系统提供了丰富的环境信息&#xff0c;有助于车辆准确理解周围环境的结构和动态变化。决策规划&#xff1a;基于语义分割的结果&…

研发设计人员能力级别定义

研发设计人员能力&级别定义 1. 源由2. 级别定义3. 级别能力3.1 助理工程师3.1.1 工作内容3.1.2 级别晋升3.1.3 详细描述 3.2 初级工程师3.2.1 工作内容3.2.2 级别晋升3.2.3 详细描述 3.3 高级工程师3.3.1 工作内容3.3.2 级别晋升3.3.3 详细描述 3.4 资深工程师3.4.1 工作内…

谈谈MVCC机制

在MySQL中&#xff0c;MVCC&#xff08;多版本并发控制&#xff09;是InnoDB存储引擎使用的并发控制机制。它提供对数据的并发访问&#xff0c;并确保多用户环境中数据的一致性和隔离性。 InnoDB通过“Undo log”存储每条记录的多个版本&#xff0c;提供历史记录供读取&#x…