SimGAN in TensorFlow: making fake eyes look real
A 2017-era implementation that uses adversarial training to refine synthetic eye images so they fool a discriminator without losing their gaze labels.

What it does
This repo implements SimGAN, the paper where Apple taught a refiner network to take synthetic eye images from the UnityEyes simulator and make them look photorealistic. A discriminator tries to spot the fakes; the refiner tries to evade it while preserving the original gaze direction. The result: more training data for eye-tracking models without collecting millions of real photos.
The interesting bit
The author didn’t have the paper’s full 1.2M synthetic images or its exact hyperparameters, so this is a leaner, more transparent reproduction. You can watch the trade-off between realism and label fidelity by tweaking lambda and swapping between Adam and SGD.
Key highlights
- Trains on just 83K synthetic images (14% of the paper’s dataset) and still produces visible refinement
- Includes side-by-side loss curves for different
lambdavalues and optimizers - Supports inference mode to refine an entire directory of synthetic images with a pretrained model
- TensorBoard logging baked in
Caveats
- Locked to Python 2.7 and TensorFlow 0.12.1 — expect archaeology if you try to run it today
- Hyperparameters
Bandlambdawere manually chosen because the paper omitted them
Verdict
Worth a look if you’re studying domain adaptation or need a concrete SimGAN reference. Skip it if you want a modern, maintained pipeline; this is a 2017 snapshot with vintage dependencies.