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.