Das Florence-2-Modell und ein Beispielbild werden geladen

Nach der Set up und dem Import der erforderlichen Bibliotheken (wie im beigefügten Colab-Notizbuch gezeigt) beginnen wir mit dem Laden des Florence-2-Modells, des Prozessors und des Eingabebilds einer Kamera:

#Load mannequin:
model_id = ‘microsoft/Florence-2-large’
mannequin = 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 picture:
picture = Picture.open(img_path)

Hilfsfunktionen

In diesem Tutorial werden wir mehrere Hilfsfunktionen verwenden. Das Wichtigste ist das run_example Kernfunktion, die eine Antwort aus dem Florence-2-Modell generiert.

Der run_example Die Funktion kombiniert die Aufgabenaufforderung mit allen zusätzlichen Texteingaben (falls vorhanden) in einer einzigen Eingabeaufforderung. Mit der processorgeneriert es Textual content- und Bildeinbettungen, die als Eingaben für das Modell dienen. Die Magie geschieht während des mannequin.generate Schritt, in dem die Antwort des Modells generiert wird. Hier ist eine Aufschlüsselung einiger wichtiger Parameter:

  • max_new_tokens=1024: Legt die maximale Länge der Ausgabe fest und ermöglicht detaillierte Antworten.
  • do_sample=Falsch: Gewährleistet eine deterministische Reaktion.
  • num_beams=3: Implementiert die Strahlsuche mit den drei wahrscheinlichsten Token bei jedem Schritt und untersucht mehrere potenzielle Sequenzen, um die beste Gesamtausgabe zu finden.
  • Early_stopping=False: Stellt sicher, dass die Strahlsuche fortgesetzt wird, bis alle Strahlen die maximale Länge erreichen oder ein Ende-der-Sequenz-Token generiert wird.

Abschließend wird die Ausgabe des Modells dekodiert und mit nachbearbeitet processor.batch_decode Und processor.post_process_generation um die endgültige Textantwort zu erstellen, die von zurückgegeben wird run_example Funktion.

def run_example(picture, task_prompt, text_input=''):

immediate = task_prompt + text_input

inputs = processor(textual content=immediate, photos=picture, return_tensors=”pt”).to(‘cuda’, torch.float16)

generated_ids = mannequin.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,
job=task_prompt,
image_size=(picture.width, picture.top)
)

return parsed_answer

Zusätzlich nutzen wir Hilfsfunktionen zur Visualisierung der Ergebnisse (draw_bbox ,draw_ocr_bboxes Und draw_polygon) und übernimmt die Konvertierung zwischen Begrenzungsrahmenformaten (convert_bbox_to_florence-2 Und convert_florence-2_to_bbox). Diese können im beigefügten Colab-Notizbuch erkundet werden.

Florence-2 kann eine Vielzahl visueller Aufgaben erfüllen. Lassen Sie uns einige seiner Funktionen erkunden, beginnend mit der Bildunterschrift.

1. Aufgaben im Zusammenhang mit der Untertitelgenerierung:

1.1 Untertitel generieren

Florence-2 kann Bildunterschriften mit verschiedenen Detaillierungsebenen erstellen '<CAPTION>' , '<DETAILED_CAPTION>' oder '<MORE_DETAILED_CAPTION>' Aufgabenaufforderungen.

print (run_example(picture, task_prompt='<CAPTION>'))
# Output: 'A black digicam sitting on high of a wood desk.'

print (run_example(picture, task_prompt='<DETAILED_CAPTION>'))
# Output: 'The picture reveals a black Kodak V35 35mm movie digicam sitting on high of a wood desk with a blurred background.'

print (run_example(picture, task_prompt='<MORE_DETAILED_CAPTION>'))
# Output: 'The picture is a close-up of a Kodak VR35 digital digicam. The digicam is black in colour and has the Kodak brand on the highest left nook. The physique of the digicam is manufactured from wooden and has a textured grip for simple dealing with. The lens is within the heart of the physique and is surrounded by a gold-colored ring. On the highest proper nook, there's a small LCD display and a flash. The background is blurred, nevertheless it seems to be a wooded space with timber and greenery.'

Das Modell beschreibt das Bild und seine Umgebung genau. Es identifiziert sogar die Marke und das Modell der Kamera und demonstriert so deren OCR-Fähigkeit. Allerdings in der '<MORE_DETAILED_CAPTION>' Aufgabe gibt es geringfügige Inkonsistenzen, was von einem Zero-Shot-Modell zu erwarten ist.

1.2 Generieren Sie eine Beschriftung für einen bestimmten Begrenzungsrahmen

Florence-2 kann Beschriftungen für bestimmte Bereiche eines Bildes generieren, die durch Begrenzungsrahmen definiert sind. Hierzu wird die Place des Begrenzungsrahmens als Eingabe verwendet. Sie können die Kategorie mit extrahieren '<REGION_TO_CATEGORY>' oder eine Beschreibung mit '<REGION_TO_DESCRIPTION>' .

