PixCell — blind photonic reconstructor

A LoRA adapter (r=32, all-linear) for Qwen/Qwen3.6-35B-A3B that converts a black-and-white raster of a photonic component plus its physical footprint into a primitive-only GDSFactory Python program. It was trained with GRPO alone — no supervised stage — on the PixCell curriculum (levels L0→L4) against a deterministic visual verifier that renders each program and scores it at calibrated absolute scale. Companion model release of From Pixels to PCells (QPG-MIT/PixCell).

This model is an iterative system

The model is one half of an attempt–measure–revise loop, and the loop is how you run it: sample 8 attempts, render and score each with the deterministic verifier, keep the champion, then revise the champion for 3 rounds of 4 revisions under number-free feedback — a closeness bucket plus whether the rendering has EXTRA or MISSING material, read from boundary-chamfer asymmetry. The verifier only measures; the model does all the searching. The loop and verifier ship in the repo (rl/track_a/agent_loop.py, rl/common/evaluator.py).

On the repo's 8-device held-out benchmark (data/benchmark/final_1..8 — real devices from published papers, never seen in training), the loop reaches mean champion IoU 0.491:

final_1 final_2 final_3 final_4 final_5 final_6 final_7 final_8
0.518 0.507 0.336 0.651 0.293 0.716 0.489 0.418

Benchmark gallery: target, champion render, difference map

Used instead as a bare one-shot generator (single pass, T=1.0), expect mean IoU 0.23 with 39/64 attempts executable — the base model scores 0/64.

Prompt contract

The deployment prompt is the training prompt, unchanged (rl/common/prompt.py, contract pixcell-direct-reconstruction-v3): the device raster (longest side ≤1440 px) and its footprint in μm, non-thinking chat template, ≤4096 new tokens, temperature 1.0. The model answers with one Python program over the seven-primitive GDSFactory catalog that writes device.gds.

from peft import PeftModel
from transformers import AutoModelForCausalLM

base = AutoModelForCausalLM.from_pretrained("Qwen/Qwen3.6-35B-A3B", torch_dtype="bfloat16")
model = PeftModel.from_pretrained(base, "qpaig-mit/pixcell")
# ...then drive it with the repo's agent loop; a lone forward pass is not the system.

Training

GRPO (importance-sampling loss, KL 0, group size 8, 8 groups/step, lr 1e-5, temperature 1.0) over the curriculum L0→L4, 30 steps per level with 80/20 replay of earlier levels; reward shaped_v3b — rectangle-baseline-normalized IoU and Dice plus a boundary-chamfer teacher over a 0.05 validity floor, recomputed from rendered artifacts by the deterministic evaluator (rl/track_a/reward.py). Trained with Tinker. The full evidence record (benchmark JSONs, loop trajectories, champion programs, gallery) is versioned at data/training/qwen-rl-v2/.

Downloads last month
-
Inference Providers NEW
This model isn't deployed by any Inference Provider. 🙋 Ask for provider support

Model tree for qpaig-mit/pixcell

Adapter
(224)
this model

Dataset used to train qpaig-mit/pixcell