Portrait en taches : descente de gradient pour une photo
Peint une photo avec des taches gaussiennes 2D. On part de 1 500 taches aléatoires, et à chaque étape on les rend, on mesure l'erreur par rapport à la photo (L1 + SSIM), et on déplace chaque tache un peu pour la réduire (Adam). De nouvelles petites taches apparaissent là où l'erreur est la plus élevée. Aucun générateur d'image n'est impliqué : l'image est apprise.
Étapes
-
Obtenez la photo. Utilisez le fichier joint. Notez la position du sujet pour pouvoir définir
--focus(la zone qui reçoit l'entraînement le plus rapproché, généralement le visage). -
Installation. Python 3.10+.
pip install -r requirements.txt # torch, numpy, pillowSi l'index PyTorch est bloqué, un simple
pip install torchdepuis PyPI fonctionne. -
Choisissez un préréglage selon le matériel et le temps disponible :
préréglage étapes max taches CPU 2 cœurs GPU quick300 15 000 ~8 min ~1 min default1 600 45 000 ~35 min ~5 min full6 000 100 000 des heures ~20-40 min Sur un CPU, exécutez
defaulten arrière-plan et consultez le journal ; ne le bloquez pas. -
Exécution.
python scripts/blobfit.py photo.jpg --out result/ --preset default \ --aspect 4:5 --focus 0.5,0.4,0.45,0.5--aspectrecadre en w:h autour du centre (noneconserve la forme propre de la photo).--focus cx,cy,w,hest en 0-1 de l'image recadrée. Pour un selfie centré,0.5,0.4,0.45,0.5couvre le visage.--steps/--blobsremplacent le préréglage.- Le périphérique est choisi automatiquement : CUDA, puis Apple MPS, puis CPU.
-
Vérifiez le résultat avant de le livrer. Ouvrez
compare.jpgetzoom.jpget regardez-les.stats.jsoncontient le PSNR : autour de 28-30 dB donne une ressemblance douce (rapide), 38 dB+ est difficile à distinguer à taille normale. Si le visage est flou, relancez avec plus d'étapes ou déplacez--focussur le visage. -
Livrez. Envoyez
compare.jpg,render.pngettraining.gif. Dites combien de taches et d'étapes, le PSNR, et que cela a été entraîné, non généré.
Sorties
| fichier | description |
|---|---|
render.png | la peinture en taches à la taille ajustée complète |
compare.jpg | photo réelle à côté de la version codée |
zoom.jpg | preuve agrandie autour des yeux |
training.gif | bruit vers image, une image par jalon |
blobs.npz | chaque tache : position, échelle, angle, couleur, force (pour re-rendu ou animation) |
stats.json | étapes, nombre de taches, PSNR, secondes, périphérique |
Limites honnêtes
- Il copie une seule photo. Il ne peut pas inventer une nouvelle vue ou un nouveau visage.
- La qualité dépend du nombre d'étapes : les courtes exécutions CPU donnent des résultats doux ; le grain fin de la peau nécessite le préréglage
full. - La couleur d'arrière-plan est prise des bords de la photo, donc les taches n'ont besoin de peindre que ce qui en diffère.