Blob portrait: gradiente descendente para una foto
Pinta una foto con manchas gaussianas 2D. Comienza con 1.500 manchas aleatorias y, en cada paso, las renderiza, mide el error contra la foto (L1 + SSIM) y mueve cada mancha un poco para reducirlo (Adam). Nuevas manchas pequeñas aparecen donde el error es más alto. No interviene ningún generador de imágenes: la imagen se aprende.
Pasos
-
Obtén la foto. Usa el archivo adjunto. Anota la posición del sujeto para poder ajustar
--focus(el área que recibe el entrenamiento más cercano, normalmente el rostro). -
Instala. Python 3.10+.
pip install -r requirements.txt # torch, numpy, pillowSi el índice de PyTorch está bloqueado, funciona
pip install torchdesde PyPI. -
Elige un preset según el hardware y el tiempo disponible:
preset pasos máx. manchas CPU de 2 núcleos GPU quick300 15.000 ~8 min ~1 min default1.600 45.000 ~35 min ~5 min full6.000 100.000 horas ~20-40 min En CPU, ejecuta
defaulten segundo plano y consulta el registro; no lo bloquees. -
Ejecuta.
python scripts/blobfit.py photo.jpg --out result/ --preset default \ --aspect 4:5 --focus 0.5,0.4,0.45,0.5--aspectrecorta a w:h alrededor del centro (nonemantiene la forma original de la foto).--focus cx,cy,w,hestá en proporciones 0-1 de la imagen recortada. Para un selfie centrado,0.5,0.4,0.45,0.5cubre el rostro.--steps/--blobsanulan el preset.- El dispositivo se elige automáticamente: CUDA, luego Apple MPS, luego CPU.
-
Revisa el resultado antes de entregarlo. Abre
compare.jpgyzoom.jpgy míralos.stats.jsontiene el PSNR: alrededor de 28-30 dB es un parecido suave (quick), 38 dB+ es difícil de distinguir a tamaño normal. Si el rostro es difuso, vuelve a ejecutar con más pasos o mueve--focushacia el rostro. -
Entrega. Envía
compare.jpg,render.pngytraining.gif. Indica cuántas manchas y pasos, el PSNR y que fue entrenado, no generado.
Salidas
| archivo | qué es |
|---|---|
render.png | la pintura de manchas en su tamaño ajustado completo |
compare.jpg | foto real junto a la versión con código |
zoom.jpg | prueba de zoom alrededor de los ojos |
training.gif | de ruido a imagen, un fotograma por hito |
blobs.npz | cada mancha: posición, escala, ángulo, color, intensidad (para volver a renderizar o animar) |
stats.json | pasos, número de manchas, PSNR, segundos, dispositivo |
Límites honestos
- Copia una sola foto. No puede inventar una nueva vista o un nuevo rostro.
- La calidad depende de los pasos: las ejecuciones cortas en CPU producen resultados suaves; el grano fino de la piel necesita el preset
full. - El color de fondo se toma de los bordes de la foto, por lo que las manchas solo necesitan pintar lo que difiere de él.