pyTorch框架部署实践

news2025/1/15 12:57:53

相关代码链接见文末

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 model
    model = 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与std
    image = 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 format
            image = 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 predictions
            for 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.coloradmin.cn/o/1618087.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

关于Domain的查询命令

dig: 用来执行DNS查询,可以获取指定域名的所有类型的DNS记录。对网络管理员和开发人员尤其有用。 host: 一个简化版的DNS查询工具,适合快速查询域名的IP地址或某种类型的DNS记录。 nslookup: 另一个DNS查询工具,既支持交互模式也支持命令行模…

OFDM-OCDM雷达通信一体化信号模糊函数对比研究【附MATLAB代码】

文章来源:微信公众号:EW Frontier 1.引言 为提高频谱利用率并实现系统小型化、集成化,近年来雷达通信一体化系统成为重要研究方向。正交线性调频波分复用(OCDM)信号是利用菲涅尔变换形成的一组正交线性啁啾(chirp)信号,基于OCDM 的雷达通信一体化信号不…

架构师核心-云计算云上实战(云计算基础、云服务器ECS、云设施实战、云上高并发Web架构)

文章目录 云计算基础1. 概念1. 云平台优势2. 公有云3. 私有云4. IaaS、PaaS、SaaS 2. 云设施1. 概览2. 核心组件 云服务器ECS1. ECS介绍1. 简介2. 组件3. 概念4. 图解5. 规格6. 场景 2. ECS服务器开通1. 开通服务器2. 连接服务器 3. 云部署准备1. 1Panel介绍2. 安装1Panel3.安全…

<开源> 轮廓内缩外扩算法

轮廓内缩外扩算法 项目是论文A new offset algorithm for closed 2D lines with Islands的JAVA实现。 项目的GitHub地址:https://github.com/Lee-0o0/polygon-offset-algorithm。 参考博客 https://blog.csdn.net/qq_41261251/article/details/114462696

多目标应用:基于非支配排序粒子群优化算法NSPSO求解无人机三维路径规划(MATLAB代码)

一、无人机多目标优化模型 无人机三维路径规划是无人机在执行任务过程中的非常关键的环节,无人机三维路径规划的主要目的是在满足任务需求和自主飞行约束的基础上,计算出发点和目标点之间的最佳航路。 1.1路径成本 无人机三维路径规划的首要目标是寻找…

Java 【数据结构】 二叉树(Binary_Tree)【神装】

登神长阶 第五神装 二叉树 Binary-Tree 目录 🎷一.树形结构 🪗1.概念 🎸2.具体应用 🎹 二.二叉树(Binary Tree) 🎺1.概念 🎻2.表现形式 🪕3.特殊类型 &#x1f941…

Windows下使用SDKMAN对JDK(Java)进行多版本管理

Windows下使用SDKMAN对JDK(Java)进行多版本管理 1.背景2.基于msys2工具2.1. msys2简介2.2. 安装与配置2.2. Windows环境变量配置参考2.3 结果确认 3. 基于WSL 1.背景 前端有nvm,python有miniconda,miniforge等,java呢?java在Linu…

PCB走线宽度、PCB走线宽度计算、PCB走线宽度和电流

目录 一、什么是PCB走线宽度? 二、什么是走线? 三、哪些因素对走线宽度至关重要? 1、信号走线 2、电源走线 3、直线宽度和信号反射 四、怎么计算PCB走线宽度? 1、使用PCB走线宽度计算器 2、使用方程式 五、怎么计算PCB 走…

【学习笔记二十四】EWM补货策略和自动补货配置

一、EWM补货策略概述 1.计划补货 ①以联机或批处理模式启动 ②根据最大和最小数量计算补货 ③仅当库存量低于最低数量时才开始 ④四舍五入至最小补货数量的倍数 2.自动补货 ①在WT确认期间启动 ②根据最大和最小数量计算补货 ③只有当库存量低于最低数量时才开始 ④四舍…

开源博客项目Blog .NET Core源码学习(17:App.Hosting项目结构分析-5)

本文学习并分析App.Hosting项目中前台页面的作品展示页面和首页页面。 作品展示页面 作品展示页面总体上为上下布局,上方显示导航菜单,下方从左向右显示图片数据,支持放大查看图片和下载图片。整个页面使用了layui中的面包屑导航、弹出层、流…

6.3 实现Session 共享

1. Session 共享配置 2. Nginx 负载均衡 3. 测试请求分发 经过如上步骤 ,就完成了利用 Redis 实现 Session 共享的功能. 基本上不需要额外配置,开箱即用

基于 Grassmannian Manifold的动态图嵌入学习的脑网络时空枢纽识别

Spatiotemporal Hub Identification in Brain Network by Learning Dynamic Graph Embedding on Grassmannian Manifold 摘要 神经成像技术的进步使得测量不同大脑区域之间的连接随时间演变成为可能。新出现的证据表明,一些关键的大脑区域,称为枢纽节点…

Docusaurus 3.2 发布,更快的 MDX 开发体验

Docusaurus 是一个静态站点生成器。它构建了一个具有快速客户端导航的单页面应用程序,利用 React 的全部功能使你的网站具有交互性。它提供开箱即用的文档功能,但可用于创建任何类型的网站(个人网站、产品、博客、营销登陆页面等)…

产品规划|如何从0到1规划设计一款产品?

我们要如何从0到1规划设计一款产品?在前期工作我们需要做什么呢?下面这篇文章就是关于此的相关内容,大家一起往下看多多了解了解吧! 一、什么是产品规划? 产品规划是一种策略,它设定了产品的价值和目标,并确定实施方案以实现这些目标。它考虑了产品的整个生命周期,基于…

我有一种不完美的完美主义,必须要有缺点,没有缺点就是不完美的

《程客有话说》是我们最新推出的一个访谈栏目,邀请了一些国内外有趣的程序员来分享他们的经验、观点与成长故事,我们尝试建立一个程序员交流与学习的平台,也欢迎大家推荐朋友或自己来参加我们的节目,一起加油。 本期我们邀请的程…

Textual Inversion:使用文本反转个性化文本到图像的生成

系列文章目录 DreamBooth:个性化的文本到图像扩散模型 文章目录 系列文章目录一、研究动机二、模型方法1、潜在扩散模型2、文本嵌入3、文本反演 三、Textual Inversion与dreambooth的对比四、Textual Inversion效果1、图像变化2、文本引导合成3、风格迁移 Textual …

全网最全的平行坐标图(parallel coordinates plot)的绘制攻略

早上起来拥抱太阳,写小论文,看到人家的图怎么那么好看!!?? 这不得赶紧抄下来,我也发一个顶刊?于是开始思考如何解决绘制这个问题,目前现有的大部分解决方案都是直接调库…

Unity3d的海盗王地图

一直以来,都想将海盗王的地图搬到手游unity3d上面。 经过漫长时间的研究,终于实现了当初的想法。

Webfunny埋点系统如何统计留存率

Hello,大家好,有小伙伴想要咨询webfunny埋点系统次日留存率该如何统计,今天我们就来讲一讲吧。 首先,我们以次日留存率来作为示例讲解说明,3日,7日留存率也是同理的。 示例场景:用户第一天前来…

基于SpringBoot的“幼儿园管理系统”的设计与实现(源码+数据库+文档+PPT)

基于SpringBoot的“幼儿园管理系统”的设计与实现(源码数据库文档PPT) 开发语言:Java 数据库:MySQL 技术:SpringBoot 工具:IDEA/Ecilpse、Navicat、Maven 系统展示 系统功能结构图 个人信息界面图 缴费信息管理界…