[零基础,全开源]基于web的远程深度学习服务搭建

所有代码和工具均已开源。关注“DL工程实践”,后台回复“web”,自动获取。

 

1、背景介绍

目前有很多的深度学习推理方案,不过大多是离线部署的。这方面可以利用的开源资源有很多,例如ncnn,mnn,tensorflow lite等。虽然终端离线部署模型具有很大的优势,高效,快速,低延时,能够带来很好的体验,但是也存在一些缺点,例如模型不能太大,且对于不同的硬件平台需要重新部署,开发周期比较长。所以在那些延时没有那么苛刻的场景,使用基于web的深度学习推理服务是非常方便的。一方面与终端硬件无关,使用成熟的http协议进行交互,那么在世界的任何一个角落,只要拿出手机或者电脑,通过网页就能做很多有趣的深度学习检测,这个部署成本比离线的推理要低太多了。另一方面,利用远程深度学习服务器的高性能,还能部署一些大型的网络,提升深度学习的性能。本期我们就来实践一个基于web的深度学习服务,实现远程的深度学习调用,并将结果展现在浏览器上面。为了实现web服务,需要选择一款web框架,基于python的web框架非常多,这里选择一个非常小巧又经典的web框架:web.py。

 

2、效果演示

电脑端效果演示:

URL链接:https://video.zhihu.com/video/1337520524713914369?

手机效果演示:

URL链接:https://video.zhihu.com/video/1337520739416141824?

 

3、项目结构

如下图所示为项目的代码结构。由于需要通过web交互,所以需要一点点前端知识。整个工程可以划分为三个部分。第一个部分是models推理模块,主要放一些推理的模型。前端模块,包含static与templates为界面展示相关的代码。templates里面包含了两个html的结构文档,用来定义浏览器的显示界面。static里面的css和img用来修饰界面。服务模块:server.py。里面是web服务的一个业务逻辑。

网络推理模块:

由于习惯了使用pytorch,我这里放了一个基于pytorch训练好的shufflenetv2 1.0x的imagenet1000的预训练模型,从torchvision里面可以直接下载。网络模型文件也是直接使用的torchvision.models里面的模型文件。Infer.py:里面定义了一个PreModel类,用来加载深度学习模型,进行相关的推理。另外为了展示类别的结果,放了一个class_map.py,把imagenet数据集的数字标签与类别名称做了一个对应,方便在浏览器界面上展示。

前端模块:

首先需要对浏览器上的展示界面做一个大致的规划,如下图所示,我规划了三个部分:标题部分,结果显示部分,按钮部分。首先看按钮部分,第一个按钮用于选择图片,点击之后可以从本地选择一张图片。检测按钮点击之后,可以将刚才选择的图片上传到服务器,服务器进行深度学习检测,然后将结果返回当当前页面。返回的结果显示在“结果展示”区。这里我定义了一个分类的展示模式,上半部分是检测的图片,下半部分是检测出的top3的类别。

下面来看一下界面的html文件,其实也非常简单,就是按照刚才的三个模块进行了划分。分别使用三个<div>来表示。

服务模块:

服务模块其实就一个源文件:server.py,定义了web交互的逻辑。其实代码含义非常清晰。当用户选择好图片,并点击了“检测”按钮之后,图片会被浏览器使用POST方法传送到后端,所以会进入到server.py的POST方法里面。第一行的x=web.input(image_file={})表示的就是将浏览器传过来的图片放在变量x中。然后进入到第一部分的代码,“保存用户上传的图片”,因为此时的图片内容在x变量中,是在内存里的,所以先将内存里的图片x保存到本地服务器上面。这里将其保存到static目录下面。首先做一个字符串转换,因为windows服务器传过来的图片,名称中很有可能包含'\'字符,需要转换成'/'字符,然后获取文件名,因为传过来的是一个文件路径。然后在static目录下面新建一个同名的文件,将x里面的图片内容保存到新的同名文件中。接下来进入到第二个流程:调用models的推理模块进行推理。这个就不详细展开,搞过深度学习的人应该很清楚其流程。最后一个流程是根据推理的结果进行一些展示,这里使用matplotlib进行原始图片和预测类型的柱状图展示,为了美观,改成了横向的柱状图。

4、服务搭建

为了能够随时随地的访问我们的深度学习服务,那么需要一台具有公网IP地址的服务器,但是很可惜,我们现在申请的宽带一般都不会分配公网IP,一个可行的办法是使用云服务器,这种服务器都会给你公网IP。例如腾讯云,阿里云等。还有其他方法就是使用NAT打洞或者使用一些第三方的DDNS服务。这里不在展开,有兴趣的朋友可以自行查阅。我这里为了方便,就在局域网里面搭建深度学习服务,然后只要连接在这个局域网里面的客户端,都能够通过浏览器访问并上传图片进行检测。该工程需要依赖web.py, torch,torchvison, matplotlib等,所以可以使用pip或者conda等命令安装好依赖包。至于是windows还是linux,这个没有关系。安装好依赖之后,进入到工程根目录下面:cd  web-dl;启动服务:python server.py。之后会加载模型,打印模型加载进度,完毕之后屏幕打印:http://0.0.0.0:8080/ 表示我们的web服务已经正常启动,并在8080端口进行监听。此时通过任意一台局域网中的电脑或者手机,打开浏览器,输入:http://ip:8080就可以了。

关注“DL工程实践”,后台回复“web”,自动获取源码地址。

@end

 

 

 

 

 

 

  • 3
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
搭建基于深度学习的图像识别系统,可以按照以下步骤进行: 1. 数据收集和准备:收集具有代表性的图像数据集,并对数据进行预处理,包括图像缩放、裁剪、标准化等操作。 2. 构建深度学习模型:选择适合图像识别任务的深度学习模型,如卷积神经网络(CNN)等。可以使用开源深度学习框架,如TensorFlow、PyTorch等。 3. 数据划分:将数据集划分为训练集、验证集和测试集。训练集用于模型的训练,验证集用于调整模型的超参数,测试集用于评估模型的性能。 4. 模型训练:使用训练集对深度学习模型进行训练。通过反向传播算法和优化器,调整模型的权重和偏置,使模型能够逐渐减小训练误差。 5. 模型验证和调优:使用验证集评估模型的性能,并根据验证结果调整模型的超参数,如学习率、批大小、网络结构等,以提高模型的泛化能力。 6. 模型评估:使用测试集评估模型的性能,可以使用准确率、精确率、召回率、F1分数等指标来衡量模型的表现。 7. 模型部署:将训练好的深度学习模型部署到生产环境中,可以使用Web应用、移动应用或API等方式提供图像识别服务。 8. 持续改进:对模型进行监控和更新,根据实际应用中的反馈数据,不断改进模型的性能和准确度。 需要注意的是,搭建一个高性能的图像识别系统需要考虑许多因素,包括数据质量、模型选择、超参数调优、计算资源等。此外,对于特定的图像识别任务,还可以考虑使用预训练的深度学习模型进行迁移学习,以提高模型的效果和训练效率。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值