【AI实战】[pytorch版]基于ResNet50的分类模型转onnx

[pytorch版]基于ResNet50的分类模型转onnx

基于ResNet50的分类模型转onnx

  • 依赖环境
import torch
import torch.onnx
import argparse
from torchvision import datasets, models, transforms
import torch.nn as nn
import cv2
import numpy as np
from PIL import Image
  • 核心代码
    model_ft = models.resnet50()
    num_fits = model_ft.fc.in_features
    model_ft.fc = nn.Linear(num_fits, 4) # 替换最后一个全连接层
    # get device
    device = torch.device("cpu:0")#默认CPU推理
    model_ft = model_ft.to(device)
    
    ## 加载模型
    model_ft.load_state_dict(torch.load(checkpoint_path))
    
    for name in model_ft.state_dict():
        print(name)
    
    norm_mean = [0.485, 0.456, 0.406]
    norm_std = [0.229, 0.224, 0.225]

    inference_transform = transforms.Compose([
        transforms.Resize(512),
        transforms.CenterCrop(448),
        transforms.ToTensor(),
        transforms.Normalize(norm_mean, norm_std),
    ])
    
    dummy_input = np.ones((512, 512, 3), dtype=np.uint8)
    dummy_input = Image.fromarray(cv2.cvtColor(dummy_input, cv2.COLOR_BGR2RGB))
    
    img_tensor = inference_transform(dummy_input)
    img_tensor.unsqueeze_(0)
    
    torch.onnx.export(model_ft, img_tensor, save_onnx_path)
  • 完整代码
import torch
import torch.onnx
import argparse
from torchvision import datasets, models, transforms
import torch.nn as nn
import cv2
import numpy as np
from PIL import Image

# 功能:把基于 resnet50 的pth模型转为onnx模型
def model2onnx(checkpoint_path, save_onnx_path):
    
    
    model_ft = models.resnet50()
    num_fits = model_ft.fc.in_features
    model_ft.fc = nn.Linear(num_fits, 4) # 替换最后一个全连接层
    # get device
    device = torch.device("cpu:0")#默认CPU推理
    model_ft = model_ft.to(device)
    
    ## 加载模型
    model_ft.load_state_dict(torch.load(checkpoint_path))
    
    for name in model_ft.state_dict():
        print(name)
    
    norm_mean = [0.485, 0.456, 0.406]
    norm_std = [0.229, 0.224, 0.225]

    inference_transform = transforms.Compose([
        transforms.Resize(512),
        transforms.CenterCrop(448),
        transforms.ToTensor(),
        transforms.Normalize(norm_mean, norm_std),
    ])
    
    dummy_input = np.ones((512, 512, 3), dtype=np.uint8)
    dummy_input = Image.fromarray(cv2.cvtColor(dummy_input, cv2.COLOR_BGR2RGB))
    
    img_tensor = inference_transform(dummy_input)
    img_tensor.unsqueeze_(0)
    
    torch.onnx.export(model_ft, img_tensor, save_onnx_path)
    
    print('onnx saved to ', save_onnx_path)
    
    
if __name__ == '__main__':
    # python3 model2onnx.py --checkpoint=./model/text_direction.pth --save_onnx_path=./model/text_direction.onnx
    
    parser = argparse.ArgumentParser(description="text_direction model2onnx")

    parser.add_argument('--checkpoint', type=str, default='./model/text_direction.pth',
                        help='the path to your checkpoints')
    parser.add_argument('--save_onnx_path', type=str, default='./model/text_direction.onnx', 
                        help='save_onnx_path')
    
    
    args = parser.parse_args()

    model2onnx(args.checkpoint, args.save_onnx_path)
    
  • 用法
python3 model2onnx.py --checkpoint=./model/text_direction.pth --save_onnx_path=./model/text_direction.onnx

最终输出结果保存到:./model/text_direction.onnx

  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

szZack

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值