当前位置: 首页 > wzjs >正文

合肥网站制作专业沧州网络

合肥网站制作专业,沧州网络,wordpress编辑器 代码,公司网站建设企业网站‌一、为什么要做模型部署?‌ 模型部署是将训练好的模型‌投入实际应用‌的关键步骤,涉及: 模型格式转换(TorchScript/ONNX)性能优化(量化/剪枝)构建API服务移动端集成 本章使用ResNet18实现图…

一、为什么要做模型部署?

模型部署是将训练好的模型‌投入实际应用‌的关键步骤,涉及:

  1. 模型格式转换(TorchScript/ONNX)
  2. 性能优化(量化/剪枝)
  3. 构建API服务
  4. 移动端集成

 本章使用ResNet18实现图像分类,并演示完整部署流程。

二、模型转换:TorchScript与ONNX

1. 准备预训练模型

import torch
import torchvision# 加载预训练模型
model = torchvision.models.resnet18(weights='IMAGENET1K_V1')
model.eval()# 示例输入
dummy_input = torch.rand(1, 3, 224, 224)

 ‌2. 导出为TorchScript

# 方法一:追踪执行路径(适合无控制流模型)
traced_model = torch.jit.trace(model, dummy_input)
torch.jit.save(traced_model, "resnet18_traced.pt")# 方法二:直接转换(适合含if/for的模型)
scripted_model = torch.jit.script(model)
torch.jit.save(scripted_model, "resnet18_scripted.pt")# 加载测试
loaded_model = torch.jit.load("resnet18_traced.pt")
output = loaded_model(dummy_input)
print("TorchScript输出形状:", output.shape)  # 应输出torch.Size([1, 1000])

3. 导出为ONNX格式

torch.onnx.export(model,dummy_input,"resnet18.onnx",input_names=["input"],output_names=["output"],dynamic_axes={'input': {0: 'batch_size'}, 'output': {0: 'batch_size'}}
)# 验证ONNX模型
import onnx
onnx_model = onnx.load("resnet18.onnx")
onnx.checker.check_model(onnx_model)
print("ONNX模型输入输出:")
print(onnx_model.graph.input)
print(onnx_model.graph.output)

三、构建API服务

1. 使用FastAPI创建Web服务

from fastapi import FastAPI, File, UploadFile
from PIL import Image
import io
import numpy as np
import torchvision.transforms as transformsapp = FastAPI()# 加载TorchScript模型
model = torch.jit.load("resnet18_traced.pt")# 图像预处理
preprocess = transforms.Compose([transforms.Resize(256),transforms.CenterCrop(224),transforms.ToTensor(),transforms.Normalize(mean=[0.485, 0.456, 0.406], std=[0.229, 0.224, 0.225])
])@app.post("/predict")
async def predict(image: UploadFile = File(...)):# 读取并预处理图像image_data = await image.read()img = Image.open(io.BytesIO(image_data)).convert("RGB")tensor = preprocess(img).unsqueeze(0)# 执行推理with torch.no_grad():output = model(tensor)# 获取预测结果_, pred = torch.max(output, 1)return {"class_id": int(pred)}# 运行命令:uvicorn main:app --reload

2. 测试API服务

import requests# 准备测试图片
url = "https://images.unsplash.com/photo-1517849845537-4d257902454a?auto=format&fit=crop&w=224&q=80"
response = requests.get(url)
with open("test_dog.jpg", "wb") as f:f.write(response.content)# 发送预测请求
with open("test_dog.jpg", "rb") as f:files = {"image": f}response = requests.post("http://localhost:8000/predict", files=files)print("预测结果:", response.json())  # 应输出对应类别ID

四、移动端部署(Android/iOS)

1. 转换Core ML格式(iOS)

import coremltools as ct# 从PyTorch转换
example_input = torch.rand(1, 3, 224, 224) 
traced_model = torch.jit.trace(model, example_input)mlmodel = ct.convert(traced_model,inputs=[ct.TensorType(shape=example_input.shape)]
)
mlmodel.save("ResNet18.mlmodel")

2. 使用PyTorch Mobile(Android)

