Onnx使用预训练的 ResNet18 模型对输入图像进行分类,并将分类结果显示在图像上

目录

一、整体功能概述

二、函数分析

2.1 resnet() 函数:

2.2 pre_process(img_path) 函数:

2.3 loadOnnx(img_path) 函数:

三、代码执行流程


一、整体功能概述


这段代码实现了一个图像分类系统,使用预训练的 ResNet18 模型对输入图像进行分类,并将分类结果显示在图像上。它包括以下主要步骤:
读取一个包含类别名称和对应编号的文本文件,并将其存储在字典中。
定义了几个函数,包括模型导出函数 resnet()、图像预处理函数 pre_process() 和加载 ONNX 模型进行分类的函数 loadOnnx()。
在主程序中,指定输入图像路径,调用 loadOnnx() 函数对图像进行分类并显示结果。


二、函数分析


2.1 resnet() 函数:


使用 torchvision 中的预训练 ResNet18 模型,并设置为评估模式。
生成一个随机输入张量 x,并将模型导出为 ONNX 格式,保存为 models/resnet18.onnx 文件。

def resnet():model=models.resnet18(weights=ResNet18_Weights.IMAGENET1K_V1)model.eval()x=torch.randn(1,3,224,224)torch.onnx.export(model,x,'models/resnet18.onnx',input_names=['input'],output_names=['output'])


2.2 pre_process(img_path) 函数:


读取输入图像 img_path。
调整图像大小为 224x224。
将图像颜色通道从 BGR 转换为 RGB。
对图像像素值进行归一化处理。
交换图像维度顺序,并增加一个维度。
返回预处理后的图像张量。

def pre_process(img_path):#h w c--->224,224,3#归一化#换轴#增加维度img=cv2.imread(img_path)scale_image=cv2.resize(img,dsize=(224,224))rgb_img=cv2.cvtColor(scale_image,cv2.COLOR_BGR2RGB)rgb_img=rgb_img/255rgb_img=np.transpose(rgb_img,(2,0,1))rgb_img=np.expand_dims(rgb_img,0).astype(np.float32)return rgb_img


2.3 loadOnnx(img_path) 函数:


创建一个 ONNX 推理会话,加载预导出的 ResNet18 ONNX 模型。

调用 pre_process() 函数对输入图像进行预处理。
准备输入数据并进行推理。
获取推理结果中概率最大的类别编号。
根据类别编号从字典中获取对应的类别名称,并进行翻译。
在输入图像上显示分类结果,并展示图像。

def loadOnnx(img_path):session=ort.InferenceSession(r'models\resnet18.onnx',providers=['CPUExecutionProvider'])img=pre_process(img_path)img_back=cv2.imread(img_path)intput_feed={'input':img}session_out=session.run(None,intput_feed)[0]out=np.argmax(session_out,axis=1)[0]res=str(out)# print(dict[res])ans=dict[res].split(',')[1].split(']')[0].strip()ans = translator.translate(ans)cv2.putText(img_back,ans,(100,100),fontFace=1,fontScale=2.0,color=(0,0,255),thickness=3,lineType=cv2.LINE_AA)cv2.imshow('win',img_back)cv2.waitKey(0)cv2.destroyAllWindows()print(ans)

完整代码如下

import cv2
import numpy as np
import torch
from torchvision import models
from torchvision.models import ResNet18_Weights
import onnxruntime as ort
from translate import Translator
translator=Translator(to_lang='Chinese')#翻译成中文
dict={}
with open('类别.txt','r',encoding='utf-8') as f:lines=f.readlines()for line in lines:name=line.split('\t')[0]value=line.split('\t')[1]dict[name]=value
# print(dict)
def resnet():model=models.resnet18(weights=ResNet18_Weights.IMAGENET1K_V1)model.eval()x=torch.randn(1,3,224,224)torch.onnx.export(model,x,'models/resnet18.onnx',input_names=['input'],output_names=['output'])
def pre_process(img_path):#h w c--->224,224,3#归一化#换轴#增加维度img=cv2.imread(img_path)scale_image=cv2.resize(img,dsize=(224,224))rgb_img=cv2.cvtColor(scale_image,cv2.COLOR_BGR2RGB)rgb_img=rgb_img/255rgb_img=np.transpose(rgb_img,(2,0,1))rgb_img=np.expand_dims(rgb_img,0).astype(np.float32)return rgb_img#RGB
def loadOnnx(img_path):session=ort.InferenceSession(r'models\resnet18.onnx',providers=['CPUExecutionProvider'])img=pre_process(img_path)img_back=cv2.imread(img_path)intput_feed={'input':img}session_out=session.run(None,intput_feed)[0]out=np.argmax(session_out,axis=1)[0]res=str(out)# print(dict[res])ans=dict[res].split(',')[1].split(']')[0].strip()ans = translator.translate(ans)cv2.putText(img_back,ans,(100,100),fontFace=1,fontScale=2.0,color=(0,0,255),thickness=3,lineType=cv2.LINE_AA)cv2.imshow('win',img_back)cv2.waitKey(0)cv2.destroyAllWindows()print(ans)pass
if __name__ == '__main__':img_path='dog.png'# resnet()#导出模型loadOnnx(img_path)