Zur Vereinfachung habe ich dem Colab-Notizbuch ein Widget hinzugefügt, mit dem Sie einen Begrenzungsrahmen auf dem Bild zeichnen und es mit Code in das Florence-2-Format konvertieren können.

task_prompt = '<REGION_TO_CATEGORY>'
box_str = '<loc_335><loc_412><loc_653><loc_832>'
outcomes = run_example(picture, task_prompt, text_input=box_str)
# Output: 'digicam lens'
task_prompt = '<REGION_TO_DESCRIPTION>'
box_str = '<loc_335><loc_412><loc_653><loc_832>'
outcomes = run_example(picture, task_prompt, text_input=box_str)
# Output: 'digicam'

In diesem Fall ist die '<REGION_TO_CATEGORY>' identifizierte das Objektiv, während die '<REGION_TO_DESCRIPTION>' battle weniger konkret. Diese Leistung kann jedoch je nach Bild variieren.

2. Aufgaben im Zusammenhang mit der Objekterkennung:

2.1 Begrenzungsrahmen und Textual content für Objekte generieren

Florence-2 kann dicht gepackte Bereiche im Bild identifizieren und ihre Begrenzungsrahmenkoordinaten sowie die zugehörigen Beschriftungen oder Beschriftungen bereitstellen. Um Begrenzungsrahmen mit Beschriftungen zu extrahieren, verwenden Sie die ’<OD>’Aufgabenaufforderung:

outcomes = run_example(picture, task_prompt='<OD>')
draw_bbox(picture, outcomes('<OD>'))

Um Begrenzungsrahmen mit Beschriftungen zu extrahieren, verwenden Sie '<DENSE_REGION_CAPTION>' Aufgabenaufforderung:

task_prompt outcomes = run_example(picture, task_prompt= '<DENSE_REGION_CAPTION>')
draw_bbox(picture, outcomes('<DENSE_REGION_CAPTION>'))
Das Bild hyperlinks zeigt die Ergebnisse der Aufgabenaufforderung „“, während das Bild rechts „“ zeigt.

2.2 Erkennung geerdeter Objekte mit Textual content

Florence-2 kann auch eine textbasierte Objekterkennung durchführen. Durch die Bereitstellung spezifischer Objektnamen oder Beschreibungen als Eingabe erkennt Florence-2 Begrenzungsrahmen um die angegebenen Objekte.

task_prompt = '<CAPTION_TO_PHRASE_GROUNDING>'
outcomes = run_example(picture,task_prompt, text_input=”lens. digicam. desk. brand. flash.”)
draw_bbox(picture, outcomes('<CAPTION_TO_PHRASE_GROUNDING>'))
CAPTION_TO_PHRASE_GROUNDING Aufgabe mit der Texteingabe: „lens. Kamera. Tisch. Brand. Blitz.“

3. Segmentierungsbezogene Aufgaben:

Florence-2 kann auch textbasierte Segmentierungspolygone generieren ('<REFERRING_EXPRESSION_SEGMENTATION>') oder durch Begrenzungsrahmen ('<REGION_TO_SEGMENTATION>'):

outcomes = run_example(picture, task_prompt='<REFERRING_EXPRESSION_SEGMENTATION>', text_input=”digicam”)
draw_polygons(picture, outcomes(task_prompt))
outcomes = run_example(picture, task_prompt='<REGION_TO_SEGMENTATION>', text_input="<loc_345><loc_417><loc_648><loc_845>")
draw_polygons(output_image, outcomes('<REGION_TO_SEGMENTATION>'))
Das Bild hyperlinks zeigt die Ergebnisse der Aufgabe REFERRING_EXPRESSION_SEGMENTATION mit dem Textual content „Kamera“ als Eingabe. Das Bild rechts zeigt die REGION_TO_SEGMENTATION-Aufgabe mit einem Begrenzungsrahmen um die als Eingabe bereitgestellte Linse.

4. OCR-bezogene Aufgaben:

Florence-2 weist starke OCR-Fähigkeiten auf. Es kann mit dem Textual content aus einem Bild extrahieren '<OCR>' Process-Eingabeaufforderung und extrahieren Sie sowohl den Textual content als auch seinen Speicherort mit '<OCR_WITH_REGION>' :

outcomes = run_example(picture,task_prompt)
draw_ocr_bboxes(picture, outcomes('<OCR_WITH_REGION>'))

Florence-2 ist ein vielseitiges Imaginative and prescient-Language-Modell (VLM), das mehrere Sehaufgaben innerhalb eines einzigen Modells bewältigen kann. Seine Zero-Shot-Fähigkeiten sind bei verschiedenen Aufgaben wie Bildunterschrift, Objekterkennung, Segmentierung und OCR beeindruckend. Während Florence-2 sofort eine gute Leistung erbringt, kann eine zusätzliche Feinabstimmung das Modell weiter an neue Aufgaben anpassen oder seine Leistung bei einzigartigen, benutzerdefinierten Datensätzen verbessern.

Von admin

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert