CLIP图生文

CLIP模型本身并不是图生文的,CLIP模型用来做图片和文本描述的匹配。
但它可以与其他技术结合使用来实现这一点,以下是两种常见的方法:

  1. CLIP作为文本灵感检索系统:

这种方法利用了 CLIP 在寻找图像和文本之间相似表示方面的优势。

步骤:
1.准备图像: 准备好要为其生成文本的图像。
2.使用 CLIP 对图像进行编码:使用 CLIP 的图像编码器部分生成图像的矢量表示。
3.搜索相似的文本嵌入: 搜索文本嵌入数据库(预先训练的文本编码)以查找最接近图像编码的文本嵌入。
4.使用检索到的文本获取灵感: 具有最接近嵌入的检索到的文本可以用作您自己的创意文本生成的起点,您可以使用此文本作为故事、诗歌或任何其他创意写作任务的灵感。

  1. CLIP 引导文本生成与附加模型:

这种方法将 CLIP 与单独的文本生成模型相结合,以实现更多控制:

需要:
CLIP模型:对图像进行编码并理解其内容。
文本生成模型:这可以是像 GPT-3 这样的预训练模型,也可以是您根据自己的文本数据训练的模型。
步骤:
1.使用 CLIP 对图像进行编码:与之前的方法类似,使用 CLIP 的图像编码器生成图像的矢量表示。
2.使用图像编码作为提示: 将图像编码与文本提示(可选)一起提供给文本生成模型。
3.生成文本:文本生成模型将使用提示和图像编码来创建与图像相关并遵循提示指导(如果提供)的新文本输出。

open_clip的generate函数已经实现了这一功能。
这里用COCO图片测试。

首先安装open_clip.

pip install open_clip_torch
import open_clip
import torch
from PIL import Imagemodel, _, transform = open_clip.create_model_and_transforms(model_name="coca_ViT-L-14",pretrained="mscoco_finetuned_laion2B-s13B-b90k"
)im = Image.open("cat.jpg").convert("RGB")
im = transform(im).unsqueeze(0)with torch.no_grad(), torch.cuda.amp.autocast():generated = model.generate(im)print(open_clip.decode(generated[0]).split("<end_of_text>")[0].replace("<start_of_text>", ""))

这时候大概率会碰到如下error:

RuntimeError: Boolean value of Tensor with more than one value is ambiguous

这是transformer的问题,参见#860,
一般会显示出现在coca_model.py, 点进去,这样修改即可。
在这里插入图片描述
看下测试结果:

在这里插入图片描述

coca_ViT-L-14的输出:

a white and brown dog with its tongue hanging out and a bowl of food in front of a person .

coca_ViT-B-32的输出:

a brown and white dog sitting on top of a bathroom floor .

如果你想finetune, 那么数据量一定要大。
准备一个csv文件,两列,一列是filepath, 一列是文本描述。
用COCO数据集的话csv可以自动生成。

当然首先要pip install clip_benchmark.

from clip_benchmark.datasets.builder import build_dataset
import pandas as pd
import osroot_path = "path/to/data/dir" # set this to smth meaningful
ds = build_dataset("mscoco_captions", root=root_path, split="train") # this downloads the dataset if it is not there already
coco = ds.coco
imgs = coco.loadImgs(coco.getImgIds())
future_df = {"filepath":[], "title":[]}
for img in imgs:caps = coco.imgToAnns[img["id"]]for cap in caps:future_df["filepath"].append(img["file_name"])future_df["title"].append(cap["caption"])
pd.DataFrame.from_dict(future_df).to_csv(os.path.join(root_path, "train2014.csv"), index=False, sep="\t"
)

用csv文件finetune, 数据集没有那么大的话可换成小一点的coca_ViT-B-32.

python -m training.main \--dataset-type "csv" \--train-data "path/to/data/dir/train2014.csv" \--warmup 1000 \--batch-size 128 \--lr 1e-5 \--wd 0.1 \--epochs 1 \--workers 3 \--model "coca_ViT-L-14" \--report-to "wandb" \--coca-contrastive-loss-weight 0 \--coca-caption-loss-weight 1 \--log-every-n-steps 100

还有其他方法也可由图生文,比如clip_interrogator。有web UI界面。

和上面同样的图片,生成结果如下:

there is a dog that is standing next to a person, unsplash photography, bowl filled with food, movie still of a snarling, as an offering to zeus, template layout, someone in home sits in bed, bite, stainless steel, short spout, chloe price

还可以参考CapDec,实现不同风格的text.
CLIP-Caption-Reward,用不同的reward训练生成Text.

想用中文版的CLIP看这里

一些好的CLIP应用可以参考Awesome-CLIP

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

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

相关文章

2015-2023年上市公司商道融绿ESG评级数据