三、代码执行流程


在 if __name__ == '__main__': 部分:
定义输入图像路径 img_path。
可以选择调用 resnet() 函数导出模型(注释状态,通常只在第一次运行或模型更新时使用)。
调用 loadOnnx(img_path) 函数对输入图像进行分类和显示结果。

 

 

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

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

相关文章

设计模式26-解析器模式

设计模式26-解析器模式 动机定义与结构定义结构 C代码推导代码说明 优缺点应用总结 动机 在软件构建过程中,如果某一特定领域的问题比较复杂,类似结构会不断重复的出现。如果使用普通的编程方式来实现,将面临非常频繁的变化。 在这种情况下&…

无人机 PX4 飞控 | ROS应用层开发:指令(字符串)订阅功能

无人机 PX4 飞控 | ROS应用层开发:指令(字符串)订阅功能 指令(字符串)订阅功能代码测试 指令(字符串)订阅功能 为了通过键盘触发mavros 的不同功能,需要实现一个订阅字符串的功能 该…

【国外比较权威的免费的卫星数据网站】

国外比较权威的免费卫星数据网站有多个,它们各自在数据覆盖范围、分辨率、以及数据种类等方面具有不同的特点和优势。以下是一些推荐的网站: NASA Worldview 网址:https://worldview.earthdata.nasa.gov/简介:NASA Worldview显示…

p10 容器的基本命令

首先先拉取一个centos的镜像 命令:docker pull centos 新建容器并且启动 这里直接参考老师的命令吧 接下来是启动并且进入到容器当中去输入docker run -it centos /bin/bash这里是以交互的方式进入到容器中可以看到接下来的ls命令输出的东西就是一个Linux系统最…

Python和MATLAB和R对比敏感度函数导图

🎯要点 深度学习网络两种选择的强制选择对比度检测贝叶斯自适应估计对比敏感度函数空间观察对比目标量化视觉皮质感知差异亮度、红/绿值、蓝/黄值色彩空间改变OpenCV图像对比度对比敏感度函数模型空间对比敏感度估计眼球运动医学研究空间时间颜色偏心率对比敏感度函…

mysql 不同版本安装不同端口

安装版本为Mysql8.0.11 先解压,解压后,包下创建my.ini文件内容如下: 注意:端口不能给别的mysql一样 [mysqld]# 设置3306端口port3307 # 自定义设置mysql的安装目录,即解压mysql压缩包的目录basedirD:\\rj\\mysql8.0.…

模型 SPIN销售法

系列文章 分享 模型,了解更多👉 模型_思维模型目录。探需挖痛,引导成交。 1 SPIN销售法的应用 1.1 提升工作效率的软件销售应用SPIN模型 一家制造企业正在寻求提升工作效率的解决方案。他们注意到员工在处理文件和任务时存在效率问题&#…

【Docker】Linux系统以及威联通QNAP部署思源笔记的通用教程

本文首发于 ❄️慕雪的寒舍 本文测试的是旧版本v2.11.4的部署方式,实测当前(2024.08.15)最新的v3.1.3版本也可以用相同的方式部署。本文的部署方式共写了三种,非qnap的linux系统也可以参考本文部署思源笔记。 阅读本文之前&#…

新审视零阶优化在内存高效大模型微调中的应用

