帮助文档
专业提供香港服务器、香港云服务器、香港高防服务器租用、香港云主机、台湾服务器、美国服务器、美国云服务器vps租用、韩国高防服务器租用、新加坡服务器、日本服务器租用 一站式全球网络解决方案提供商!专业运营维护IDC数据中心,提供高质量的服务器托管,服务器机房租用,服务器机柜租用,IDC机房机柜租用等服务,稳定、安全、高性能的云端计算服务,实时满足您的多样性业务需求。 香港大带宽稳定可靠,高级工程师提供基于服务器硬件、操作系统、网络、应用环境、安全的免费技术支持。
服务器资讯 / 香港服务器租用 / 香港VPS租用 / 香港云服务器 / 美国服务器租用 / 台湾服务器租用 / 日本服务器租用 / 官方公告 / 帮助文档
深度学习模型部署——Flask框架轻量级部署+阿里云服务器
发布时间:2024-03-08 12:23:10   分类:帮助文档
深度学习模型部署——Flask框架轻量级部署+阿里云服务器

项目场景:
​因为参加一个比赛,需要把训练好的深度学习模型部署到web端,第一次做,在网上也搜索了很多教程,基本上没有适合自己的,只有一个b站up主讲的还不错https://www.bilibili.com/video/BV1Qv41117SR/?spm_id_from=333.999.0.0&vd_source=6ca6a313467efae52a28428a64104c10https://www.bilibili.com/video/BV1Qv41117SR/?spm_id_from=333.999.0.0&vd_source=6ca6a313467efae52a28428a64104c10在前端的一部分html语言借鉴了这个up主,有兴趣的可以去看看。在部署的时候遇到了很多坑,就想记录一下,仅代表个人看法
项目场景:角膜疾病图片识别算法(pytorch环境),用Flask轻量级框架部署到web端并部署到阿里云服务器进行测试。

流程:
1.写预测函数

1.1将训练好的模型参数加载到模型中去


checkpoint_path = "/model_best.pth.tar" #训练好的模型参数(要注意保存模型的时候是保存了模型还是模型参数,这里是模型参数)
model = res50Encoder(attention_map_num, class_num) #加载模型
model.load_state_dict(torch.load(checkpoint_path,map_location='cpu')['state_dict'])#(将参数加载到模型中去)
model.eval() #pytorch框架会自动把BN和Dropout固定住,直接用训练好的值

1.2 数据预处理模块

data_transform = transforms.Compose([
transforms.Resize((n, m)),
transforms.CenterCrop(num),
transforms.ToTensor(),
transforms.Normalize(a,b),
]) #根据自己的模型,写出数据预处理模块,n,m,num,a,b按照自己的模型填写




1.3 加载数据(我是图片的二进制格式)


img = Image.open(io.BytesIO(image_bytes)) #将图片的二进制文件转化

img = data_transform(img) #数据变换

img = img.float().unsqueeze(0) #数据调整维度


 1.4 数据标签,根据自己的模型数据集的标签定义


class_labels=['','',''] #自己往''填label


1.5 开始预测


with torch.no_grad():
attention_maps, _, output1, coarse_logits= model(img.cpu())
refined_input = mask2bbox(attention_maps, img.cpu())
_, _, output2, _= model(refined_input)
output = (output1 + output2) / 2
output = torch.softmax(output, dim=-1)

#根据output输出标签值
_, pred = torch.max(output, 1)
pred_label = class_labels[pred.item()]

2. 利用Flask框架部署

直接看代码吧,这是app.py 


#app.py


from flask import Flask, jsonify, request
from yuce import pred
from flask_cors import CORS
import flask
app = Flask(__name__)

CORS(app) #跨域问题

@app.route('/predict', methods=['POST'])
def predict():
if request.method == 'POST':
file = request.files['file']
print(file)
img_bytes = file.read()
class_name = pred(img_bytes) #预测函数pred()(第一个步骤写的)
if(class_name ):
print("结果:"+class_name)
else:
print("error")
return jsonify({ 'class_name': class_name})
return jsonify({"your call is GET"}) #将化成标签json格式

@app.route("/",methods = ['POST','GET'])
def root():
return flask.render_template("upload.html") #前端交互界面

if __name__ == '__main__':
app.run(host="0.0.0.0",port=80,debug=True)

3.写前端交互界面upload.html(借鉴b站up主,前面有提到) 
可自行去up主的GitHub下载https://github.com/WZMIAOMIAO/deep-learning-for-image-processing/tree/master/deploying_service/deploying_pytorchhttps://github.com/WZMIAOMIAO/deep-learning-for-image-processing/tree/master/deploying_service/deploying_pytorch
4.在本地成功跑起来后,可以得到这样一个界面 

 然后就可以自行上传图片进行预测
5.阿里云服务器部署

5.1首先要准备一个阿里云服务器,新人有一个月的优惠,但是只能租用cpu,所以如果你的模型是gpu请自行购买gpu服务器,当然你也可以改变你的模型,用cpu跑(因为穷,所以我就把模型改成cpu跑,从第一步的代码可以看出,当然要小心输入要一致,也要用.cpu)。然后我选择的是ubuntu系统


5.2准备好xshell7和xftp7两个软件,xshelll7是可以登录你的ssh,然后用来跑代码。xftp7是上传文件,可以从本地把文件传到服务器上去。

xshell7登录:



 将自己的ssh填上去,然后用户身份验证进行登录。
 xftp7登录:和上图差不多



 然后就可以在服务器上跑代码,但是要注意安装相对应的库,需要小心代码中的路径问题,当服务器上面成功跑起来,就可以用公网IP访。(再将公网IP部署到你的域名,就可以访问网址,注意备案!!,不然会被封号)


问题描述+解决问题
部署过程中遇到很多困难

1.注意安装jQuery库,可以去up主的github上直接下载,注意安装到static库下面



2.注意你买的服务器类型,如果是cpu要修改输入!!!

#(将参数加载到模型中去)
model.load_state_dict(torch.load(checkpoint_path,map_location='cpu')['state_dict'])


#注意img.cpu()
attention_maps, _, output1, coarse_logits= model(img.cpu())
refined_input = mask2bbox(attention_maps, img.cpu())

 3.部署到服务器上去可能会遇到无法响应的情况,可能是端口没有开启,可以去阿里云的网络安全组开启端口,我的端口是80,可以在下图中自己手动修改!!开启后,打开要用公网ip!!!

 

 如果还是无法访问可以自行查看阿里云的帮助ECS实例的安全组规则未生效_云服务器 ECS-阿里云帮助中心

 小结:

第一次自己部署深度模型,经验不足,仅供参考。



香港云服务器租用推荐
服务器租用资讯
·广东云服务有限公司怎么样
·广东云服务器怎么样
·广东锐讯网络有限公司怎么样
·广东佛山的蜗牛怎么那么大
·广东单位电话主机号怎么填写
·管家婆 花生壳怎么用
·官网域名过期要怎么办
·官网邮箱一般怎么命名
·官网网站被篡改怎么办
服务器租用推荐
·美国服务器租用
·台湾服务器租用
·香港云服务器租用
·香港裸金属服务器
·香港高防服务器租用
·香港服务器租用特价