// Android示例代码(Java)
Module module = Module.load(assetFilePath(this, "resnet18_traced.pt"));
Tensor inputTensor = TensorImageUtils.bitmapToFloat32Tensor(bitmap,TensorImageUtils.TORCHVISION_NORM_MEAN_RGB,TensorImageUtils.TORCHVISION_NORM_STD_RGB
);
Tensor outputTensor = module.forward(IValue.from(inputTensor)).toTensor();

五、性能优化技巧

1. 模型量化(减少体积/提升速度)

# 动态量化
quantized_model = torch.quantization.quantize_dynamic(model, {torch.nn.Linear}, dtype=torch.qint8
)
torch.jit.save(torch.jit.script(quantized_model), "resnet18_quantized.pt")# 测试量化效果
print("原始模型大小:", sum(p.numel() for p in model.parameters()))
print("量化模型大小:", sum(p.numel() for p in quantized_model.parameters()))

2. ONNX Runtime加速推理

import onnxruntimeort_session = onnxruntime.InferenceSession("resnet18.onnx")
ort_inputs = {ort_session.get_inputs().name: dummy_input.numpy()}
ort_outputs = ort_session.run(None, ort_inputs)print("ONNX Runtime输出形状:", ort_outputs.shape)

六、常见问题解答

Q1:如何处理模型版本兼容性问题?

  • 保持PyTorch版本一致(使用requirements.txt固定版本)
  • 转换时指定opset_version:
torch.onnx.export(..., opset_version=13)

Q2:部署时出现形状不匹配错误?

  • 检查预处理是否与训练时一致
  • 使用Netron可视化模型输入输出:
pip install netron
netron resnet18.onnx

Q3:如何监控API性能?

  • 添加中间件记录响应时间:
@app.middleware("http")
async def add_process_time(request, call_next):start_time = time.time()response = await call_next(request)response.headers["X-Process-Time"] = str(time.time() - start_time)return response

七、小结与下篇预告

  • 本文重点‌:

    1. 模型格式转换(TorchScript/ONNX)
    2. 构建高并发API服务
    3. 移动端部署与性能优化
  • 下篇预告‌:
    第六篇将深入PyTorch生态,介绍分布式训练与多GPU加速策略,实现工业级训练效率!

http://www.dtcms.com/wzjs/551605.html

相关文章:

  • 任何用c语言做网站晋城龙采网站建设
  • 承德 网站维护wordpress网站 添加微信支付
  • 长沙做网站建设公司排名大连港健康打卡二维码
  • 什么是网站标题中恒建设职业技术培训学校网站
  • 徐家汇做网站官方网站建设公司排名
  • 网站建设中的端口广安做网站公司
  • 信誉比较好的网上做任务的网站手机网站网页设计
  • 长沙网站 建设推广世云网络怎样才能创建网站
  • 网站建设自查合肥做网站加盟
  • 重庆网站建公司大全网站建设 网络科技公司
  • 网站管理与维护做网站与做网页的区别
  • 企业电子商务网站有哪些做网站需要 的文档
  • 济宁网站建设优化亿峰wordpress企业主题免费
  • 苏ICP备网站建设中企动力无锡公众号涨粉
  • 网站主页图片怎么换北京seo关键词优化收费
  • 白狐网站建设网站开发实训内容
  • 怎么优化网站源码关键词网站建设与网页设计从入门到精通 pdf
  • 做国外lead应该做什么网站陕西省交通集团建设网站
  • 北京好用的h5建站百度查重入口免费版
  • 做商务网站要多少钱手机版网站怎么上传
  • 网站建设终端是什么C语言做网站需要创建窗口吗
  • 网站开发培训实训公司网站与营销网站在栏目上的不同
  • 兵团建设环保局网站网上医疗和医院网站建设制作
  • 福州企业网站建设专业服务上海高端品牌网站建设
  • 精品课程网站建设毕业设计论文怎么做正规网站
  • t恤在线设计网站app免费下载
  • 做最优秀的自己演讲视频网站网络工程属于计算机类吗
  • 做影视网站难吗专门做微信小程序的公司
  • 阿里巴巴网站建设缺点白银市城县建设局网站
  • 个人备案网站会影响吗网页设计和网站建设实战大全