Retrato de manchas: descida de gradiente para uma foto
Pinta uma foto com manchas Gaussianas 2D. Começa com 1.500 manchas aleatórias e, a cada etapa, renderiza-as, mede o erro em relação à foto (L1 + SSIM) e move cada mancha um pouco para reduzir esse erro (Adam). Novas manchas minúsculas surgem onde o erro é maior. Nenhum gerador de imagens está envolvido: a imagem é aprendida.
Etapas
-
Obter a foto. Use o arquivo anexado. Anote a posição do assunto para definir
--focus(a área que recebe o treinamento mais detalhado, geralmente o rosto). -
Instalar. Python 3.10+.
pip install -r requirements.txt # torch, numpy, pillowSe o índice do PyTorch estiver bloqueado,
pip install torchsimples a partir do PyPI funciona. -
Escolher um preset com base no hardware e tempo disponível:
preset etapas max manchas CPU 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 Em uma CPU, execute
defaultem segundo plano e consulte o log; não bloqueie nele. -
Executar.
python scripts/blobfit.py photo.jpg --out result/ --preset default \ --aspect 4:5 --focus 0.5,0.4,0.45,0.5--aspectcorta para w:h em torno do centro (nonemantém a forma original da foto).--focus cx,cy,w,hestá em 0-1 da imagem cortada. Para uma selfie centralizada,0.5,0.4,0.45,0.5cobre o rosto.--steps/--blobssubstituem o preset.- O dispositivo é selecionado automaticamente: CUDA, depois Apple MPS, depois CPU.
-
Verificar o resultado antes de entregar. Abra
compare.jpgezoom.jpge observe-os.stats.jsontem o PSNR: cerca de 28-30 dB é uma semelhança suave (quick), 38 dB+ é difícil distinguir em tamanho normal. Se o rosto estiver suave, execute novamente com mais etapas ou mova--focuspara o rosto. -
Entregar. Envie
compare.jpg,render.pngetraining.gif. Diga quantas manchas e etapas, o PSNR, e que foi treinado, não gerado.
Saídas
| arquivo | o que é |
|---|---|
render.png | a pintura de manchas no tamanho completo ajustado |
compare.jpg | foto real ao lado da versão em código |
zoom.jpg | prova de close-up em torno dos olhos |
training.gif | ruído para imagem, um quadro por marco |
blobs.npz | cada mancha: posição, escala, ângulo, cor, intensidade (para re-renderização ou animação) |
stats.json | etapas, contagem de manchas, PSNR, segundos, dispositivo |
Limitações honestas
- Ele copia uma foto. Não pode inventar uma nova visão ou um novo rosto.
- A qualidade depende das etapas: execuções curtas em CPU resultam em imagens suaves; grão fino da pele precisa do preset
full. - A cor de fundo é extraída das bordas da foto, assim as manchas só precisam pintar o que difere dela.