/ Модель

Характеристики

Лицензия
Apache 2.0
Архитектура
shadenet · dense
Библиотека
pytorch
Опубликована
20 сен 2026

ShadeNet-3.2-5M

Преобразование изображенийИзображение, текст → изображение

ShadeNet-3.2-5M преобразует RGB-фотографию в карты альбедо, относительной глубины, нормалей поверхности и затенения для задач обратного рендеринга.

103скачиваний за 30 дней3лайкавеса обновлены20 сен 2026

Бенчмарки

Как модель справилась с задачами пользователей ailist и что о ней публикуют открытые лидерборды

Публичные оценки

Из открытых лидербордов. Сравнивайте результаты одного теста при одинаковых условиях — отсутствие оценки не значит, что модель хуже.

В подключённых источниках результатов для этой модели пока нет.

Что умеет модель

Описание составлено по карточке модели и метаданным Hugging Face

ShadeNet-3.2-5M — компактная модель обратного рендеринга, разработанная singam96. По одной RGB-фотографии она строит карты альбедо, относительной глубины, нормалей поверхности и затенения. Модель содержит 5 млн параметров, включая замороженную основу MobileNetV2; её архитектура — ParallelUNet с параллельными путями кодирования и выходным словарём патчей. На вход подаётся изображение, на выходе — восемь каналов карт того же пространственного разрешения. Модель обучена на Flickr8k с псевдоразметкой Marigold V2; доступна в форматах PyTorch и ONNX.

Модель подходит для декомпозиции изображения на свойства поверхности и освещения, оценки относительной глубины и нормалей, а также для приблизительной подготовки данных к визуализации или редактированию. В README указано улучшение метрик глубины и нормалей по сравнению с ShadeNet-2. Глубина не метрическая, затенение предполагает белый свет, а предсказания могут содержать шум и локальные артефакты; модель не оценивает неопределённость и не моделирует тени или глобальное освещение. Лицензия весов и кода — Apache-2.0; для исходных данных и Marigold действуют их собственные условия.

Сценарии применения

  • получение карты альбедо из фотографии
  • оценка относительной глубины сцены
  • извлечение нормалей поверхности из изображения
  • разделение изображения на цвет поверхности и затенение
  • подготовка карт материалов для 3D-визуализации

Ограничения

Глубина относительная, а не метрическая; предположение о белом свете может приводить к утечке цветного освещения в альбедо. Карты нормалей могут быть шумными, возможны локальные артефакты; модель не выдаёт оценку неопределённости и не учитывает тени или глобальное освещение.

Карточка модели

README от автора на Hugging Face, как он его опубликовал

Открыть на Hugging Face

ShadeNet-3.2 5M

A lightweight inverse-rendering model: one photo in, albedo + relative depth + surface normals + shading out (8 channels, 5.0M params). Successor of ShadeNet-2 — 4× smaller, better depth and normals.

hero

TL;DR

Params5.0M (3.2M trainable + 1.8M frozen MobileNetV2 trunk)
InputRGB [1, 3, H, W] in [-1, 1] (384px trained; any multiple of 16)
Output8ch [1, 8, H, W] in [-1, 1]: albedo, relative depth, normals, shading
Val L1 (807 imgs)albedo 0.695 · depth 0.217 · normal 0.581
Formatsfp32 ONNX (20MB), fp16 ONNX (10MB), torch checkpoint (44MB)

Examples

3185645793 241345721 252578659 307994435 2312984882 3440104178

Each grid: input | albedo | shading / depth | normal | recon (albedo×shading). Click any image for full size.

Results

Full 807-image val split, per-map L1 (the comparable metric across versions — the headline val/loss formula changed between v2 and v3):

Map (val L1)ShadeNet-2 (20M)ShadeNet-3.2 (5M)change
Albedo0.7080.695−1.7%
Depth (SSI-aligned)0.2470.217−12%
Normal0.6960.581−16%

curves

Checkpoint variants (full val, pruned top-32 dictionary):

Weightsval/lossalbedo L1depth L1normal L1
best.ckpt (raw)0.16690.70130.22410.5709
best.ckpt (EMA)0.16710.69520.21740.5807

Shipped ONNX uses the EMA weights. All page outputs and the Space run a 3-pass multi-scale median (scales 0.875/1.0/1.125) — a mild denoise; the model's raw single-pass albedo is sharper than its pseudo-labels, so this trades a little detail for lower variance.

ShadeNet-2 vs ShadeNet-3.2

Same inputs (ShadeNet-2 top rows, ShadeNet-3.2 bottom rows), maps only. Both use their shipped weights; ShadeNet-3.2 runs the 3-pass multi-scale median.

compare 1 compare 2 compare 3

Architecture

ParallelUNet generator (4.98M params) + spectral-norm GroupNorm PatchGAN discriminator (2.77M, training only):

  • Dual parallel encoders — vanilla UNet path plus a frozen MobileNetV2 feature trunk, fused at every decoder level
  • Depthwise-separable factorized convs (1×3 + 3×1) throughout; full H/32 bottleneck; reflect padding
  • Patch-dictionary output tail: 16×16 tiles softmax-addressed over 32 learned per-channel atoms (pruned from 1024 — the top-32 hold 99.4% of addressing mass), blended back into the signal before tanh
  • Single-pass RGB → 8ch output; EMA weight shadow (shipped weights are EMA)

