Detección de Zonas Medievales Base Florence-2

medieval-data
Detección de objetos

Este es el modelo Florence 2 de Microsoft entrenado durante 10 épocas con el conjunto de datos de Segmentación Medieval CATMuS con una tasa de aprendizaje de 1e-6. Este modelo no hubiera sido posible sin los numerosos anotadores detrás de los diversos conjuntos de datos disponibles en HTR-United (Consulte el conjunto de datos para obtener más detalles). Un agradecimiento especial a Thibault Clérice, quien convirtió el conjunto de datos original CATMuS (para HTR) en un conjunto de datos de segmentación.

Como usar

Para comenzar a usar el modelo, puede utilizar el siguiente código. Todos los modelos están entrenados con float16.

import requests
from PIL import Image
from transformers import AutoProcessor, AutoModelForCausalLM
import os
from unittest.mock import patch

import requests
from PIL import Image
from transformers import AutoModelForCausalLM, AutoProcessor
from transformers.dynamic_module_utils import get_imports
import matplotlib.pyplot as plt
import matplotlib.patches as patches

# Solución para Mac => https://huggingface.co/microsoft/Florence-2-large-ft/discussions/4
def fixed_get_imports(filename: str | os.PathLike) -> list[str]:
    """Solución para https://huggingface.co/microsoft/phi-1_5/discussions/72."""
    if not str(filename).endswith("/modeling_florence2.py"):
        return get_imports(filename)
    imports = get_imports(filename)
    imports.remove("flash_attn")
    return imports

with patch("transformers.dynamic_module_utils.get_imports", fixed_get_imports):

    model = AutoModelForCausalLM.from_pretrained("medieval-data/florence2-medieval-bbox-zone-detection", trust_remote_code=True)
    processor = AutoProcessor.from_pretrained("medieval-data/florence2-medieval-bbox-zone-detection", trust_remote_code=True)

    def process_image(url):
        prompt = ""

        image = Image.open(requests.get(url, stream=True).raw)

        inputs = processor(text=prompt, images=image, return_tensors="pt")

        generated_ids = model.generate(
            input_ids=inputs["input_ids"],
            pixel_values=inputs["pixel_values"],
            max_new_tokens=1024,
            do_sample=False,
            num_beams=3
        )
        generated_text = processor.batch_decode(generated_ids, skip_special_tokens=False)[0]

        result = processor.post_process_generation(generated_text, task="", image_size=(image.width, image.height))
        return result, image


    image = "https://huggingface.co/datasets/CATMuS/medieval-segmentation/resolve/main/data/train/cambridge-corpus-christi-college-ms-111/page-002-of-003.jpg"

    result, image = process_image(image)
    fig, ax = plt.subplots(1, figsize=(15, 15))
    ax.imshow(image)

    # Agregar cajas delimitadoras y etiquetas a la trama
    for bbox, label in zip(result[' ']['bboxes'], result[' ']['labels']):
        x, y, width, height = bbox[0], bbox[1], bbox[2] - bbox[0], bbox[3] - bbox[1]
        rect = patches.Rectangle((x, y), width, height, linewidth=2, edgecolor='r', facecolor='none')
        ax.add_patch(rect)
        plt.text(x, y, label, fontsize=12, bbox=dict(facecolor='yellow', alpha=0.5))

    # Mostrar la trama
    plt.show()

Funcionalidades

Detección de objetos
Compatibilidad con transformers
Uso de safetensors
Generación de texto
Compatible con AutoTrain

Casos de uso

Detección de zonas medievales en manuscritos.
Análisis y anotación de textos históricos.
Segmentación de regiones textuales y gráficas en documentos medievales.
Identificación de líneas y zonas textuales específicas como líneas principales, líneas interlineales, títulos de capítulos, zonas de encabezados, entre otras.