2015-2023年上市公司商道融绿ESG评级数据 1、时间&#xff1a;2015-2023年 2、来源&#xff1a;整理自WIND 3、指标&#xff1a;代码、名称、商道融绿ESG评级 4、范围&#xff1a;上市公司 5、指标解释&#xff1a; 商道融绿ESG评级体系是一种全新的评级体系&#xff0c;…

2024免费专为Mac用户设计的清理和优化工具CleanMyMac X

CleanMyMac X是一款专为Mac用户设计的清理和优化工具。以下是对CleanMyMac X的详细介绍&#xff1a; 一、主要功能 系统清理&#xff1a;CleanMyMac X能够智能扫描Mac的磁盘空间&#xff0c;识别并清理各种垃圾文件&#xff0c;这些垃圾文件包括重复文件、无用的语言安装包、i…

MKcms漏洞合集

MKCMS5.0漏洞合集 简介及安装 MKCMS5.0是一款基于PHPMYSQL开发制作的专业全自动采集电影网站源码。程序不需授权上传直接使用,自动更新电影,无人值守! 完整的会员影视中心 后台可对接卡盟 可以设置收费观看模式。 下载地址&#xff1a;链接&#xff1a;https://pan.baidu.com…

HTTP基础知识

1. HTTP常见的状态码有哪些&#xff1f; 常见状态码&#xff1a; 200&#xff1a;服务器已成功处理了请求。 通常&#xff0c;这表示服务器提供了请求的网页。 301 &#xff1a; (永久移动) 请求的网页已永久移动到新位置。 服务器返回此响应(对 GET 或 HEAD 请求的响应)时&a…

【kettle001】访问国产达梦数据库并处理数据至execl文件

一直以来想写下基于kettle的系列文章&#xff0c;作为较火的数据ETL工具&#xff0c;也是日常项目开发中常用的一款工具&#xff0c;最近刚好挤时间梳理、总结下这块儿的知识体系。 熟悉、梳理、总结下达梦&#xff08;DM&#xff09;关系型数据库相关知识体系 1.环境准备 搭建…

iOS——NSCache

什么是NSCache NSCache是Foundation框架中的一个类&#xff0c;用于在iOS和macOS应用程序中进行临时性的内存缓存。它提供了一种轻量级的缓存机制&#xff0c;可以用于存储临时性的数据&#xff0c;例如图片、对象等。NSCache的主要特点和用法包括&#xff1a; 临时性缓存&…

谷歌搜索量在哪里查询?

如果您想查询的是谷歌搜索的流量数据&#xff0c;比如某个关键词的搜索频率或趋势&#xff0c;Google Trends 是一个很好的工具&#xff0c;它可以让您看到不同时间段内关键词的搜索流行度&#xff0c;也可以比较几个关键词的搜索量&#xff0c;您可以直接访问 Google Trends 网…

Oracle delete删除数据是否为逻辑删除、新插入数据占用的数据块位置实验

假设一&#xff1a;数据库delete删除为直接删除 假设二&#xff1a;数据库delete删除为逻辑删除&#xff0c;在数据块标记出来&#xff0c;但是实际并没有删除。 方式一&#xff1a;通过dump数据块的方式来实现 我们先用小数据量&#xff0c;通过dump数据块的方式来实现 -- 数…

单链表专题实验

答案&#xff1a; #define _CRT_SECURE_NO_WARNINGS 1 #include<stdio.h> #include<assert.h> #include<stdlib.h> typedef int SLTDataType; typedef struct SListNode {SLTDataType data;struct SListNode* next; }SLTNode; void PrintSLT(SLTNode* phead…

多输入多输出 | Matlab实现WOA-LSSVM鲸鱼算法优化最小二乘支持向量机多输入多输出预测

多输入多输出 | Matlab实现WOA-LSSVM鲸鱼算法优化最小二乘支持向量机多输入多输出预测 目录 多输入多输出 | Matlab实现WOA-LSSVM鲸鱼算法优化最小二乘支持向量机多输入多输出预测预测效果基本介绍程序设计往期精彩参考资料 预测效果 基本介绍 Matlab实现WOA-LSSVM鲸鱼算法优化…

【QT】ROS2 Humble联合使用QT教程

【QT】ROS2 Humble联合使用QT教程 文章目录 【QT】ROS2 Humble联合使用QT教程1. 安装ROSProjectManager插件2. 创建ROS项目3.一个快速体验的demoReference 环境的具体信息如下&#xff1a; ubunt 22.04ros2 humbleQt Creator 13.0.0ROS ProjectManager 13.0.0 本文建立在已经…

20.Nacos集群搭建

模拟Nacos三个节点&#xff0c;同一个ip,启动三个不同的端口&#xff1a; 节点 nacos1, 端口&#xff1a;8845 节点 nacos2, 端口&#xff1a;8846 节点 nacos3, 端口&#xff1a;8847 1.搭建数据库&#xff0c;初始化数据库表结构 这里我们以单点的数据库为例 首先新建一…