Blip 2
Introdução
Este caderno foi traduzido automaticamente para torná-lo acessível a mais pessoas, por favor me avise se você vir algum erro de digitação..
Blip2 é uma inteligência artificial capaz de pegar uma imagem ou vídeo como entrada e ter uma conversa e responder perguntas ou fornecer contexto ao que essa entrada mostra de uma maneira muito precisa 🤯
Instalação
A fim de instalar esta ferramenta é melhor criar um novo ambiente anaconda.
!$ conda create -n blip2 python=3.9
Agora vamos para o meio ambiente
!$ conda create -n blip2 python=3.9!$ conda activate blip2
Instalamos todos os módulos necessários
!$ conda create -n blip2 python=3.9!$ conda activate blip2!$ conda install pytorch torchvision torchaudio pytorch-cuda=11.7 -c pytorch -c nvidia
!$ conda create -n blip2 python=3.9!$ conda activate blip2!$ conda install pytorch torchvision torchaudio pytorch-cuda=11.7 -c pytorch -c nvidia!$ conda install -c anaconda pillow
!$ conda create -n blip2 python=3.9!$ conda activate blip2!$ conda install pytorch torchvision torchaudio pytorch-cuda=11.7 -c pytorch -c nvidia!$ conda install -c anaconda pillow!$ conda install -y -c anaconda requests
!$ conda create -n blip2 python=3.9!$ conda activate blip2!$ conda install pytorch torchvision torchaudio pytorch-cuda=11.7 -c pytorch -c nvidia!$ conda install -c anaconda pillow!$ conda install -y -c anaconda requests!$ conda install -y -c anaconda jupyter
Finalmente instalamos o blip2
!$ conda create -n blip2 python=3.9!$ conda activate blip2!$ conda install pytorch torchvision torchaudio pytorch-cuda=11.7 -c pytorch -c nvidia!$ conda install -c anaconda pillow!$ conda install -y -c anaconda requests!$ conda install -y -c anaconda jupyter!$ pip install salesforce-lavis
Uso
Carregamos as bibliotecas necessárias
!$ conda create -n blip2 python=3.9!$ conda activate blip2!$ conda install pytorch torchvision torchaudio pytorch-cuda=11.7 -c pytorch -c nvidia!$ conda install -c anaconda pillow!$ conda install -y -c anaconda requests!$ conda install -y -c anaconda jupyter!$ pip install salesforce-lavisimport torchfrom PIL import Imageimport requestsfrom lavis.models import load_model_and_preprocess
Nós carregamos uma imagem de exemplo
img_url = 'https://upload.wikimedia.org/wikipedia/commons/thumb/4/4d/12_-_The_Mystical_King_Cobra_and_Coffee_Forests.jpg/800px-12_-_The_Mystical_King_Cobra_and_Coffee_Forests.jpg'
raw_image = Image.open(requests.get(img_url, stream=True).raw).convert('RGB')
display(raw_image.resize((500, 500)))
Configuramos a GPU, se houver
!$ conda create -n blip2 python=3.9!$ conda activate blip2!$ conda install pytorch torchvision torchaudio pytorch-cuda=11.7 -c pytorch -c nvidia!$ conda install -c anaconda pillow!$ conda install -y -c anaconda requests!$ conda install -y -c anaconda jupyter!$ pip install salesforce-lavisimport torchfrom PIL import Imageimport requestsfrom lavis.models import load_model_and_preprocessimg_url = 'https://upload.wikimedia.org/wikipedia/commons/thumb/4/4d/12_-_The_Mystical_King_Cobra_and_Coffee_Forests.jpg/800px-12_-_The_Mystical_King_Cobra_and_Coffee_Forests.jpg'raw_image = Image.open(requests.get(img_url, stream=True).raw).convert('RGB')display(raw_image.resize((500, 500)))device = torch.device("cuda" if torch.cuda.is_available() else 'cpu')device
device(type='cuda')
Nós designamos um modelo. No meu caso, tenho um computador com 32 GB de RAM e uma GPU 3060 com 12 GB de VRAM que não posso utilizar todos eles, por isso coloquei ao lado de um comentário ok
com os modelos que pude utilizar, e aqueles que não pude utilizar, o erro que me deu. Se você tem um computador com a mesma RAM e VRAM, você já sabe quais você pode utilizar, se não tiver que tentar
# name = "blip2_opt"; model_type = "pretrain_opt2.7b" # ok
# name = "blip2_opt"; model_type = "caption_coco_opt2.7b" # FAIL VRAM
# name = "blip2_opt"; model_type = "pretrain_opt6.7b" # FAIL RAM
# name = "blip2_opt"; model_type = "caption_coco_opt6.7b" # FAIL RAM
# name = "blip2"; model_type = "pretrain" # FAIL type error
# name = "blip2"; model_type = "coco" # ok
name = "blip2_t5"; model_type = "pretrain_flant5xl" # ok
# name = "blip2_t5"; model_type = "caption_coco_flant5xl" # FAIL VRAM
# name = "blip2_t5"; model_type = "pretrain_flant5xxl" # FAIL
model, vis_processors, _ = load_model_and_preprocess(
name=name, model_type=model_type, is_eval=True, device=device
)
vis_processors.keys()
Nós preparamos a imagem para inserção no modelo.
# name = "blip2_opt"; model_type = "pretrain_opt2.7b" # ok# name = "blip2_opt"; model_type = "caption_coco_opt2.7b" # FAIL VRAM# name = "blip2_opt"; model_type = "pretrain_opt6.7b" # FAIL RAM# name = "blip2_opt"; model_type = "caption_coco_opt6.7b" # FAIL RAM# name = "blip2"; model_type = "pretrain" # FAIL type error# name = "blip2"; model_type = "coco" # okname = "blip2_t5"; model_type = "pretrain_flant5xl" # ok# name = "blip2_t5"; model_type = "caption_coco_flant5xl" # FAIL VRAM# name = "blip2_t5"; model_type = "pretrain_flant5xxl" # FAILmodel, vis_processors, _ = load_model_and_preprocess(name=name, model_type=model_type, is_eval=True, device=device)vis_processors.keys()image = vis_processors["eval"](raw_image).unsqueeze(0).to(device)
Analisamos a imagem sem fazer nenhuma pergunta
# name = "blip2_opt"; model_type = "pretrain_opt2.7b" # ok# name = "blip2_opt"; model_type = "caption_coco_opt2.7b" # FAIL VRAM# name = "blip2_opt"; model_type = "pretrain_opt6.7b" # FAIL RAM# name = "blip2_opt"; model_type = "caption_coco_opt6.7b" # FAIL RAM# name = "blip2"; model_type = "pretrain" # FAIL type error# name = "blip2"; model_type = "coco" # okname = "blip2_t5"; model_type = "pretrain_flant5xl" # ok# name = "blip2_t5"; model_type = "caption_coco_flant5xl" # FAIL VRAM# name = "blip2_t5"; model_type = "pretrain_flant5xxl" # FAILmodel, vis_processors, _ = load_model_and_preprocess(name=name, model_type=model_type, is_eval=True, device=device)vis_processors.keys()image = vis_processors["eval"](raw_image).unsqueeze(0).to(device)model.generate({"image": image})
Loading checkpoint shards: 0%| | 0/2 [00:00<?, ?it/s]['a black and white snake']
Analisamos a imagem perguntando
prompt = None
prompt = Nonedef prepare_prompt(prompt, question):if prompt is None:prompt = question + " Answer:"else:prompt = prompt + " " + question + " Answer:"return prompt
prompt = Nonedef prepare_prompt(prompt, question):if prompt is None:prompt = question + " Answer:"else:prompt = prompt + " " + question + " Answer:"return promptdef get_answer(prompt, question, model):prompt = prepare_prompt(prompt, question)answer = model.generate({"image": image,"prompt": prompt})answer = answer[0]prompt = prompt + " " + answer + "."return prompt, answer
prompt = Nonedef prepare_prompt(prompt, question):if prompt is None:prompt = question + " Answer:"else:prompt = prompt + " " + question + " Answer:"return promptdef get_answer(prompt, question, model):prompt = prepare_prompt(prompt, question)answer = model.generate({"image": image,"prompt": prompt})answer = answer[0]prompt = prompt + " " + answer + "."return prompt, answerquestion = "What's in the picture?"prompt, answer = get_answer(prompt, question, model)print(f"Question: {question}")print(f"Answer: {answer}")
Question: What's in the picture?Answer: a snake
question = "What kind of snake?"prompt, answer = get_answer(prompt, question, model)print(f"Question: {question}")print(f"Answer: {answer}")
Question: What kind of snake?Answer: cobra
question = "Is it poisonous?"prompt, answer = get_answer(prompt, question, model)print(f"Question: {question}")print(f"Answer: {answer}")
Question: Is it poisonous?Answer: yes
question = "If it bites me, can I die?"prompt, answer = get_answer(prompt, question, model)print(f"Question: {question}")print(f"Answer: {answer}")
Question: If it bites me, can I die?Answer: yes