AIGC:clip-interrogator

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

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

相关文章

高效录制新选择:2024年Windows录屏软件

录屏能帮助我们捕捉屏幕上的精彩瞬间,作为老师可以用来录制课程,作为会议记录员可以用来录制远程会议。那么有什么软件是适合windows录屏的呢?这次我们一起来探讨一下吧。 1.福昕录屏大师 链接:www.foxitsoftware.cn/REC/ 这款软…

什么是链表/双向链表

看csp j选择的时候看到链表题,那就来写一写吧 什么是链表 首先我们知道数组: 链表和数组有点像,他是这样的: 1----->2------->3------->4 链表中每个数据都有一个指针,指着自己的下一项数据是哪一个 比如…

Android高版本抓包总结

方案1 CharlesVirtualXposedJustTrustMe 推荐使用三星手机此方案 VirtualXposed下载链接:https://github.com/android-hacker/VirtualXposed/releases JustTrustMe下载链接:https://github.com/Fuzion24/JustTrustMe/releases/ 下载完成后使用adb命令…

编辑器和工具扩展

https://www.youtube.com/watch?vovpiYkYFlPM ui提示 检查资源的合法性

使用 Ollama 集成 GraphRag.Net:一步步教你如何实现

在当今的技术世界,人工智能 (AI) 正在以惊人的速度发展。对于开发者来说,使用最新的工具和框架来提升工作效率至关重要。而在 AI 领域,GraphRag.Net 作为一个强大的图算法框架,允许我们以高效的方式进行数据处理。同样&#xff0c…

【Java 并发编程】(二) 从对象内存布局开始聊 synchronized

对象的内存布局 首先抛出一个经典面试题: 一个 Object 对象占多大? 这里我用工具打印了出来, 发现是 “16bytes”, 也就是 16B; 为什么? 请继续往下看; 普通对象(除了数组), 由markword, 类型指针, 实例数据(就是对象里的成员), 对齐填充(整个对象大小要能被8B整数, 方便6…

电销机器人引领电销变革

以前电销都是都是通过盲打,现在有了电话机器人的出现,为电销公司带来新的篇章。 我们都知道外呼中心的人员离职率始终居高不下,人员的培训频繁成本很高,外部电话水平参差不齐,服务态度不够稳定等问题,都是难…

基础 - 前端知识体系详解

一、前端三要素 HTML(结构): 超文本标记语言(Hyper Text Markup Language),决定网页的结构和内容。CSS(表现): 层叠样式表(Cascading Style Sheets&#xff0…

【Mac】Downie 打开提示试用的解决办法?

前情 我们在使用 Downie 的时候,可能遇到提示试用的问题,如下图所示。 原因 旧版本的 Downie 没有卸载干净导致的。 解决办法 先使用 AppCleaner 卸载掉电脑上的 Downie 旧版本软件,必须使用 AppCleaner 卸载。重新安装 Downie 即可。

如何保证数据不丢失?(死信队列)

死信队列 1、什么是死信 死信通常是消息在特定的场景下表现: 消息被拒绝访问消费者发生异常,超过重试次数消息的Expiration过期时长或者队列TTL过期时间消息队列到达最大容量 maxLength 2、什么是死信队列 只由死信构成的消息队列是死信队列 死信队…

PhpStorm完全配置指南:打造高效PHP开发环境!

Phpstorm环境配置与应用,具体包括安装PhpStorm、配置PHP运行环境、Apache集成、调试和部署等步骤。下面将详细展开每个步骤的具体操作和注意事项。 PhpStorm的下载与安装 下载地址:访问PhpStorm的官网下载地址,选择合适的版本进行下载。建议选…

springboot、spring@JsonAlias(velue)的作用

‌JsonAlias注解用于为字段或参数指定反序列化时的别名。‌‌ 在Java开发中,‌特别是在使用Jackson库进行JSON序列化和反序列化时,‌JsonAlias注解扮演着重要的角色。‌它允许开发者为字段或参数指定一个或多个别名,‌这样在反序列化过程中&…

希尔排序,详细解析(附图解)

1.希尔排序思路 希尔排序是一种基于插入排序的算法,通过将原始数据分成若干个子序列,然后对子序列进行插入排序,逐渐减小子序列的间隔,最后对整个序列进行一次插入排序。 1.分组直接插入排序,目标接近有序--------…

玩机进阶教程-----回读 备份 导出分区来制作线刷包 回读分区的写入与否 修改xml脚本

很多工作室需要将修改好的系统导出来制作线刷包。前面分享过很多制作线刷包类的教程。那么一个机型中有很多分区。那些分区回读后要写入。那些分区不需要写入。强写有可能会导致不开机 不进系统的故障。首先要明白。就算机型全分区导出后在写回去 都不一定可以开机进系统。那么…

萌啦数据插件使用情况分析,萌啦数据插件下载

在当今数字化时代,数据已成为企业决策与个人分析不可或缺的重要资源。随着数据分析工具的日益丰富,一款高效、易用的数据插件成为了众多用户的心头好。其中,“萌啦数据插件”凭借其独特的优势,在众多竞品中脱颖而出,成…

基于SpringBoot的房屋交易平台的设计与实现

TOC springboot235基于SpringBoot的房屋交易平台的设计与实现 第1章 绪论 1.1 研究背景 互联网概念的产生到如今的蓬勃发展,用了短短的几十年时间就风靡全球,使得全球各个行业都进行了互联网的改造升级,标志着互联网浪潮的来临。在这个新…

基于Web的农产品直卖平台的设计与实现

TOC springboot266基于Web的农产品直卖平台的设计与实现 绪论 1.1 选题背景 当人们发现随着生产规模的不断扩大,人为计算方面才是一个巨大的短板,所以发明了各种计算设备,从结绳记事,到算筹,以及算盘,到…

电路板元器件识别指南:电子技术核心知识

电子设备无处不在,从我们日常使用的手机到复杂的医疗设备,背后都有一个共同的组件——电路板。电路板上的各种元器件是电子设备功能实现的基础。在此,道合顺帮助读者们理解电路板上不同元器件的作用与识别方法,从而更好地维护和使…

Spring boot logback日志框架加载初始化源码

##LoggingApplicationListener监听 Overridepublic void onApplicationEvent(ApplicationEvent event) {if (event instanceof ApplicationStartingEvent) {onApplicationStartingEvent((ApplicationStartingEvent) event);}else if (event instanceof ApplicationEnvironment…

2024最新金三银四必问面试题大全

我花了三天时间,整理了100道最经典的常见测试面试题(附答案)!完整版文档见文末! 1、所做项目的情况,主要做什么类型的测试? 2、你在测试中发现了一个bug,但是开发经理认为这不是一个…