基于huggingface加载openai/clip-vit-large-patch14-336视觉模型demo

文章目录

  • 引言
  • 一、模型加载
  • 二、huggingface梯度更新使用
  • 三、图像处理
  • 四、模型推理
  • 五、整体代码
  • 总结


引言

本文介绍如何使用huggingface加载视觉模型openai/clip-vit-large-patch14-336,我之所以记录此方法源于现有大模型基本采用huggingface库来加载视觉模型和大语言模型,我也是在做LLava模型等模型。基于此,本节将介绍如何huggingface如何加载vit视觉模型。

一、模型加载

使用huggingface模型加载是非常简单,其代码如下:

from transformers import CLIPVisionModel, CLIPImageProcessor


if __name__ == '__main__':
    vit_path='D:/clip-vit-large-patch14-336'
    img_path='dogs.jpg'

    image_processor = CLIPImageProcessor.from_pretrained(vit_path)  # 加载图像预处理
    vision_tower = CLIPVisionModel.from_pretrained(vit_path)  # 加载图像模型
    vision_tower.requires_grad_(False)  # 模型冻结

    for name, param in vision_tower.named_parameters():
        print(name, param.requires_grad)

二、huggingface梯度更新使用

一般视觉模型需要冻结,使用lora训练,那么我们需要如何关闭视觉模型梯度。为此,我继续探讨梯度设置方法,其代码如下:

    vision_tower.requires_grad_(False)  # 模型冻结

    for name, param in vision_tower.named_parameters():
        print(name, param.requires_grad)

以上代码第一句话是视觉模型梯度冻结方法,下面2句是验证梯度是否冻结。如果设置’‘vision_tower.requires_grad_(False)’'表示冻结梯度,如果不设置表示需要梯度传播。我将不在介绍了,若你想详细了解,只要执行以上
代码便可知晓。

三、图像处理

