Datasets LoRA automatizados: extraer, filtrar y etiquetar
Construye datasets de entrenamiento LoRA a partir de vídeo de anime y herramientas generativas: extracción automatizada, etiquetado y control de calidad.
On this page
Datasets LoRA automatizados: extraer, filtrar y etiquetar
TL;DR
- Extrae I-frames de episodios de anime con
ffmpeg -vf select=eq(pict_type\,I)— se alinean estrechamente con los keyframes de animación y te dan miles de imágenes candidatas. - Etiqueta frames automáticamente con DeepDanbooru (modelo TensorFlow entrenado con datos de Danbooru 2021) usando
load_model_from_project,load_tags_from_projectyload_image_for_evaluate; filtra por tags de Booru (1girl,red_hair, nombres de personajes) para aislar a un solo personaje. - Poda la carpeta resultante hasta 20–50 imágenes diversas: elimina personajes incorrectos, tomas con varios personajes, secuencias duplicadas, frames de OP/ED, tweens y recortes de baja calidad.
- Alternativamente, genera sets sintéticos con ChatGPT Plus / DALL-E 3 usando una plantilla de prompt con un marcador
[SUBJECT]; espera nombres de archivo largos y salidas ocasionales en cuadrícula.
Por qué importa la automatización
Entrenar un LoRA de personaje empieza con un dataset. Seleccionar y captionar a mano 30–50 imágenes desde cero es tan tedioso que mucha gente nunca lo termina. Existen dos rutas de automatización:
- Vídeo → frames → tags → filtrar → podar — convierte una serie de anime en un dataset específico de un personaje.
- Plantilla de prompt → DALL-E 3 → descargar → renombrar → curar — sintetiza un dataset conceptual desde cero.
Ambas producen una carpeta de imágenes emparejadas con archivos de caption .txt. Los frames extraídos están on-model pero son ruidosos; las imágenes generadas son limpias pero pueden derivar fuera de modelo. Elige la ruta que coincida con tu material de origen. La elección entre rutas depende de tu material de origen. Si ya tienes archivos de episodios de anime en el disco, la Ruta A producirá imágenes auténticamente on-model. Si quieres algo que todavía no existe como material de referencia — un concepto propio, un estilo de objeto específico o un personaje de tus propios diseños — la Ruta B te permite generar datos de entrenamiento a partir de una descripción de texto. Ambos enfoques escalan distinto: la Ruta A está limitada por los episodios que posees; la Ruta B solo por tu paciencia con los rate limits por petición.
Ruta A: de vídeo de anime a dataset de personaje
Requisitos
- ffmpeg — en el
PATH. - Python 3.8+ — para los scripts de orquestación.
- Archivos de vídeo — MKV/MP4/WebM sin subtítulos incrustados. Si puedes desactivar los subtítulos en tu reproductor, estás bien.
- Espacio en disco — una serie de 12 episodios en 1080p puede producir decenas de gigabytes de PNG de keyframes; el tamaño real depende de la configuración GOP del encode de origen. El autor de la guía original estimó aproximadamente 30 GB para una serie típica de 12 episodios en 1080p.
Extrae solo los I-frames
Los códecs de vídeo almacenan frames completos (I-frames) en los cambios de escena y a intervalos GOP regulares. Los keyframes de anime — los dibujos que definen una pose — suelen coincidir con esos cambios de escena. El filtro select conserva solo los I-frames:
ffmpeg -i episode.mkv -vf "select=eq(pict_type\,I)" -vsync vfr "episode-%06d.png"
La opción select=eq(pict_type\,I) conserva los frames donde pict_type == I. La opción -vsync vfr produce salida de tasa variable para evitar frames duplicados. El nombre de salida usa %06d para números de secuencia con relleno de ceros. Esta sintaxis de comando está confirmada por Stack Overflow.
El autor del artículo señala una distinción crítica: los keyframes de anime (las poses definitorias del artista) y los keyframes de vídeo / I-frames (frames comprimidos completos) no son el mismo concepto. Sin embargo, en la práctica, los I-frames de vídeo se colocan en los cambios de escena, que a menudo se alinean con los keyframes de anime. Esta alineación significa que extraer I-frames produce un set enriquecido de dibujos on-model, aunque también captura algunos frames intermedios que cayeron justo en un límite GOP.
Procesa por lotes una carpeta con un bucle corto de Python (consulta la guía de origen para un script completo).
El script extractor del artículo de origen recorre todos los archivos de la carpeta de entrada, detecta las extensiones de vídeo habituales (.avi, .mp4, .mkv, .ogm, .webm) y ejecuta el comando ffmpeg por cada episodio. Este enfoque por lotes permite procesar una serie de 12 episodios sin atención. La estructura del directorio de salida refleja los nombres de los archivos de entrada: cada episodio produce su propia secuencia numerada (p. ej., Magical Girl Lyrical Nanoha - S04E01.mkv-000007.png), lo que facilita rastrear cualquier frame hasta su episodio y marca de tiempo de origen.
Etiqueta automáticamente con DeepDanbooru
DeepDanbooru es un clasificador multietiqueta de TensorFlow que produce tags estilo Danbooru. El modelo preentrenado (release v3-20211112-sgd-e28) fue entrenado con datos de Danbooru de noviembre de 2021 usando el optimizador SGD. El repositorio lo describe como un "AI based multi-label girl image classification system, implemented by using TensorFlow." Instalación:
pip install git+https://github.com/KichangKim/DeepDanbooru.git
pip install tensorflow tensorflow-io
Funciones clave de la API del código del repo:
load_model_from_project(path, compile_model=False)— carga el modelo.keras/.h5desde una carpeta de proyecto. Firma confirmada enproject.py.load_tags_from_project(path)— leetags.txt(separado por saltos de línea) del proyecto.load_tags(path)— cargador genérico de archivos de tags usado por las dos funciones anteriores. Implementación endata/dataset.py.load_image_for_evaluate(path, width, height)— carga, redimensiona (preservando el aspecto + padding), normaliza a[0,1]; devuelvenp.ndarray. Firma confirmada endata/__init__.py.
Esquema del script de etiquetado (del artículo 218):
import deepdanbooru
import os
model = deepdanbooru.project.load_model_from_project(model_path, compile_model=False)
tags = deepdanbooru.project.load_tags_from_project(model_path)
tags_char = deepdanbooru.data.load_tags(os.path.join(model_path, "tags-character.txt"))
tags_gen = deepdanbooru.data.load_tags(os.path.join(model_path, "tags-general.txt"))
for frame in frames:
img = deepdanbooru.data.load_image_for_evaluate(
frame, width=model.input_shape[2], height=model.input_shape[1]
)
probs = model.predict(img[None, ...])[0]
keep = [tags[i] for i, p in enumerate(probs) if p >= 0.5]
char_tags = [t for t in keep if t in tags_char]
gen_tags = [t for t in keep if t in tags_gen]
with open(frame.replace(".png", ".txt"), "w") as f:
f.write(", ".join(t.replace("_", " ") for t in set(char_tags + gen_tags)))
Nota sobre los archivos de tags. El README del repositorio documenta solo tags.txt. El código referencia tags-character.txt y tags-general.txt, que pueden existir dentro de los assets ZIP del release. Si faltan en tu descarga, divide tags.txt tú mismo o filtra por prefijos conocidos.
El script de etiquetado separa los tags de personaje de los tags generales, lo cual es esencial para el paso de filtrado. Los tags de personaje (como takamachi_nanoha) identifican personajes con nombre específico; los tags generales (como 1girl, red_hair, blue_eyes, school_uniform) describen atributos visuales. El script escribe ambas categorías en el archivo de caption .txt, pero solo los tags generales se usan para el filtro de atributos visuales mostrado arriba. Esta separación te permite filtrar por un tag de personaje conocido (para personajes antiguos y populares) o por una combinación de atributos visuales (para personajes nuevos o menos populares donde el tag de personaje no existe en el vocabulario del modelo). El umbral de probabilidad de 0.5 es una convención del autor del artículo — la librería no expone ningún valor por defecto.
Filtra para un solo personaje
El autor del artículo de origen enfatiza que los tags resultantes no serán perfectos, pero sí suficientemente buenos para entrenar. Inspeccionar manualmente la carpeta etiquetada antes de podar es un paso que vale la pena — te permite calibrar qué tags identifican de forma fiable a tu personaje y cuáles son ruido.
Los tags de Booru hacen que el filtrado sea sencillo. Para un personaje femenino de pelo rojo (del artículo 218):
if "1girl" in gen_tags and "1boy" not in gen_tags and "red_hair" in gen_tags:
copy_image_and_tags(frame, output_dir, activation_tag="my_character")
Para personajes que existían antes de noviembre de 2021, puedes hacer match directo con el tag de personaje (p. ej., takamachi_nanoha en tags_char). El éxito depende de si el personaje aparece en los datos de entrenamiento.
El artículo de origen recomienda dedicar aproximadamente media hora a este paso de poda. El flujo es sencillo: abre un visor de imágenes, avanza por la carpeta y elimina los frames que caigan en cualquiera de las categorías anteriores. La pregunta clave para cada frame es: ¿esta imagen muestra claramente a mi personaje solo, con calidad razonable y sin elementos visuales distractores? Ante la duda, elimínalo — un dataset más ajustado entrena un LoRA más consistente.
Poda manual hasta 20–50 imágenes
La automatización te acerca; la revisión humana te da calidad. Abre la carpeta de salida en un visor de imágenes y elimina: Categoría | Qué buscar | Por qué perjudica
|----------|------------------|--------------
Personaje incorrecto | Match de tag pero desajuste visual | Contamina el concepto Varios personajes | Brazos extra, figuras de fondo | Diluye el objetivo Secuencias duplicadas | Frames consecutivos casi idénticos de diálogo | Reduce la diversidad Frames de OP/ED | Secuencias de créditos recurrentes entre episodios | Repite imágenes idénticas Tweens (in-betweens) | Desenfoque de movimiento, caras off-model, poses forzadas | No representativo Baja calidad | Tomas lejanas, trazos malos, artefactos de compresión | Entrena ruido Este checklist de poda viene directamente del artículo 218. El objetivo de 20–50 imágenes es una convención de la comunidad; ninguna fuente autoritativa única lo prescribe.
Ruta B: dataset sintético con ChatGPT Plus / DALL-E 3
Plantilla de prompt
Crea un prompt base con un marcador [SUBJECT] (del artículo 3327):
Photo of a delicious-looking cinnamon-bun [SUBJECT]. The entire aircraft is
constructed from fresh, golden-brown cinnamon bun material, with swirls of
cinnamon and icing visible.
Dale a ChatGPT una lista de 30+ temas e indícale que genere imágenes por tema, sustituyendo [SUBJECT] cada vez.
Puntos de fricción (foto de junio de 2024)
Síntoma | Causa | Solución alternativa
|---------|-------|------------
Solo 1 imagen por tema | Cambió el límite por petición (fue 4, luego 2, luego 1, según reporte de fuente única) | Repite el prompt o la lista; ordena archivos manualmente Salida en cuadrícula/collage | El modelo devuelve una sola imagen con las 4 | Reformula: "generate 4 separate images" o regenera Enfriamiento por tráfico | Límite por sesión basado en la carga del servidor (reporte de fuente única) | Espera el enfriamiento indicado; a veces se reanuda antes Nombres de archivo largos | El prompt queda incrustado en el nombre de archivo | Script de renombrado por lotes (GUI Tkinter de drag-drop incluida en la fuente) La progresión 4→2→1 y el enfriamiento basado en tráfico son observaciones de fuente única del artículo 3327. OpenAI no publica estos números. A julio de 2026, los límites reales pueden diferir.
Renombrado a escala
El artículo de origen incluye un renombrador drag-and-drop con tkinterdnd2 que convierte los nombres largos de DALL-E a foldername_001.png, foldername_002.png, etc., con soporte para deshacer.
Captioning: lo que las fuentes no cubren
Ninguno de los dos artículos usa un LLM para escribir captions de imágenes existentes. DeepDanbooru emite tags, no captions en lenguaje natural. ChatGPT se usa solo para generación, no para captioning de visión-a-texto. Para captions descriptivas necesitas un modelo vision-language aparte (BLIP-2, LLaVA, GPT-4V) — fuera del alcance de estas guías.
Errores comunes y soluciones
Error / Síntoma | Causa probable | Solución
|-----------------|--------------|-----
ffmpeg: command not found | ffmpeg no está en el PATH | Instala ffmpeg; añádelo al PATH ModuleNotFoundError: deepdanbooru | Paquete no instalado | pip install git+https://github.com/KichangKim/DeepDanbooru.git El import de tensorflow falla | Desajuste de versión | Iguala la versión de requirements.txt (indicada como ≥2.17.0 en el main del repo) Cero tags escritas | Umbral demasiado alto o archivos de tags faltantes | Baja el umbral; verifica que existan los archivos de tags ChatGPT devuelve una imagen en vez de cuatro | Cambió el límite por petición | Repite el prompt ChatGPT devuelve una cuadrícula 2×2 | El modelo interpreta la petición como collage | Prohíbe las cuadrículas en el prompt El script de renombrado se cuelga | Límite de 260 caracteres de ruta en Windows | Activa rutas largas o usa una ruta corta
FAQ
¿Cómo se crea automáticamente un dataset de entrenamiento LoRA a partir de anime? Extrae I-frames con ffmpeg -vf select=eq(pict_type\,I), etiqueta con DeepDanbooru, filtra por tags de personaje, copia los matches a una carpeta nueva y poda hasta 20–50 imágenes diversas.
¿Cuántas imágenes necesitas para un LoRA? La práctica de la comunidad apunta a 20–50 imágenes curadas. Menos arriesga underfitting; más añade retornos decrecientes. Ninguna documentación oficial del trainer especifica un número exacto.
¿Se puede usar ChatGPT para generar datos de entrenamiento LoRA? Sí. Con ChatGPT Plus, usa una plantilla de prompt con un marcador [SUBJECT], introduce una lista de temas y pide imágenes por tema. Descarga, renombra por lotes y cura.
¿Qué herramientas etiquetan imágenes de anime automáticamente? DeepDanbooru (TensorFlow, datos de entrenamiento de Danbooru 2021) produce tags de Booru en archivos .txt. WD1.4 Tagger (usado en Kohya-ss, A1111) es otra opción.
¿Cómo se extraen keyframes de anime para entrenamiento? Usa ffmpeg -i input.mkv -vf "select=eq(pict_type\,I)" -vsync vfr "out-%06d.png". Los I-frames son frames completos en los cambios de escena y a intervalos GOP regulares; los cambios de escena del anime a menudo se alinean con los keyframes de animación.
Enlaces internos
- Guía de hiperparámetros para entrenar LoRA
- Comparación DeepDanbooru vs WD1.4 Tagger
- Preprocesado de vídeo de anime para datasets de ML