CLIP图生文

news2024/11/24 17:16:43

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 Image

model, _, 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 os

root_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.coloradmin.cn/o/1626378.html

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

相关文章

关于豆瓣电影数据抓取以及可视化

首先我们可以先了解以下网络爬虫的定义&#xff1a; 爬虫是一种按照一定的规则&#xff0c;自动地抓取万维网信息的程序或者脚本。它可以在互联网上自动抓取网页内容&#xff0c;将这些信息存储起来。爬虫可以抓取网站的所有网页&#xff0c;从而获取对于我们有价值的信…

跨界客户服务:拓展服务边界,创造更多价值

在日益激烈的市场竞争中&#xff0c;企业如何突破传统服务模式的限制&#xff0c;创造更多价值&#xff0c;已成为业界关注的焦点。跨界客户服务作为一种新兴服务模式&#xff0c;正逐渐受到企业的青睐。通过跨界合作&#xff0c;企业可以拓展服务边界&#xff0c;提供更加多元…

数据治理和数据管理 傻傻分不清楚?

互联网时代&#xff0c;数据&#xff0c;这一无形资产&#xff0c;已成为现代企业的核心竞争力。如何高效地管理和利用数据&#xff0c;成为企业关注的焦点。在这个过程中&#xff0c;数据治理&#xff08;Data Governance&#xff09;和数据管理&#xff08;Data Management&a…

[SpringBoot] JWT令牌——登录校验

JWT&#xff08;JSON Web Token&#xff09;是一种用于在网络应用之间传递信息的开放标准&#xff08;RFC 7519&#xff09;。它由三部分组成&#xff1a;头部&#xff08;header&#xff09;、载荷&#xff08;payload&#xff09;和签名&#xff08;signature&#xff09;。J…

android 去除桌面谷歌搜索框

注&#xff1a; 本文只是博主学习记录分享&#xff0c;仅供参考。如有错误请指出来&#xff0c;谢谢&#xff01; 一、问题描述 去除 android 系统桌面谷歌搜索栏&#xff0c;前后对比如下图&#xff1a; 系统版本&#xff1a;android12 平台&#xff1a;rk3568 二、…

DNS域名系统 | unbound

目录 DNS 命名空间和域名结构 DNS的命名空间的结构: 域名服务器的分类&#xff1a; ​编辑 DNS 资源记录 常见type: DNS报文结构 请求报文&#xff1a; 响应报文&#xff1a; 解析类型 递归查询 迭代查询 DNS劫持 DNS劫持方法&#xff1a; 防御措施 DNS服务部署…

【Java EE】 文件IO的使用以及流操作

˃͈꒵˂͈꒱ write in front ꒰˃͈꒵˂͈꒱ ʕ̯•͡˔•̯᷅ʔ大家好&#xff0c;我是xiaoxie.希望你看完之后,有不足之处请多多谅解&#xff0c;让我们一起共同进步૮₍❀ᴗ͈ . ᴗ͈ აxiaoxieʕ̯•͡˔•̯᷅ʔ—CSDN博客 本文由xiaoxieʕ̯•͡˔•̯᷅ʔ 原创 CSDN 如…

C++:const成员和取地址操作符

目录 一、const成员 二、取地址及const取地址操作符重载 一、const成员 将const修饰的“成员函数”称之为const成员函数&#xff0c;const修饰类成员函数&#xff0c;实际修饰该成员函数 隐含的this指针&#xff0c;表明在该成员函数中不能对类的任何成员进行修改。 注&…

【JAVA】PO、VO、DAO、BO、DTO、POJO你分得清吗?

在Java开发中&#xff0c;PO、VO、DAO、BO、DTO、POJO这些词汇是比较常见的&#xff0c;每个术语都有其特定的含义和用途。下面是它们的具体区别&#xff1a; 名称简要概况用途和特定PO (Persistence Object) 持…

PDF 书签制作与调整 从可编辑、不可编辑 PDF 文档创建书签的方法

本文是对以前发表的旧文拆分&#xff0c;因为原文主题太多&#xff0c;过长&#xff0c;特另起一篇分述。 第一部分 由可编辑 PDF 文档创建书签 方法 1. Adobe Acrobat Pro autobookmark AutoBookmark 是一个可用于 Adobe Acrobat 自动生成书签的插件。 官方下载地址&…

