背景:
BLIP:
DA-CLIP需要的目标:
为了在混合的退化数据集上训练 DA-CLIP,作者使用引导式视觉语言框架 BLIP 为所有 HQ 图像生成描述。
从HQ图像生成的描述是准确的,不传递退化信息。 然后,我们可以直接将这些干净的标题、LQ 图像和相应的退化类型结合起来,构建图像-文本-退化类型对。
BLIP开源deom
上BLIP的GitHub开源,readme.md有colab的简易测试代码,直接点开。hugging face的 Web demo 无法使用。
链接:https://colab.research.google.com/github/salesforce/BLIP/blob/main/demo.ipynb
代码
# install requirements
import sys
if 'google.colab' in sys.modules:
print('Running in Colab.')
!pip3 install transformers==4.15.0 timm==0.4.12 fairscale==0.4.4
!git clone https://github.com/salesforce/BLIP
%cd BLIP
加载测试图。 并进行预处理
from PIL import Image
import requests
import torch
from torchvision import transforms
from torchvision.transforms.functional import InterpolationMode
device = torch.device('cuda' if torch.cuda.is_available() else 'cpu')
def load_demo_image(image_size,device):
img_url = 'https://storage.googleapis.com/sfr-vision-language-research/BLIP/demo.jpg'
raw_image = Image.open(requests.get(img_url, stream=True).raw).convert('RGB')
w,h = raw_image.size
display(raw_image.resize((w//5,h//5)))
transform = transforms.Compose([
transforms.Resize((image_size,image_size),interpolation=InterpolationMode.BICUBIC),
transforms.ToTensor(),
transforms.Normalize((0.48145466, 0.4578275, 0.40821073), (0.26862954, 0.26130258, 0.27577711))
])
image = transform(raw_image).unsqueeze(0).to(device)
return image
加载模型,进行生成image caption
image_size = 384
image = load_demo_image(image_size=image_size, device=device)
model_url = 'https://storage.googleapis.com/sfr-vision-language-research/BLIP/models/model_base_capfilt_large.pth'
model = blip_decoder(pretrained=model_url, image_size=image_size, vit='base')
model.eval()
model = model.to(device)
with torch.no_grad():
# beam search
caption = model.generate(image, sample=False, num_beams=3, max_length=20, min_length=5)
# nucleus sampling
# caption = model.generate(image, sample=True, top_p=0.9, max_length=20, min_length=5)
print('caption: '+caption[0])
model.generate
是在使用 BLIP(Bootstrapped Language Image Pretraining)模型进行图像描述(Image Captioning)任务时的一个方法。这个方法接收多个参数来控制生成图像描述的过程。下面是对您提供的代码中 model.generate
方法参数的解释:
-
image
: 这是要生成描述的输入图像。它应该是一个已经加载并转移到指定设备(如GPU)的张量。 -
sample
: 这是一个布尔值,用于选择生成策略。当sample=False
时,使用贪婪解码(beam search),即每一步都选择最可能的下一个词。当sample=True
时,使用采样方法,如核采样(nucleus sampling)。 -
num_beams
: 当使用beam search时,这个参数定义了beam的宽度。它影响解码过程中考虑的不同可能性的数量。较大的beam size可能会导致更多样化和流畅的描述,但也会增加计算成本。 -
max_length
: 这个参数设置了生成描述的最大长度(以词为单位)。如果生成的描述在达到最大长度之前结束,它将被截断。 -
min_length
: 这个参数设置了生成描述的最小长度。如果生成的描述在达到最小长度之前结束,解码过程将继续,直到满足最小长度要求
问题
- 问题1:装依赖的时候时间较长,需要下载1个G多的timm依赖
- 问题2:版本报错
修改为transformers==4.16.0。
成功。提示重启会话。全部再次运行。
结果
想要换成我的测试图片。由于读取的imgurl设置成只能读外部链接的图片。了解到图床这种东西。
简单搜了一下聚合图床 - 免费无限图片上传 (superbed.cn)
上传一张测试图
修改imgurl路径,重新运行。
哈哈挺有意思的。
DA-CLIP内有相关py文件
Create dataset:
To generate clean captions with BLIP, we use the clip-interrogator tool. Install it with
pip install clip-interrogator==0.6.0
and run:python ../scripts/generate_captions.pyThen you will get
daclip_train.csv
anddaclip_val.csv
under thedatasets/universal
directory
pip install clip-interrogator==0.6.0
运行../scripts/generate_captions.py
代码解析晚点再写吧。。
标签:CLIP,image,DA,BLIP,device,model,generate,size From: https://blog.csdn.net/m0_60350022/article/details/136918987