Patch dictionary

The tail softmax-addresses 32 learned 16×16 atoms per tile (kept from 1024 after measuring per-atom selection: only ~34 atoms are ever used, ~31 cover 99% of the mass). Shown below per output channel — each panel is the 8×4 atom grid, shared grayscale scale.

atom dictionary

Output maps

MapChannelsRangeDescription
Albedo3 [0:3][−1, 1]Reflectance / diffuse color, lighting factored out
Depth1 [3:4][−1, 1]Relative depth (0=near), affine-ambiguous
Normal3 [4:7][−1, 1]Surface normals, unit-length regularised
Shading1 [7:8][−1, 1]Grayscale irradiance; input ≈ albedo × shading
Recon——albedo × shading re-rendering (diagnostic, not a head)

Files

├── app.py                    # Gradio Space app (fp16 ONNX)
├── inference.py              # Standalone torch CLI
├── inference_utils.py        # Grid visualisation (numpy/PIL)
├── model.py                  # Standalone generator architecture
├── requirements.txt
├── checkpoints/shadenet32.ckpt     # Torch weights, EMA (44MB)
└── onnx/
    ├── model.onnx                  # fp32, EMA (20MB) — GPU via CUDA EP
    └── model_fp16.onnx             # fp16, EMA (10MB) — CPU

Usage

Gradio Space

Try it in your browser — no installation: singam96/ShadeNet-3-2-5M Space.

This repo ships app.py, the Space entrypoint. To recreate it: New Space → Gradio SDK → point at this repo.

Torch CLI

pip install torch torchvision pillow numpy
python inference.py photo.jpg --output_dir ./output
# --checkpoint ./checkpoints/shadenet32.ckpt --image-size 512 --no-ema to disable EMA

ONNX (CPU)

pip install onnxruntime pillow numpy
python - <<'EOF'
import onnxruntime as ort, numpy as np
from PIL import Image
from inference_utils import build_grid, pil_to_np, resize_pad
sess = ort.InferenceSession("onnx/model_fp16.onnx", providers=["CPUExecutionProvider"])
img = resize_pad(Image.open("photo.jpg"), 512)
out = sess.run(None, {"input_rgb": pil_to_np(img).astype(np.float32)})[0]
build_grid(img, out).save("result.png")
EOF

Input: [1, 3, H, W] in [-1, 1] (any H, W; multiples of 16 recommended). Output: [1, 8, H, W] in [-1, 1].

Training

Trained from scratch on singam96/flickr8k_marigold_v2 (8077 Flickr8k photos with Marigold-V2 pseudo-labels), 384px, fp32, single GTX 1650, early-stopped on val/loss (patience 5) at epoch 12. The 1024-atom dictionary was pruned to its top-32 by addressing mass (no retraining; output error vs full ~5e-4 mean) for the release.

Losses: scale-invariant MSE on albedo (per-channel std alignment) + scale-shift-invariant MSE on depth after least-squares alignment (decoded Marigold depth is relative) + Sobel gradient-matching on depth (edge crispness) + MSE on normals + self-supervised reconstruction coupling (albedo×shading ≈ input, the shading head's only supervision) + LSGAN + normal unit-length penalty. Weight decay 1e-4 (patch dictionary exempt).

Limitations

  • Depth is relative, not metric — don't read meters off it.
  • Shading assumes white light; strongly colored illumination (sunsets, neon) leaks into albedo.
  • Normals are noisy in foliage/sky — those pseudo-labels were noisy too.
  • Occasional localized artifacts in albedo/shading (learned prior pockets).
  • No shadows/global illumination — relighting-style use is approximate.
  • Uncertainty is not provided: confidently-wrong pseudo-labels are fitted confidently.

Attribution

Supervision labels come from Marigold V2 (Ke et al.) applied to Flickr8k (Hodosh et al.):

  • Marigold: Repurposing Diffusion-Based Image Generators for Monocular Depth Estimation — Ke, Obukhov, Metzger, Daudt, Schindler, Schindler (CVPR 2024)
  • Flickr8k: Framing Image Description as a Ranking Task — Hodosh, Young, Hockenmaier (2013)

This model (weights + code) is Apache-2.0; upstream dataset/model terms still apply to their artifacts.

Citation

@software{shadenet32,
  author = {Sachin},
  title = {ShadeNet-3.2: single-image inverse rendering (5M)},
  year = {2026},
  url = {https://huggingface.co/singam96/ShadeNet-3.2-5M}
}

Как запустить

На своей GPU в ailist. Цена — по текущим предложениям провайдеров

GPU в ailist

Универсальный рантайм · pytorch

Нельзя запустить

Модели «картинка → картинка» пока не запускаются.

Ревизия весов
5460d5b

0 моделей