在输入模型前,我们需要对图像进行预处理,然huggingface也很人性的自带了对应视觉模型的图像处理,我们只需使用PIL实现图像处理,其代码如下:

    image = Image.open(img_path).convert('RGB')  # PIL读取图像
    def expand2square(pil_img, background_color):
        width, height = pil_img.size  # 获得图像宽高
        if width == height:  # 相等直接返回不用重搞
            return pil_img
        elif width > height:  # w大构建w尺寸图
            result = Image.new(pil_img.mode, (width, width), background_color)
            result.paste(pil_img, (0, (width - height) // 2))  # w最大,以坐标x=0,y=(width - height) // 2位置粘贴原图
            return result
        else:
            result = Image.new(pil_img.mode, (height, height), background_color)
            result.paste(pil_img, ((height - width) // 2, 0))
            return result


    image = expand2square(image, tuple(int(x * 255) for x in image_processor.image_mean))
    image = image_processor.preprocess(image, return_tensors='pt')['pixel_values'][0]

四、模型推理

最后就是模型推理,其代码如下:

    image_forward_out = vision_tower(image.unsqueeze(0),    output_hidden_states=True)

    feature = image_forward_out['last_hidden_state']

    print(feature.shape)

但是,我想说输出包含很多内容,其中hidden_states有25个列表,表示每个block输出结果,而hidden_states的最后一层与last_hidden_states值相同,结果分别如下图:

在这里插入图片描述

hidden_states与last_hidden_states对比如下:
在这里插入图片描述

五、整体代码

from transformers import CLIPVisionModel, CLIPImageProcessor

from PIL import Image


if __name__ == '__main__':
    vit_path='E:/clip-vit-large-patch14-336'
    img_path='dogs.jpg'

    image_processor = CLIPImageProcessor.from_pretrained(vit_path)  # 加载图像预处理
    vision_tower = CLIPVisionModel.from_pretrained(vit_path)  # 加载图像模型
    vision_tower.requires_grad_(False)  # 模型冻结

    for name, param in vision_tower.named_parameters():
        print(name, param.requires_grad)

    image = Image.open(img_path).convert('RGB')  # PIL读取图像

    def expand2square(pil_img, background_color):
        width, height = pil_img.size  # 获得图像宽高
        if width == height:  # 相等直接返回不用重搞
            return pil_img
        elif width > height:  # w大构建w尺寸图
            result = Image.new(pil_img.mode, (width, width), background_color)
            result.paste(pil_img, (0, (width - height) // 2))  # w最大,以坐标x=0,y=(width - height) // 2位置粘贴原图
            return result
        else:
            result = Image.new(pil_img.mode, (height, height), background_color)
            result.paste(pil_img, ((height - width) // 2, 0))
            return result


    image = expand2square(image, tuple(int(x * 255) for x in image_processor.image_mean))
    image = image_processor.preprocess(image, return_tensors='pt')['pixel_values'][0]

    image_forward_out = vision_tower(image.unsqueeze(0),    output_hidden_states=True)

    feature = image_forward_out['last_hidden_state']

    print(feature.shape)

总结

本文是一个huggingface加载视觉模型的方法,另一个重点是梯度冻结。然而,我只代表VIT模型是如此使用,其它模型还未验证,不做任何说明。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【办公类-22-10】周计划系列(5-2)“周计划-02源文件docx读取5天“ (2024年调整版本)

背景需求 承接上文,继续制作周计划 【办公类-22-09】周计划系列(5-1)“周计划-01源文件统一名称“ (2024年调整版本)-CSDN博客文章浏览阅读76次。【办公类-22-09】周计划系列(5-1)“周计划-01…

LabVIEW燃料电池船舶电力推进监控系统

LabVIEW燃料电池船舶电力推进监控系统 随着全球经济一体化的推进,航运业的发展显得尤为重要,大约80%的世界贸易依靠海上运输实现。传统的船舶推进系统主要依赖于柴油机,这不仅耗能高,而且排放严重,对资源和环境的影响…

2.25 day5 QT

闹钟 .h代码 #ifndef WIDGET_H #define WIDGET_H#include <QWidget> #include <QTimerEvent> #include <QTime> #include <QTextToSpeech>QT_BEGIN_NAMESPACE namespace Ui { class Widget; } QT_END_NAMESPACEclass Widget : public QWidget {Q_OBJ…

【Linux操作系统】死锁 | 预防、避免死锁

创作不易&#xff0c;本篇文章如果帮助到了你&#xff0c;还请点赞 关注支持一下♡>&#x16966;<)!! 主页专栏有更多知识&#xff0c;如有疑问欢迎大家指正讨论&#xff0c;共同进步&#xff01; &#x1f525;Linux系列专栏&#xff1a;Linux基础 &#x1f525; 给大家…

Codeforces Round 881 (Div. 3) F2. Omsk Metro (hard version)(倍增+最大子段和)

原题链接&#xff1a;F2. Omsk Metro (hard version) 题目大意&#xff1a; 最初开始时&#xff0c;你有一个根节点 1 1 1 且权值为 1 1 1 。 接下来会有 n n n 个操作&#xff0c;每次操作按照如下格式给出&#xff1a; 设操作开始前节点总数为 c n t cnt cnt&#xff1…

小型内衣裤洗衣机哪个牌子好?四大顶尖内衣洗衣机测评分享

要知道&#xff0c;内衣裤可能会残留我们身体分泌的尿液&#xff0c;或者是没有擦干净的便便&#xff0c;以及其他的一些分泌物&#xff0c;据科学家研究发现&#xff0c;内衣裤是含有很多细菌和病毒的地方&#xff0c;如果将内衣裤和衣服放在一起洗&#xff0c;导致这些细菌附…

golang学习1,dea的golang-1.22.0

参考&#xff1a;使用IDEA配置GO的开发环境备忘录-CSDN博客 1.下载All releases - The Go Programming Language (google.cn) 2.直接next 3.window环境变量配置 4.idea的go插件安装 5.新建go项目找不到jdk解决 https://blog.csdn.net/ouyang111222/article/details/1361657…

MySQL数据库集群技术主从复制 一主一从详细讲解

集群技术 集群概述 MySQL复制技术 集群目的 负载均衡 解决高并发 高可用HA 服务可用性 远程灾备 数据有效性 类型 一主一从 一主双从 双主双从 原理 概念 在主库上把数据更改&#xff08;DDL DML DCL&#xff09;记录到二进制日志&#xff08;Binary Log&#xff09;中…

AngularJS安装版本问题

一、安装 Angular CLI 脚手架安装命令&#xff1a; npm install -g angular/cli 在安装前请确保自己安装NodeJS环境版本为V18及以上&#xff0c;否则会因node版本问题导致项目无法正常运行。 脚手架安装后&#xff0c;已提示了当前node版本必须为18.13.0或大于20.9.0版本&…

Linux网卡安装好后自启动

Linux系统配置网卡Wifi博客 https://developer.aliyun.com/article/704878 1、插入网卡iwconfig&#xff0c;查看id是wlxec607385c827 2、创建一个脚本文件 创建一个脚本文件&#xff0c;比如 /usr/local/bin/start_wifi.sh&#xff0c;并添加以下内容&#xff0c;id请根据自…

多维时序 | Matlab实现GRU-MATT门控循环单元融合多头注意力多变量时间序列预测模型

多维时序 | Matlab实现GRU-MATT门控循环单元融合多头注意力多变量时间序列预测模型 目录 多维时序 | Matlab实现GRU-MATT门控循环单元融合多头注意力多变量时间序列预测模型预测效果基本介绍程序设计参考资料 预测效果 基本介绍 1.多维时序 | Matlab实现GRU-MATT门控循环单元融…

【Java核心能力】为什么不建议在高并发场景下使用 synchronized?

欢迎关注公众号&#xff08;通过文章导读关注&#xff1a;【11来了】&#xff09;&#xff0c;及时收到 AI 前沿项目工具及新技术的推送&#xff01; 在我后台回复 「资料」 可领取编程高频电子书&#xff01; 在我后台回复「面试」可领取硬核面试笔记&#xff01; 文章导读地址…

关注国外开源技术文档的中文版的朋友进来看一下

是否还在为技术文档全是英文而烦恼&#xff1f; 是否还在为国外网站访问慢甚至需要翻墙才能查看上面的文档而烦恼&#xff1f; 是否还在为翻译文档晦涩难懂、无法和作者交流而烦恼&#xff1f; 我创建了一个分享技术文档的网站&#xff0c;还在逐步完善&#xff0c;小伙…

大型电商日志离线分析系统(一)

一、项目需求分析 某大型网站日志离线分析系统 1.1 概述 该部分的主要目标就是描述本次项目最终七个分析模块的页面展示。 1.2 工作流 在我们的demo展示中&#xff0c;我们使用jqueryecharts的方式调用程序后台提供的rest api接口&#xff0c;获取json数据&#xff0c;然后…

【PostgreSQL】Windows安装PostgreSQL数据库图文详细教程

Windows安装PostgreSQL数据库图文详细教程 一、前言二、PostgreSQL简介三、软件下载四、安装步骤4.1 安装向导4.2 选择安装目录4.3 选择组件4.4 选择数据存放目录4.5 选择密码4.6 选择端口号4.7 等待安装完成4.8 取消勾选&#xff0c;安装完成 五、启动教程5.1 搜索pgAdmin4&am…

9.网络游戏逆向分析与漏洞攻防-游戏网络架构逆向分析-接管游戏连接服务器的操作

内容参考于&#xff1a;易道云信息技术研究院VIP课 上一个内容&#xff1a;游戏底层功能对接类GameProc的实现 码云地址&#xff08;master 分支&#xff09;&#xff1a;https://gitee.com/dye_your_fingers/titan 码云版本号&#xff1a;44c54d30370d3621c1e9ec3d7fa1e2a0…

五种多目标优化算法(MSSA、MOJS、NSWOA、MOPSO、MOAHA)性能对比(提供MATLAB代码)

一、5种多目标优化算法简介 多目标优化算法是用于解决具有多个目标函数的优化问题的一类算法。其求解过程可以分为以下几个步骤&#xff1a; 1. 定义问题&#xff1a;首先需要明确问题的目标函数和约束条件。多目标优化问题通常涉及多个目标函数&#xff0c;这些目标函数可能…

ONLYOFFICE 8.0版本深度测评:革新之作还是失望之作?

引言 &#xff1a; 随着办公自动化需求的不断升级&#xff0c;拥有一款功能全面、操作便捷的办公软件显得尤为重要。在这个背景下&#xff0c;ONLYOFFICE作为一款集文档编辑、表格处理、演示制作等多功能于一体的办公套件&#xff0c;吸引了众多用户的关注。近期&#xff0c;O…

IO进程线程day8作业

信号灯集二次函数封装 sem.c #include<myhead.h>union semun {int val; /* Value for SETVAL */struct semid_ds *buf; /* Buffer for IPC_STAT, IPC_SET */unsigned short *array; /* Array for GETALL, SETALL */struct seminfo *__buf; /* B…

校园微社区微信小程序源码/二手交易/兼职交友微信小程序源码

云开发校园微社区微信小程序开源源码&#xff0c;这是一款云开发校园微社区-二手交易_兼职_交友_项目微信小程序开源源码&#xff0c;可以给你提供快捷方便的校园生活&#xff0c;有很多有趣实用的板块和功能&#xff0c;如&#xff1a;闲置交易、表白交友、疑问互答、任务兼职…