hugging face 利用现有模型进行预测

news2024/9/19 17:13:33

本篇主要记录下如何使用hugging face来快速找到我们需要的模型,并通过已有模型来快速实现demo或是功能模块。贴上hugging face 官网链接:

hugging face model界面(需要魔法)
需要模板代码请跳转流程总结

目录

1.选择模型

2.创建模型+处理器对象

3.使用本地数据预测

4.模型简单糅合

5.流程总结


1.选择模型

        进入网页后再左侧可以看到现阶段主流的模型分类选择你需要的实际场景进入搜索页面,这里我选择image Classfication(图片分类)进行演示。(当然你也可以直接搜索模型,选择分类则是可以进一步筛选模型)

        这里选择google/vit-base-patch16-224来进行操作演示(ps:操作上所有一类的模型都是遵循同一套规则的,个人上传与大厂开源没有太大区别当然大厂开源会有更加详细的模型参数、效果说明等等)

        初入门的兄弟们可以从大厂开源开始玩起来,一般大厂的都会有演示代码(会提供一个最基础的使用模版),很容易上手,下面这段代码就是Google 的演示代码,安装好依赖后我们就能跑起来了:(ps:我觉得演示图很像梨花猫)

from transformers import ViTImageProcessor, ViTForImageClassification
from PIL import Image
import requests

url = 'http://images.cocodataset.org/val2017/000000039769.jpg'
image = Image.open(requests.get(url, stream=True).raw)

processor = ViTImageProcessor.from_pretrained('google/vit-base-patch16-224')
model = ViTForImageClassification.from_pretrained('google/vit-base-patch16-224')

inputs = processor(images=image, return_tensors="pt")
outputs = model(**inputs)
logits = outputs.logits
# model predicts one of the 1000 ImageNet classes
predicted_class_idx = logits.argmax(-1).item()
print("Predicted class:", model.config.id2label[predicted_class_idx])
image.show()

2.创建模型+处理器对象

        让我们来看一下这段简单的代码(ps:通过库下载模型不用魔法,可以直接跑)

from transformers import ViTImageProcessor, ViTForImageClassification

processor = ViTImageProcessor.from_pretrained('google/vit-base-patch16-224')
#model = ViTForImageClassification('google/vit-base-patch16-224') #不使用预训练权重
model = ViTForImageClassification.from_pretrained('google/vit-base-patch16-224')

print(model)

ps:插一嘴哈,每一个大类的processor和model声明会有区别,简单看一下对应的大厂实例就可快速get,当然你也可以翻hugging face的说明文档一劳永逸。。。

processor --------  主要用来对数据进行预处理,在vit 16-224模型中就是将输入图片转码成224*224的size
model -------------  声明模型,使用.from_pretrained表示使用的是预训练模型,会加载预训练权重,如果仅需要使用模型使用如下代码声明即可

model = ViTForImageClassification('模型名称')

         通过print(model)可以打印出模型结构


        可以看到vit模型主要vit(embeding,encoder,layernorm),classifier 2个组成部分。我们可以通过: model.  的方式来调用它们,当然也可打印出来查看结构

model.vit
model.classifier

3.使用本地数据预测

        我们只需要在google实例代码简单修改一部分就可以了:

image = Image.open(requests.get(url, stream=True).raw)

 替换为:(ps:windows 系统的童鞋记得加上'r'--> r'本地图片地址')

image = Image.open('本地图片地址')

4.模型简单糅合

        好了到此为止我们就能跑通模型也就能简单的玩一玩了,下面介绍一下最基础的进阶玩法。还记得之前的模型结构么,我们可以单独拿出vit或者classifier来跑,所以我们完全可以用某个预训练模型来提取特征,然后将特征转换成另一个模型的输入然后进行预测。

from transformers import ViTImageProcessor, ViTForImageClassification
from PIL import Image

processor = ViTImageProcessor.from_pretrained('google/vit-base-patch16-224')
model = ViTForImageClassification.from_pretrained('google/vit-base-patch16-224')

image = Image.open('data/train/good/1.jpg')
inputs = processor(images=image, return_tensors="pt")

