Blob 人像:以梯度下降繪製照片
使用 2D 高斯色塊繪製照片。從 1,500 個隨機色塊開始,每個步驟渲染它們,並計算與照片的誤差(L1 + SSIM),然後稍微移動每個色塊以減少誤差(使用 Adam 優化器)。新的微小色塊會在誤差最高的區域生成。沒有使用圖像生成模型:圖像是透過學習得到的。
步驟
-
取得照片。使用附加的檔案。注意主體的位置,以便設定
--focus(接受最密集訓練的區域,通常是臉部)。 -
安裝。Python 3.10 以上。
pip install -r requirements.txt # torch, numpy, pillow如果 PyTorch 索引被封鎖,直接使用 PyPI 執行
pip install torch即可。 -
根據硬體和可用時間選擇預設:
預設 步驟 最大色塊數 2 核心 CPU GPU quick300 15,000 ~8 分鐘 ~1 分鐘 default1,600 45,000 ~35 分鐘 ~5 分鐘 full6,000 100,000 數小時 ~20-40 分鐘 若使用 CPU,請在背景執行
default並監控記錄檔,不要佔用前景。 -
執行。
python scripts/blobfit.py photo.jpg --out result/ --preset default \ --aspect 4:5 --focus 0.5,0.4,0.45,0.5--aspect以中心為基準裁切為 w:h(none則保留照片原始比例)。--focus cx,cy,w,h參數範圍為 0-1,相對於裁切後的圖像。對於居中自拍,0.5,0.4,0.45,0.5涵蓋臉部區域。--steps/--blobs可覆蓋預設值。- 裝置會自動選擇:CUDA、Apple MPS,最後是 CPU。
-
交付前檢查結果。打開
compare.jpg和zoom.jpg仔細檢視。stats.json包含 PSNR:約 28-30 dB 是柔和相似度(快速模式),38 dB 以上在正常尺寸下幾乎難以分辨。如果臉部太模糊,請以更多步驟重新執行,或將--focus移到臉部。 -
交付。提供
compare.jpg、render.png和training.gif。說明色塊數量與步驟、PSNR 值,並強調這是訓練結果,非生成結果。
輸出檔案
| 檔案 | 說明 |
|---|---|
render.png | 完整擬合尺寸的色塊畫作 |
compare.jpg | 真實照片與程式碼版本的並排比較 |
zoom.jpg | 眼部附近的放大證明 |
training.gif | 從雜訊到圖片的動畫,每個里程碑一幀 |
blobs.npz | 每個色塊的資料:位置、縮放、角度、顏色、強度(供重新渲染或動畫使用) |
stats.json | 步驟、色塊數量、PSNR、耗時秒數、使用裝置 |
誠實的限制
- 它只能複製一張照片。無法創造新的視角或新的臉孔。
- 品質取決於步驟數量:短時間的 CPU 執行會較為模糊;細膩的皮膚紋理需要使用
full預設。 - 背景顏色取自照片邊緣,因此色塊只需繪製與背景不同的部分。