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

53 篇文章 22 订阅 ¥59.90 ¥99.00
本文介绍了如何从零开始搭建一个基于Web的远程深度学习服务,使用Python的web.py框架,实现通过网页进行深度学习模型的推理。文章提供了效果演示,项目结构详解,以及服务搭建步骤,适合初学者实践。
摘要由CSDN通过智能技术生成

欢迎关注“

计算机视觉研究院

计算机视觉研究院专栏

作者:Edison_G

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

关注:DL工程实践

人脸跟踪小风扇

树莓派手势识别

轻量级网络评测

注意力网络评测

......

1、背景介绍

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

2、效果演示

电脑端效果演示:

手机效果演示:

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


加入“DL工程实践”官方群聊:885194271,和更多志同道合的朋友一起探讨DL的工程实践问题,或许你遇到的坑,别人早已踩过。

我们开创“计算机视觉协会”知识星球一年有余,也得到很多同学的认可,我们定时会推送实践型内容与大家分享,在星球里的同学可以随时提问,随时提需求,我们都会及时给予回复及给出对应的答复。

如果想加入我们“计算机视觉研究院”,请扫二维码加入我们。我们会按照你的需求将你拉入对应的学习群!

计算机视觉研究院主要涉及深度学习领域,主要致力于人脸检测、人脸识别,多目标检测、目标跟踪、图像分割等研究方向。研究院接下来会不断分享最新的论文算法新框架,我们这次改革不同点就是,我们要着重”研究“。之后我们会针对相应领域分享实践过程,让大家真正体会摆脱理论的真实场景,培养爱动手编程爱动脑思考的习惯!

计算机视觉研究院

长按扫描二维码关注我们

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值