pyTorch框架部署实践

相关代码链接见文末

1.所需基本环境配置

      首先,我们需要一个预先训练好的模型以及相应的配置。接下来,为了实际应用这个模型,我们必须搭建一个功能强大的服务器。这台服务器的核心任务是加载我们的模型,并能够接收用户上传的图片。一旦图片被接收,服务器将使用加载的模型进行预测,并迅速将预测结果返回给用户。这样,整个预测流程就能在服务器上高效、准确地完成。

2.模型加载与数据预处理

        在run_pytorch_server.py中定义了模型加载和数据集预处理模块,流程如下:

(1)首先,初始化Flask app

app = flask.Flask(__name__)
model = None
use_gpu = False

(2)加载标签信息,标签信息为字典信息,将预测结果对应到实际的类别

# 加载标签信息
with open('imagenet_class.txt', 'r') as f:idx2label = eval(f.read())

 (3)加载模型,这里加载的resnet50模型

# 加载模型进来
def load_model():"""Load the pre-trained model, you can use your model just as easily."""global modelmodel = resnet50(pretrained=True)model.eval()if use_gpu:model.cuda()

(4)数据预处理模块

数据预处理包括对图像进行resize,转化为tensor,对图像进行标准化。

# 数据预处理
def prepare_image(image, target_size):"""Do image preprocessing before prediction on any data.:param image:       original image:param target_size: target image size:return:preprocessed image"""# pytorch输入的是RGB格式if image.mode != 'RGB':image = image.convert("RGB")# 将图像resize特定大小并转化为tensor格式# Resize the input image nad preprocess it.image = T.Resize(target_size)(image)image = T.ToTensor()(image)# 标准化# Convert to Torch.Tensor and normalize. mean与stdimage = T.Normalize([0.485, 0.456, 0.406], [0.229, 0.224, 0.225])(image)# Add batch_size axis.image = image[None]if use_gpu:image = image.cuda()return Variable(image, volatile=True) #不需要求导

 (5)开启服务

        然后是开启服务,实现数据输入、数据预处理、模型预测、返回整个标签的整个流程。

# 开启服务
@app.route("/predict", methods=["POST"])
def predict():# Initialize the data dictionary that will be returned from the view.data = {"success": False}# Ensure an image was properly uploaded to our endpoint.if flask.request.method == 'POST':if flask.request.files.get("image"):# Read the image in PIL formatimage = flask.request.files["image"].read()image = Image.open(io.BytesIO(image)) # 读取数据,二进制数据# Preprocess the image and prepare it for classification. 数据预处理image = prepare_image(image, target_size=(224, 224))# Classify the input image and then initialize the list of predictions to return to the client.preds = F.softmax(model(image), dim=1) # 预测概率results = torch.topk(preds.cpu().data, k=3, dim=1) # 返回概率最高的前k个results = (results[0].cpu().numpy(), results[1].cpu().numpy())data['predictions'] = list()# 返回最终的标签# Loop over the results and add them to the list of returned predictionsfor prob, label in zip(results[0][0], results[1][0]):label_name = idx2label[label]r = {"label": label_name, "probability": float(prob)}data['predictions'].append(r)# Indicate that the request was a success.data["success"] = True# Return the data dictionary as a JSON response.return flask.jsonify(data)

 3.预测效果展示

        首先,使用命令行,启动服务

simple_request.py定义了post请求及返回结果,执行simple_request.py时,需要指定文件路径。

返回结果

 访问记录

链接:https://pan.baidu.com/s/12nhoFcZWLD1_ticGprawUg?pwd=iujk 
提取码:iujk 

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

线程池嵌套导致的死锁问题

1、背景 有一个报告功能,报告需要生成1个word,6个excel附件,总共7个文件,需要记录报告生成进度,进度字段jd初始化是0,每个文件生成成功进度加1,生成失败就把生成状态置为失败。 更新进度语句&…

基于深度学习网络的十二生肖图像分类matlab仿真

目录 1.算法运行效果图预览 2.算法运行软件版本 3.部分核心程序 4.算法理论概述 5.算法完整程序工程 1.算法运行效果图预览 2.算法运行软件版本 matlab2022a 3.部分核心程序 ............................................................... for i 1:16subplot(4,4,…

HubSpot功能有哪些?

HubSpot是一个功能丰富的平台,主要涵盖市场营销、销售、客户服务和客户关系管理(CRM)等领域。以下是HubSpot的一些主要功能: 市场营销自动化:HubSpot允许用户制定和执行多渠道的市场营销活动,包括创建和管…

为什么光电测径仪质量更稳定可靠?

光电测径仪与激光扫描式测径仪都是目前常用的外径自动化测量设备,他们能实现的功能相同,但为什么说光电测径仪更稳定可靠,下面一起来看一下。 光电测径仪测量原理 测头部件是测径仪的核心部件,它的作用是将被测物在CCD芯片上清晰…

redisson分布式锁的单机版应用

package com.redis;/*** author linn* date 2024年04月23日 15:31*/ import org.redisson.Redisson; import org.redisson.api.RedissonClient; import org.redisson.config.Config; import org.springframework.context.annotation.Bean; import org.springframework.context.…

怎样压缩jpg文件体积?分享一个极速压缩的方法

在工作中我们经常会遇到图片体积过大需要压缩处理。想要快速压缩jpg格式体积还不想下载软件要怎么操作呢?下面,给大家分享一款小白也能轻松使用的Jpg压缩(https://www.yasuotu.com/)工具-压缩图。支持上传单张100M以内&#xff0c…

常见大厂面试题(SQL)01

知乎问答最大连续回答问题天数大于等于3天的用户及其对应等级 1.描述 现有某乎问答创作者信息表author_tb如下(其中author_id表示创作者编号、author_level表示创作者级别,共1-6六个级别、sex表示创作者性别): author_id author_level sex 101 …

命令行vue-cli-service不是内部或外部命令

没有安装vue/cli-service导致的 npm install -g vue/cli-service

背靠TON公链的Notcoin游戏项目,能否杀出GameFi的红海?

4月15日消息,Telegram生态中的游戏及Meme项目Notcoin,最近在X平台公布了令市场瞩目的代币经济学方案。据悉,NOT的总供应量高达1027亿枚,其中78%将分配给矿工和Voucher持有者,余下的22%预留给未来新用户、交易者及各类上…

MAC用户福利:一站式电商客服工具下载地址大全揭秘!

列举和比较拼多多商家版,阿里卖家MAC版本,京麦工作台,聊天宝MAC版,千牛MAC版,抖店MAC版各种适用于MAC系统的电商客服工具,提供平台MAC版本的下载地址,帮助用户提高客服效率、改善客户体验,从而提…

ROS通信模式/动作编程(设置收发节点,使小海龟移动到指定位置)

声明:本文转载,自己进行微微改动方便自己观看,有需要可以看原作者点击这里跳转 一、话题、服务模式编程 1.1 创建工作空间 输入以下三条命令: mkdir -p ~/comm_ws/src cd ~/comm_ws/src catkin_init_workspace编译工作空间&…

了解MySQL InnoDB多版本MVCC(Multi-Version Concurrency Control)

了解MySQL InnoDB多版本MVCC(Multi-Version Concurrency Control) 在数据库管理系统中,多版本并发控制(MVCC)是一种用于实现高并发和事务隔离的技术。MySQL的InnoDB存储引擎支持MVCC,这使得它可以在提供高…