手拉手安装Kafka2.13发送和消费消息

Kafka是一种高吞吐量的分布式发布订阅消息系统&#xff0c;它可以处理消费者在网站中的所有动作流数据。 Kafka启动方式有Zookeeper和Kraft&#xff0c;两种方式只能选择其中一种启动&#xff0c;不能同时使用。 Kafka下载https://downloads.apache.org/kafka/3.7.0/kafka_2.…

静态链接lib库使用

lib库实际上分为两种&#xff0c;一种是静态链接lib库或者叫做静态lib库&#xff0c;另一种叫做动态链接库dll库的lib导入库或称为lib导入库。这两个库是不一样的&#xff0c;很多人都分不清楚&#xff0c;很容易混淆。 第一种是静态lib&#xff0c;包含了所有的代码实现的&am…

回归预测 | Matlab实现SSA-ESN基于麻雀搜索算法优化回声状态网络的多输入单输出回归预测

回归预测 | Matlab实现SSA-ESN基于麻雀搜索算法优化回声状态网络的多输入单输出回归预测 目录 回归预测 | Matlab实现SSA-ESN基于麻雀搜索算法优化回声状态网络的多输入单输出回归预测预测效果基本介绍程序设计参考资料 预测效果 基本介绍 1.Matlab实现SSA-ESN基于麻雀搜索算法…

2024/4/26 C++day4

1在Complex类的基础上&#xff0c;完成^&#xff0c;>>&#xff0c;<<,~运算符的重载 #include <iostream> using namespace std; class Complex {int rel; //实部int vir; //虚部 public:Complex(){}Complex(int rel,int vir):rel(rel),vir(vir){}vo…

小程序中如何快速给分类添加商品

​快速在分类下面上传商品&#xff0c;并且能够设置商品顺序&#xff0c;关系到运营效率的高低。下面就具体介绍如何快速在某个分类下面设置商品。 一、在商品管理处&#xff0c;查询某个分类下面的商品。 进入小程序管理员后台->商品管理&#xff0c;点击分类输入框&…

【汇编语言】直接定址表

【汇编语言】直接定址表 文章目录 【汇编语言】直接定址表前言一、移位指令移位指令过程逻辑移位指令shl 和 shr 二、操作显存数据显示的原理显示缓冲区的结构显示信息的一种“直接”方式 三、描述内存单元的标号关于标号去了冒号的数据标号数据标号同时描述内存地址和单元长度…

css:echarts渐变色转换为css渐变色

通过一个下拉框来选择渐变类型&#xff0c;为了简化&#xff0c;我设置了三种&#xff1a;水平方向的渐变、垂直方向的渐变和径向渐变用&#xff0c;表格来配置echarts渐变色的百分比位置和颜色。 config是表格里的数据格式如下&#xff1a; offset是百分比位置&#xff0c;co…

2024北京车展来了!自主品牌成“流量担当”!

时隔四年&#xff0c;2024北京国际车展重磅回归&#xff01; 4月25日&#xff0c;2024&#xff08;第十八届&#xff09;北京国际汽车展览会&#xff08;以下简称“北京车展”&#xff09;正式开幕&#xff0c;本次车展以“新时代 新汽车”为主题。作为今年国内首个国际A级车展…

Centos/linux根目录扩容、分区、挂载。LVM、物理卷、逻辑卷

前言    &#xff08;空格&#xff09; &#xff1a;分区挂载和扩容是两码事 每个Linux使用者在安装Linux时都会遇到这样的困境&#xff1a;在为系统分区时&#xff0c;如何精确评估和分配各个硬盘分区的容量&#xff0c;因为系统管理员不但要考虑到当前某个分区需要的容量&a…

使用 Godot 游戏引擎为 Apple 的 visionOS 创建游戏和应用的平台

借助GodotVision ,您可以使用Godot 游戏引擎为 Apple VisionOS创建游戏和应用程序。 保卫牛城堡,一款使用 GodotVision 制作的 VisionOS 游戏 GodotVision 运行一个控制本机RealityKit 视图的无头 Godot实例。粗略地说:Godot 是后端,