AIGC:clip-interrogator

news2024/11/15 2:21:37

文字生成图片是近年来多模态和大模型研究的热门方向,openai提出的CLIP提供了一个方法建立起了图片和文字的联系,但是只能做到给定一张图片选择给定文本语义最相近的那一个,实际项目开发中我们总是需要从一张图片获取描述,clip-interrogator应运而生。

代码:https://github.com/pharmapsychotic/clip-interrogator

用途:根据图像获取提示词,即图生文

体验:https://huggingface.co/spaces/fffiloni/CLIP-Interrogator-2

 

上传一张图,反推出描述,然后将其作为prompt,喂到 Midjourney,效果还不错,自己可以微调一下刚才的prompt,以获得更好的效果。

https://huggingface.co/spaces/mukaist/Midjourney

流程上验证没啥问题,在本地搭建一下图生文

原理

clip-interrogator会使用BILP生成一段对图片的自然语言描述。

接下来会根据四种模式,从data文件夹下的txt文件中组合出文字生成图片常用的prompt,通过CLIP进行编码,然后将图片也用CLIP进行编码,计算出相似度最大的一组prompt,和BILP生成的prompt拼接到一起,就得到了一组prompt。

安装

# install torch with GPU support for example:
pip3 install torch torchvision --extra-index-url https://download.pytorch.org/whl/cu117

# install clip-interrogator
pip install clip-interrogator==0.5.4

# or for very latest WIP with BLIP2 support
#pip install clip-interrogator==0.6.0

模型

https://github.com/mlfoundations/open_clip

https://huggingface.co/models?library=open_clip