人工智能咨询培训老师叶梓 转载标明出处 随着大模型模型规模的增大,反向传播(BP)所需的内存开销也日益增加,这对内存效率提出了挑战。尤其是在设备上训练等内存效率至关重要的应用场景中,解决这一问题变得尤为迫切。 …

【Linux】07.Linux 下的项目自动化构建工具——make/makefile

前言 会不会写makefile,从一个侧面说明了一个人是否具备完成大型工程的能力一个工程中的源文件不计数,其按类型、功能、模块分别放在若干个目录中,makefile定义了一系列的规则来指定,哪些文件需要先编译,哪些文件需要…

【Datawhale X 李宏毅苹果书 AI夏令营】Task1笔记

第三章:深度学习基础 3.1 局部极小值与鞍点 临界点,即梯度为零的点,包含局部极小值(local minimum)和鞍点(saddle point)。 梯度下降算法在接近鞍点的时候会变得非常慢,阻碍了继续…

机器学习:K-means算法(内有精彩动图)

目录 前言 一、K-means算法 1.K-means算法概念 2.具体步骤 3.精彩动图 4.算法效果评价 二、代码实现 1.完整代码 2.结果展示 3.步骤解析 1.数据预处理 2.建立并训练模型 3.打印图像 四、算法优缺点 1.优点 2.缺点 总结 前言 机器学习里除了分类算法&#xff0…

如何使用ssm实现计算机科学与技术学习网站的设计与开发

TOC ssm248计算机科学与技术学习网站的设计与开发jsp 绪论 1.1 研究背景 当前社会各行业领域竞争压力非常大,随着当前时代的信息化,科学化发展,让社会各行业领域都争相使用新的信息技术,对行业内的各种相关数据进行科学化&…

尝试给OpenHarmony4.0增加可以在动态库中使用的日志模块

尝试给OpenHarmony4.0增加可以在动态库中使用的日志模块 前言一、资源来源二、实践步骤1.修改OH内核并编译2.动态库增加welog打印3.设备验证打完收工 总结参考 前言 最近在搞OpenHarmony4.0蓝牙模块的适配,最主要的工作就是在libbt_vendor.z.so这个库的编写修改&am…

AWS 使用 Amazon EC2 控制台安装和配置 CloudWatch 代理以添加其他指标如内存

默认情况下,Amazon CloudWatch 提供基本指标(例如 CPUUtilization 和 NetworkIn)用于监控 Amazon EC2 实例。要收集其他指标,您可以在 EC2 实例上安装 CloudWatch 代理,然后将该代理配置为发出所选指标。您可以使用 Am…

网络安全售前入门04——审计类产品了解

目录 1.前言 2.数据库审计介绍 2.1产品架构功能 2.2应用场景 2.3部署形式 2.4产品价值 2.5选型依据 1.前言 为方便初接触网络安全售前工作的小伙伴了解网安行业情况,我制作一系统售前入门(安全产品,安全服务,法律法规等)文章介绍,希望能给初进网安职场的小伙伴提供…

【Qt】Qt系统 | Qt事件 | 定时器

文章目录 定时器QTimerEventQTimer获取系统日期及时间 定时器 Qt 中在进行窗口程序的处理过程中,经常要周期性的执行某些动作,或者制作一些动画效果,使用定时器可以实现这些需求。 定时器,会在间隔一定时间后,执行某一…

Git下载安装配置

Git的下载与安装 Git是一种分布式版本控制系统,用于跟踪文件和文件夹的变化。它最初由Linus Torvalds开发,用于管理Linux内核的源代码。Git的设计目标是:速度快、开发效率高、数据完整性和可靠性强。 Git通过创建一个存储库(rep…

【FESCO福利专区-注册安全分析报告-无验证方式导致安全隐患】

前言 由于网站注册入口容易被黑客攻击,存在如下安全问题: 1. 暴力破解密码,造成用户信息泄露 2. 短信盗刷的安全问题,影响业务及导致用户投诉 3. 带来经济损失,尤其是后付费客户,风险巨大,造…

什么领域/方向的产品经理既有发展前景又能做的长久

前几天我在知乎上回答了一道“目前什么领域的产品经理比较有发展前景?有推荐的课程吗?”的问题,讲得还比较实在,于是在这里也顺便分享一下。 TOP1.商业产品经理 之所以这个方向能排在第1,我认为有3点理由。 第1点&a…