outputs = model.vit(**inputs)

        我们使用model.vit(**inputs)来只调用vit模块而不进行分类,这里只是简单的提一句,后面会更新详细的微调博客。

5.流程总结

from transformers import ViTImageProcessor, ViTForImageClassification
from PIL import Image

processor = ViTImageProcessor.from_pretrained('模型名称')
model = ViTForImageClassification.from_pretrained('模型名称')

image = Image.open('输入地址')
#数据预处理
inputs = processor(images=image, return_tensors="pt")
#输出数据
outputs = model(**inputs)
#输出展示
logits = outputs.logits
predicted_class_idx = logits.argmax(-1).item()
print("Predicted class:", model.config.id2label[predicted_class_idx])

        再强调下哈不同大类的processor和model的声明函数不同,outputs结构也可能有所差异,打个端点看下就能很快的输出想要的结果了(当然找大厂开源示例模板是最快的方式了)。

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

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

相关文章

JAVA呵护晚年从智慧开始养老护理代办陪诊陪护小程序

呵护晚年,从智慧开始 —— 养老护理代办陪诊陪护小程序全解析 👵 【开篇:岁月静好,智慧护航】 随着时光的流转,家中的长辈渐渐步入晚年。如何给予他们最贴心的关怀与照顾,成为了我们心中的头等大事。今天…

【Linux】08.Linux 下的第一个小程序——进度条

一、知识引入 在写我们的进度条之前需要先引入一下小的知识点:换行与回车,认识缓冲区,认识格式化输出 1.1 换行与回车 换行指的是跳转到下一行的同一个位置 回车指的是跳转到本行开头的位置 新起一行就是换行回车 但是日常生活中我们见到的…

驾驭Python与MySQL的桥梁:pymysql的神秘面纱

文章目录 **驾驭Python与MySQL的桥梁:pymysql的神秘面纱**背景:为何选择pymysql?库的简介安装指南简单的库函数使用方法场景应用常见问题与解决方案总结 驾驭Python与MySQL的桥梁:pymysql的神秘面纱 背景:为何选择pym…

Django Admin对自定义的计算字段进行排序

通常,Django会为模型属性字段,自动添加排序功能。当你添加计算字段时,Django不知道如何执行order_by,因此它不会在该字段上添加排序功能。 如果要在计算字段上添加排序,则必须告诉Django需要排序的内容。你可以通过在…

Ollama-AI大模型本地运行工具,Windows安装详细步骤

一、关于Ollama 1.1 简介 Ollama是一个专为在本地环境中运行和定制大型语言模型而设计的工具。它提供了一个简单而高效的接口,用于创建、运行和管理这些模型,同时还提供了一个丰富的预构建模型库,可以轻松集成到各种应用程序中。Ollama的目…

MySQL——索引管理

目录 一、索引的概述 1、索引的概念 2、索引的作用 3、索引的副作用 4、创建索引的原则依据 5、索引的分类 二、索引的管理 1、查看索引 2、创建索引 2.1、创建普通索引 2.2、创建唯一索引 2.3、创建主键索引 2.4、创建组合索引 2.5、创建全文索引 3、删除索引 …

Vue3项目开发——新闻发布管理系统(五)

文章目录 七、登录&注册页面设计开发4、后端接口调用4.1 AXIOS请求工具封装4.2 创建 axios 实例①安装 axios② 封装 axios 模块4.3完成 axios 基本配置5 实现 注册功能5.1 创建接口调用js文件5.2 页面中调用注册方法6 实现 登录功能6.1 创建接口调用js文件6.2 页面中调用登…

VirtualBox 中 Ubuntu 系统在桥连模式下网络适配器启动过慢或连接失败

一个(无线或有线)网卡同时为虚拟机和电脑提供网络。 一、技术基础 网络桥接技术: 网卡可以通过桥接模式与虚拟机的网络接口进行连接。在这种模式下,网卡会创建一个虚拟的网桥,将虚拟机的网络接口与物理网络接口&…

基础闯关5

