AIGC:clip-interrogator

news/2025/3/14 17:54:31/

文字生成图片是近年来多模态和大模型研究的热门方向,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 = Trueshutil.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 Imageci = 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.ppmy.cn/news/1509990.html

相关文章

Navicat Monitor 荣获 2024 年 DBTA “最佳数据库性能解决方案”读者选择奖

近期,Navicat 以其卓越的服务器监控与深度分析能力在众多杰出竞争者中脱颖而出,其监控产品 Navicat Monitor 荣获了 2024 年度 DBTA 读者选择奖中的“最佳数据库性能解决方案”殊荣。该奖项不仅是对 Navicat Monitor 在数据库监控与分析领域非凡实力的权…

搭建内网开发环境(三)|基于nexus搭建docker私服

引言 上一篇教程中演示如果安装和 nexus 的基本使用,本篇教程将演示如果在 nexus 中搭建 docker 私服,并实战如何上传镜像到私服和从私服下载镜像。 搭建内网开发环境(一)|基于docker快速部署开发环境 搭建内网开发环…

k8s 存储卷管理 持久卷 pv/pvc 临时卷

持久卷 hostPath 卷 NFS 卷 访问验证 nfs 卷 curl http://10.244.1.19 PV/PVC 持久卷声明 临时卷 configMap nginx 解析 php 创建 ConfigMap 挂载 ConfigMap secret 卷 emptyDir 卷

3DVR测试点

一、3DVR测试点 3DVR测试点主要包括可用性测试、‌可视角度测试、‌分辨率测试、‌响应时间测试和色彩准确性测试。‌ 可用性测试:‌这一测试旨在评估VR产品的用户体验。‌通过模拟真实使用场景,‌收集用户反馈,‌以优化产品设计&#xff0c…

第130天:内网安全-横向移动PTH哈希PTT 票据PTK密匙Kerberos密码喷射

环境搭建 这里这个环境继续上一篇文章搭建的环境 案例一:域横向移动-PTH-Mimikatz&NTLM 什么是pth? PTH Pass The Hash ,通过密码散列值 ( 通常是 NTLM Hash) 来进行攻击。在域环境中,用户登录计算机时使用的域账号&…

bs4.element.Tag标签使用

查找标签 soup.find(a) # 查找第一个a 标签soup.find_all(a) # 查找所有的a 标签soup.select(.item) # 查找所有class 为 item的标签soup.select(div > p) # 查找所有div标签下的p标签2 获取属性值 linksoup.find_all(a) link[href] # 获取href的属性值# 使用get 方法…

SQLALchemy 的介绍

SQLALchemy 的介绍 基本概述主要特点使用场景安装与配置安装 SQLAlchemy配置 SQLAlchemy示例:使用 SQLite 数据库连接到其他数据库结论总结SQLAlchemy是Python编程语言下的一款开源软件,它提供了SQL工具包及对象关系映射(ORM)工具,使用MIT许可证发行。 基本概述 定义:SQL…

KCP源码解析系列(二)KCP协议结构体

一、KCP协议包 1.1 kcp协议包 kcp中只有一种数据包,不管是数据还是控制信息,都用这个数据包来表示 0 4 5 6 8 (BYTE) ---------------------------- | conv |cmd|frg| wnd | ---------------------------- 8 | …