HeadlinesBriefing favicon HeadlinesBriefing.com

Neural Texture Compression with ES (No Backprop)

Hacker News •
×

The repo, released on September 4, 2026 is here:https://github.com/richgel999/neural_texture_es2ES=Evolution Strategies. Here is a mirror of the README.md file on Git Hub, with the Prior Art disclosure. Key phrases: neural texture compression, neural material compression, PBR material compression, derivative-free neural texture optimization, latent texture optimization, block-compressed neural texture, quantization-aware neural texture training, compressed-domain texture optimization.toy neural texture compression trained with Evolution Strategies A small, self-contained C++ experiment: an RGB image (or up to four same-size RGB textures of one material) is encoded as a shared low-resolution latent texture plus a tiny MLP decoder, and both are trained entirely with Evolution Strategies — no backprop, no autodiff, no training framework. (An optional late-training polish, --mlp-fd, switches the decoder to numerical finite differences; still no backprop.) Dependencies are stb_image, stb_image_write, and Open MP.

Write-up: Fitting a neural texture decoder with ESI(u,v) ≈ MLP( bilinear(Z, u, v), phi(u,v) )Z is the latent texture, phi a small positional encoding. At decode time each pixel bilinearly samples Z at its UV, appends phi, and runs the MLP. An optional second, coarser latent level (--latent2) is sampled at the same UV and its channels are concatenated onto the first level's.

Results512×512 crop of kodim23, 3000 iterations, latent quantized to 8 bits after training, MLP weights counted as fp16: Latent PSNRbpp (raw)bpp (entropy coded)64×64×426.9 d B0.560.4764×64×828.2 d B1.070.87128×128×430.3 d B2.061.65128×128×832.2 d B4.073.27These runs used the original positional encoding uv,fourier:1 (--nfreq 1), which is why the evaluation command below passes it. The current default is uv only, which scored 0.26–0.32 d B higher where both were run (see MET HOD.md); the results quoted later in this file use that default unless stated otherwise. The 128×128×8 run uses a 14 → 24 → 24 → 3 MLP (1035 weights, leaky Re LU, sigmoid output) and trains in about 150 s on a 32-thread CPU.

Quantizing the latent to 8 bits costs 0.04 d B. Output of that run (out_128c8/): target crop, reconstruction after 3000 iterations, and the eight latent channels side by side. Target Reconstruction (32.2 d B)out_128c8/model.bin is the trained model; evaluate it with ntc kodim23.png --load out_128c8/model.bin --latent 128 128 8 --nfreq 1 --iters 0.

A 4-layer material The Paving Stones070 material (normal, roughness, albedo, AO; see Test images) trained jointly from one shared 128×128×4 + 64×64×4 latent and one 10 → 36 → 36 → 12 MLP (2172 weights), 3000 iterations, learning rate annealed over the second half, per-weight finite differences for the decoder over the last quarter. 8-bit latent: 2.64 bpp total, 0.66 bpp per texture. Left is the target, right the reconstruction from the quantized latent (out_m1234/). The training command wasntc m1.png m2.png m3.png m4.png --latent 128 128 4 --latent2 64 64 4 --mlp 36,36 --mlp-pairs 64 --iters 3000 --lr-anneal 0.5 0.05 --mlp-fd 0.75 --out out_m1234 Normal map, 23.2 d BRoughness, 31.5 d BAlbedo, 23.2 d BAmbient occlusion, 29.6 d Bout_m1234/model.bin is the trained material; evaluate it with ntc m1.png m2.png m3.png m4.png --load out_m1234/model.bin --latent 128 128 4 --latent2 64 64 4 --mlp 36,36 --iters 0.

How the ES training works MLP: antithetic ES, 32 perturbation pairs per step, each pair evaluated on the same random 4096-pixel minibatch. The estimated gradient is fed to Adam. Optional late phases: full-image minibatch (--mlp-full), per-weight finite differences (--mlp-fd), or frozen decoder (--mlp-freeze).

Latent: all latent values are perturbed at once and the full image is decoded twice per pair, 4 pairs per step. Each pixel's loss change is credited only to the (up to) 4 texels its bilinear tap reads, on each latent level. Ordinary ES already updates every parameter from one antithetic pair, but its variance grows with ...