Carregando o protótipo Florence-2 e uma imagem de modelo
Depois instalar e importar as bibliotecas necessárias (conforme demonstrado no notebook Colab que acompanha), começamos carregando o protótipo Florence-2, o processador e a imagem de ingresso de uma câmera:
#Load model:
model_id = ‘microsoft/Florence-2-large’
model = AutoModelForCausalLM.from_pretrained(model_id, trust_remote_code=True, torch_dtype='auto').eval().cuda()
processor = AutoProcessor.from_pretrained(model_id, trust_remote_code=True)#Load image:
image = Image.open(img_path)
Funções Auxiliares
Neste tutorial, utilizaremos diversas funções auxiliares. O mais importante é o run_example
função meão, que gera uma resposta do protótipo Florence-2.
O run_example
A função combina o prompt de tarefa com qualquer ingresso de texto suplementar (se fornecida) em um único prompt. Usando o processor
ele gera embeddings de texto e imagem que servem uma vez que entradas para o protótipo. A magia acontece durante o model.generate
lanço, onde a resposta do protótipo é gerada. Cá está uma estudo de alguns parâmetros principais:
- max_new_tokens=1024: define o comprimento sumo da saída, permitindo respostas detalhadas.
- do_sample=Falso: Garante uma resposta determinística.
- num_beams=3: implementa a pesquisa de lio com os 3 tokens mais prováveis em cada lanço, explorando múltiplas sequências potenciais para encontrar o melhor resultado universal.
- early_stopping=Falso: Garante que a pesquisa de lio continue até que todos os feixes atinjam o comprimento sumo ou um token de término de sequência seja gerado.
Por último, a saída do protótipo é decodificada e pós-processada com processor.batch_decode
e processor.post_process_generation
para produzir a resposta de texto final, que é retornada pelo run_example
função.
def run_example(image, task_prompt, text_input=''):prompt = task_prompt + text_input
inputs = processor(text=prompt, images=image, return_tensors=”pt”).to(‘cuda’, torch.float16)
generated_ids = model.generate(
input_ids=inputs[“input_ids”].cuda(),
pixel_values=inputs[“pixel_values”].cuda(),
max_new_tokens=1024,
do_sample=False,
num_beams=3,
early_stopping=False,
)
generated_text = processor.batch_decode(generated_ids, skip_special_tokens=False)[0]
parsed_answer = processor.post_process_generation(
generated_text,
task=task_prompt,
image_size=(image.width, image.height)
)
return parsed_answer
Outrossim, utilizamos funções auxiliares para visualizar os resultados (draw_bbox
,draw_ocr_bboxes
e draw_polygon
) e mourejar com a conversão entre formatos de caixas delimitadoras (convert_bbox_to_florence-2
e convert_florence-2_to_bbox
). Eles podem ser explorados no caderno Colab dentro.
Florence-2 pode realizar uma variedade de tarefas visuais. Vamos explorar alguns de seus recursos, começando pela legenda de imagens.
1. Tarefas relacionadas à geração de legendas:
1.1 Gerar legendas
Florence-2 pode gerar legendas de imagens em vários níveis de pormenor, usando o '
, '
ou '
prompts de tarefas.
print (run_example(image, task_prompt=''))
# Output: 'A black camera sitting on top of a wooden table.'print (run_example(image, task_prompt=''))
# Output: 'The image shows a black Kodak V35 35mm film camera sitting on top of a wooden table with a blurred background.'
print (run_example(image, task_prompt=''))
# Output: 'The image is a close-up of a Kodak VR35 do dedo camera. The camera is black in color and has the Kodak logo on the top left corner. The body of the camera is made of wood and has a textured grip for easy handling. The lens is in the center of the body and is surrounded by a gold-colored ring. On the top right corner, there is a small LCD screen and a flash. The background is blurred, Sua visita nos ajuda a continuar oferecendo o melhor para você! it appears to be a wooded area with trees and greenery.'
O protótipo descreve com precisão a imagem e seu entorno. Ele ainda identifica a marca e o protótipo da câmera, demonstrando sua capacidade de OCR. No entanto, no '
tarefa existem pequenas inconsistências, o que é esperado de um protótipo zero-shot.
1.2 Gerar legenda para uma determinada caixa delimitadora
Florence-2 pode gerar legendas para regiões específicas de uma imagem definidas por caixas delimitadoras. Para isso, é necessária a localização da caixa delimitadora uma vez que ingresso. Você pode extrair a categoria com '
ou uma descrição com '
.
Para sua conveniência, adicionei um widget ao notebook Colab que permite traçar uma caixa delimitadora na imagem e codificar para convertê-la para o formato Florence-2.
task_prompt = ''
box_str = ''
results = run_example(image, task_prompt, text_input=box_str)
# Output: 'camera lens'
task_prompt = ''
box_str = ''
results = run_example(image, task_prompt, text_input=box_str)
# Output: 'camera'
Neste caso, o '
identificou a lente, enquanto o '
era menos específico. No entanto, esse desempenho pode variar com imagens diferentes.
2. Tarefas relacionadas à detecção de objetos:
2.1 Gerar caixas delimitadoras e texto para objetos
Florence-2 pode identificar regiões densamente compactadas na imagem e fornecer as coordenadas da caixa delimitadora e seus rótulos ou legendas relacionadas. Para extrair caixas delimitadoras com rótulos, use o ’
prompt de tarefa:
Sua visita nos ajuda a continuar oferecendo o melhor para você! bp ru bb bk">results = run_example(image, task_prompt='')
draw_bbox(image, results[''])
Para extrair caixas delimitadoras com legendas, use '
prompt de tarefa:
Sua visita nos ajuda a continuar oferecendo o melhor para você! qw b bg rw rx l ry rz">task_prompt results = run_example(image, task_prompt= '')
draw_bbox(image, results[''])
2.2 Detecção de objetos aterrados em texto
Florence-2 também pode realizar detecção de objetos baseada em texto. Ao fornecer nomes ou descrições de objetos específicos uma vez que ingresso, Florence-2 detecta caixas delimitadoras em torno dos objetos especificados.
task_prompt = ''
results = run_example(image,task_prompt, text_input=”lens. camera. table. logo. flash.”)
draw_bbox(image, results[''])
3. Tarefas relacionadas à segmentação:
Florence-2 também pode gerar polígonos de segmentação baseados em texto ('
) ou por caixas delimitadoras ('
):
results = run_example(image, task_prompt='', text_input=”camera”)
draw_polygons(image, results[task_prompt])
results = run_example(image, task_prompt='', text_input="")
draw_polygons(output_image, results[''])
4. Tarefas relacionadas ao OCR:
Florence-2 demonstra fortes capacidades de OCR. Ele pode extrair texto de uma imagem com o '
prompt de tarefa e extraia o texto e sua localização com '
:
results = run_example(image,task_prompt)
draw_ocr_bboxes(image, results[''])
Florence-2 é um protótipo de linguagem de visão (VLM) versátil, capaz de mourejar com múltiplas tarefas de visão em um único protótipo. Seus recursos de disparo zero são impressionantes em diversas tarefas, uma vez que legendagem de imagens, detecção de objetos, segmentação e OCR. Embora o Florence-2 tenha um bom desempenho repentino, ajustes adicionais podem adequar ainda mais o protótipo a novas tarefas ou melhorar seu desempenho em conjuntos de dados exclusivos e personalizados.
Tags:
Crédito: Nascente Original