For the best prompts for Stable Diffusion 1.X use ViT-L-14/openai for clip_model_name. For Stable Diffusion 2.0 use ViT-H-14/laion2b_s32b_b79k(我们选择这个

代码:img2text.py


import os    
os.environ["CUDA_VISIBLE_DEVICES"] = "2"
from clip_interrogator import Config, Interrogator
import torch
config = Config()
config.device = 'cuda' if torch.cuda.is_available() else 'cpu'
config.blip_offload = False if torch.cuda.is_available() else True
config.chunk_size = 2048
config.flavor_intermediate_count = 512
config.blip_num_beams = 64
config.clip_model_name = "ViT-H-14/laion2b_s32b_b79k"
ci = Interrogator(config)

def get_prompt_from_image(image):
    return ci.interrogate(image.convert('RGB'))

import requests
import shutil
r = requests.get("https://pic1.zhimg.com/v2-6e056c49362bff9af1eb39ce530ac0c6_1440w.jpg?source=d16d100b", stream=True)
if r.status_code == 200:
    with open('./image.jpg', 'wb') as f:
        r.raw.decode_content = True
        shutil.copyfileobj(r.raw, f) 

from PIL import Image
print(get_prompt_from_image(Image.open('./image.jpg')))

代码

# 可以在运行命令前加上HF_ENDPOINT=https://hf-mirror.com。缓解国内无法下载问题
HF_ENDPOINT=https://hf-mirror.com python img2text.py

其他使用可参考:clip_interrogator教程 - plus studio - StudyingLover

模型

BLIP

BLIP可以传入两种选项,large 和 base,默认使用large, base用法是

from PIL import Image
from clip_interrogator import Config, Interrogator
image = Image.open(image_path).convert('RGB')
ci = Interrogator(Config(caption_model_name='blip-base',clip_model_name="RN50-quickgelu/openai"))
print(ci.interrogate_fast(image))
CLIP:
模型tag
coca_base不传
RN50'openai', 'yfcc15m', 'cc12m'
RN50-quickgelu'openai', 'yfcc15m', 'cc12m'
RN101'openai', 'yfcc15m'
RN101-quickgelu'openai', 'yfcc15m'
RN50x4'openai'
RN50x16'openai'
RN50x64'openai'
ViT-B-32'openai', 'laion400m_e31', 'laion400m_e32', 'laion2b_e16', 'laion2b_s34b_b79k'
ViT-B-32-quickgelu'openai', 'laion400m_e31', 'laion400m_e32'
ViT-B-16'openai', 'laion400m_e31', 'laion400m_e32', 'laion2b_s34b_b88k'
ViT-L-14-336'openai'
ViT-S-32-alt不传
ViT-S-32不传
ViT-S-16-alt不传
ViT-S-16不传
ViT-M-32-alt不传
ViT-M-32不传
ViT-M-16-alt不传
ViT-M-16不传
xlm-roberta-base-ViT-B-32'laion5b_s13b_b90k'
xlm-roberta-large-ViT-H-14'frozen_laion5b_s13b_b90k'

例如使用RN50-quickgelu/openai 的用法就是ci = Interrogator(Config(clip_model_name="RN50-quickgelu/openai"))

文档中有这么一句ViT-L for Stable Diffusion 1, and ViT-H for Stable Diffusion 2,意思是 ViT-L 是给 Stable Diffusion 1 用的,ViT-H是给 Stable Diffusion 2 用的

模式

模式有best , classic, fastnegative 三种,开发者在这里的设计很奇怪,不同模式的使用不是传不同的参数而是使用不同的方法。best 模式就是上面的用法

fast 模式的用法是

from PIL import Image
from clip_interrogator import Config, Interrogator
image = Image.open(image_path).convert('RGB')
ci = Interrogator(Config(clip_model_name="RN50-quickgelu/openai"))
print(ci.interrogate_fast(image))

classic 模式用法

from PIL import Image
from clip_interrogator import Config, Interrogator
image = Image.open(image_path).convert('RGB')
ci = Interrogator(Config(clip_model_name="RN50-quickgelu/openai"))
print(ci.interrogate_classic(image))

negative 模式用法

from PIL import Image
from clip_interrogator import Config, Interrogator
image = Image.open(image_path).convert('RGB')
ci = Interrogator(Config(clip_model_name="RN50-quickgelu/openai"))
print(ci.interrogate_negative(image))

quiet

quiet 选项的作用是不输出中间过程,使用方法是直接写进Config 即可 ,例如

from PIL import Image
from clip_interrogator import Config, Interrogator
image = Image.open('/content/test.png').convert('RGB')
ci = Interrogator(Config(clip_model_name="RN50-quickgelu/openai",quiet=True))
print(ci.interrogate_fast(image))

自定义词库

如果你安装的是0.6.0,那么可以使用自定义词库

from clip_interrogator import Config, Interrogator, LabelTable, load_list
from PIL import Image

ci = Interrogator(Config(blip_model_type=None))
image = Image.open(image_path).convert('RGB')
table = LabelTable(load_list('terms.txt'), 'terms', ci)
best_match = table.rank(ci.image_to_features(image), top_count=1)[0]
print(best_match)

其他:

1:clip-interrogator代码解析 - plus studio-腾讯云开发者社区-腾讯云

2:https://www.cnblogs.com/studyinglover/p/17857214.html

3:clip_interrogator教程 - plus studio - StudyingLover

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

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

相关文章

数据结构与算法概述(1/6)

目录 1. 引言 2. 数据结构的概念 2.1 什么是数据结构 2.2 数据结构的分类 2.3 数据存储结构 3. 算法的概念 3.1 什么是算法 3.2 算法的基本特性 3.3 算法的评价标准 3.4 算法的描述方法 4. 算法性能分析 4.1 时间复杂度的概念与分析 4.2 空间复杂度的概念与分析 4…

萨科微半导体入驻得捷

2024年8月1日,萨科微半导体公司宣布其高性能半导体产品成功入驻全球知名电子元器件采购平台得捷,这一合作不仅丰富了得捷的产品线,也标志着萨科微产品将借助得捷的广泛影响力加速出海,共同推动电子行业创新与发展,为全…

查看一个exe\dll文件的依赖项

方法 使用一个Dependencies工具&#xff0c;检测exe文件的所有依赖项 工具使用 下载压缩包之后解压&#xff0c;解压后如下图所示 在命令行中运行Dependencies.exe程序会得到帮助菜单 查询某exe的所有依赖项&#xff0c;使用命令 Dependencies.exe -chain <查询文件> …

uniapp app中使用柱状图 折线图 圆环图和饼图

实现思路 借助echarts.min.js 搭配l-echart进行配置 废话不多说上代码后自己百度了解配置项的意思就好 下面代码是折线图的 &#xff0c;柱状图和它一摸一样&#xff0c;只需要把line换成bar就好 <template><l-echart ref"chart"></l-echart> …

网络协议八 网络安全相关

网络通讯中的4种 安全问题 网络层- ARP欺骗 ARP欺骗的防护原理 DoS&#xff0c;DDoS 攻击 应用层 DNS 劫持 HTTP 协议的安全问题 单向散列函数&#xff0c;不可逆 MD4,MD5,SHA全家桶 可逆&#xff0c;对称加密 DES,3DES,AES DES,已经被破解&#xff0c;不建议使用 3DES AES 目前…

2024新型数字政府综合解决方案(三)

新型数字政府综合解决方案通过融合人工智能、大数据和云计算技术&#xff0c;建立了一个智能化、互联互通的政府服务平台&#xff0c;旨在提升政府服务效率与透明度。该方案通过全面数字化政务流程&#xff0c;实现数据的实时共享和自动化处理&#xff0c;使公众能够便捷地访问…

Qt作业合集

8.14作业 设置窗口&#xff0c;按钮&#xff0c;标签&#xff0c;行编辑器&#xff0c;实现快递速运登录页面 #include "mywidget.h"MyWidget::MyWidget(QWidget *parent): QWidget(parent) {//窗口//设置窗口的标题this->setWindowTitle("邮递系统")…

Flink on yarn 开发过程中遇到的问题

1. 任务启动报错Trying to access closed classloader. Exception in thread "Thread-5" java.lang.IllegalStateException: Trying to access closed classloader. Please check if you store classloaders directly or indirectly in static fields. If the st…

Qt QLabel标签制作弹框效果,3s后缓慢自动消失

效果图 初始化说明 void InitStatusTips() {if (NULL statusTips_) {return;}statusTips_->setFixedSize(300, 80);//固定大小statusTips_->move((width() - statusTips_->width()) / 2, height() - 30 - statusTips_->height());//移动位置statusTips_->setA…

汽车IVI中控OS Linux driver开发实操(二十四):I2C设备驱动的编写

在Linux驱动中I2C系统中主要包含以下几个成员: I2C adapter(即I2C适配器,用来控制各种I2C从设备,其驱动需要完成对适配器的完整描述,最主要的工作是需要完成i2c_algorithm结构体。这个结构体包含了此I2C控制器的数据传输具体实现,以及对外上报此设备所支持的功能类型。具…

钉钉虚拟位置打卡神器2024免费试用版下载-钉钉虚拟位置打卡神器

钉钉虚拟位置打卡神器是一款能够快速帮助用户修改定位的辅助&#xff0c;钉钉虚拟位置打卡免费版能够一键切换手机上班的打开地点&#xff0c;帮助打工人更好的应对公司&#xff0c;收获奖金&#xff01;软件不需要root就可以安装使用&#xff0c;并且体积也比较小&#xff0c;…

仿RabbitMq实现简易消息队列基础篇(future操作实现异步线程池)

TOC 介绍 std::future 是C11标准库中的一个模板类&#xff0c;他表示一个异步操作的结果&#xff0c;当我们在多线程编程中使用异步任务时&#xff0c;std::future可以帮助我们在需要的时候&#xff0c;获取任务的执行结果&#xff0c;std::future 的一个重要特性是能…

【Java学习】Stream流详解

所属专栏&#xff1a;Java学习 Stream流是JDK 8引入的一个概念&#xff0c;它提供了一种高效且表达力强的方式来处理数据集合&#xff08;如List、Set等&#xff09;或数组。Stream API可以以声明性方式&#xff08;指定做什么&#xff09;来处理数据序列。流操作可以被分为两大…

GD32 ADC配置跳坑

GD32 ADC配置跳坑 &#xff1a;时钟使能配置需在ADC前面 放在后面读取ADC值失败。 DMA配置放在ADC配置后面可以正常读取ADC的值 不同的模式选择可能会导致ADC存在读取失败的问题&#xff0c;红色部分是常用的模式&#xff0c;一般可以读取到相应的ADC的值 adc_software_trigge…

优雅谈大模型:Python编程篇

Python在机器学习领域的地位十分关键&#xff0c;虽然后面有Julia&#xff0c;Mojo等其他对手的挑战&#xff0c;然而Python拥有庞大的机器学习库和框架&#xff0c;尤其是生态系统比以往任何时候又强大了不少。从另外维度它和Java&#xff0c;Scala&#xff0c;Go&#xff0c;…

游戏安全入门-扫雷分析远程线程注入

前言 无论学习什么&#xff0c;首先&#xff0c;我们应该有个目标&#xff0c;那么入门windows游戏安全&#xff0c;脑海中浮现出来的一个游戏 – 扫雷&#xff0c;一款家喻户晓的游戏&#xff0c;虽然已经被大家分析的不能再透了&#xff0c;但是我觉得自己去分析一下还是极好…

适配器模式, 修饰器模式 与 代理模式

这三种模式, 感觉非常类似, 都是把核心类包一层, 在外部做一些额外的事情, 我还没发现他们之间具体的区别, 有想法的同学, 可以评论或者私聊我 适配器模式 简介: 就是在目标类外面包一层, 用以适配其他的模块,兼容整个程序框架 举个例子: 比如运动员, 中国运动员参加法国奥运…

市域社会治理平台规划建设方案

1. 建设背景与市域治理定义 市域社会治理作为国家治理体系的重要组成部分&#xff0c;具有承上启下的枢纽作用。2019年&#xff0c;全国市域社会治理现代化工作会议提出了推进市域社会治理现代化的总体思路&#xff0c;强调以城带乡、以点带面&#xff0c;明确了市域治理的方向…

[项目]文海泛舟测试报告

目录 一、项目背景 二、项目功能 三、功能测试 1. 测试用例&#xff1a; 2. 实际测试的部分&#xff08;含截图&#xff09; 1. 正常登录 2. 文章列表页显示/登录用户信息显示 3. 文章详情页内容显示/文章作者信息显示 4. 编辑功能 1. 点击“更新博客”按钮前 2. 点击…

前端开发攻略---Vue实现图像裁剪功能,支持用户通过图形界面进行裁剪区域的调整,最终生成裁剪后的图像。

目录 1、演示 2、实现原理 3、实现功能 4、代码 1、演示 2、实现原理 这里有详细介绍&#xff1a; 前端开发攻略---图片裁剪上传的原理-CSDN博客 3、实现功能 上传图像&#xff1a; 用户选择文件后&#xff0c;changeFile 方法读取文件内容并将其转换为 Data URL&#xff0c…