一、XTuner简介 XTuner 是一个高效、灵活、全能的轻量化大模型微调工具库。 高效 支持大语言模型 LLM、多模态图文模型 VLM 的预训练及轻量级微调。XTuner 支持在 8GB 显存下微调 7B 模型,同时也支持多节点跨设备微调更大尺度模型(70B)。自…

视频编码标准化组织介绍

ITU ITU,即International Telecommunication Union,国际电信联盟,是一个专门负责信息通信技术(Information and Communication Technologies,ICT)领域的联合国机构。它成立于1865年,最初是为了协…

彻底改变计算机视觉的 Vision Transformer (ViT) 综合指南(视觉转换器终极指南)

欢迎来到雲闪世界。大家好!对于那些还不认识我的人,我叫 Francois,我是 Meta 的研究科学家。我热衷于解释先进的 AI 概念并使其更容易理解。 今天,让我们深入探讨计算机视觉领域最重要的贡献之一:Vision Transformer&…

Debezium+Kafka:Oracle 11g 数据实时同步至 DolphinDB 运维手册

目前我们已经支持基于开源技术 Debezium Kafka,从 Mysql 和 Oracle 11g 实时同步数据到 DolphinDB 中。由于当前方案涉及到四个程序的部署,而且具体的 Source 同步任务和 Sink 同步任务还需要额外管理,在运维上具有一定难度。 本文将基于 O…

分类预测|基于鲸鱼优化WOA最小二乘支持向量机LSSVM的数据分类预测Matlab程序WOA-LSSVM 多特征输入多类别输出

分类预测|基于鲸鱼优化WOA最小二乘支持向量机LSSVM的数据分类预测Matlab程序WOA-LSSVM 多特征输入多类别输出 文章目录 一、基本原理1. 最小二乘支持向量机(LSSVM)LSSVM的基本步骤: 2. 鲸鱼优化算法(WOA)WOA的基本步骤…

安装 rocky9.4

涉及软件:virtualbox、rocky linux 9.4、mobaxterm virtualbox新建虚拟机,设置虚拟机配置 启动虚拟机,第一次会提示挂载虚拟光盘,选择下载的rocky linux 9.4。 选择第一项,安装rocky linux 9.4 进入安装设置&#…

echarts graphChart关系图简单逻辑实现

ECharts 的 graph 图表类型非常适合用来展示节点之间的关系,比如社交网络分析、系统架构图等。下面是一个简单的关系图功能,用来展示疾病与一些因素的关联关系。 1、数据之间的关系 首先,你需要准备数据来表示节点(nodes&#…

C ++初阶:类和对象(中)

目录 🌞0.前言 🚈1. 类的6个默认成员函数 🚈2. 构造函数 🚝2.1 概念 🚝2.2特性 🚝2.3编译器默认生成的构造函数。 ✈️补充1: ✈️补充2:开空间问题 🚈3. 析构函…

C++相关概念和易错语法(30)(异常、智能指针)

1.异常 在C语言这样的面向过程编程的语言来说,处理错误一般有两种方式:终止程序,如assert;返回错误码,比如打开文件失败,errno就会改变,perror就会打印错误码对应的错误信息 在面向对象的语言…

云原生存储Rook部署Ceph

Rook 是一款云原生存储编排服务工具,Ceph 是一种广泛使用的开源分布式存储方案,通过Rook 可以大大简化 ceph 在 Kubernetes 集群中的部署和维护工作。 Rook 由云原生计算基金会( CNCF )孵化,且于 2020 年 10 月正式进入毕业阶段。Roo…

【python因果推断库3】使用 CausalPy 进行贝叶斯geolift 分析

目录 导入数据 丹麦的销售额是否有地理提升(GeoLift)? 结果 本笔记本介绍如何使用 CausalPy 的贝叶斯{术语}合成控制功能来评估“地理提升”(GeoLift)。我们的假设情景如下: 你是一家在欧洲运营的公司的…

集成电路学习:什么是ISP系统编程

一、ISP:系统编程 ISP(In-System Programming)即系统编程,是一种在系统内部进行的编程方法,主要用于对闪存(FLASH)、EEPROM等非易失性存储器的编程。ISP编程提供了巨大的灵活性,允许…