Download scripts/benchmark_innovation.py from PureOne/AUREOLE-R-v3: direct link, hf CLI and curl.
- Browser
- Download file 11.2 kB
-
https://huggingface.co/PureOne/AUREOLE-R-v3/resolve/main/scripts/benchmark_innovation.py
- Command line
-
hf download hf://PureOne/AUREOLE-R-v3/scripts/benchmark_innovation.py
-
curl -L -o benchmark_innovation.py https://huggingface.co/PureOne/AUREOLE-R-v3/resolve/main/scripts/benchmark_innovation.py
11.2 kB
| """Frozen v3 experiment; ground truth is restricted to the audit path.""" | |
| from pathlib import Path | |
| import argparse,csv,json,time,sys,platform,hashlib | |
| ROOT=Path(__file__).resolve().parents[1];sys.path.insert(0,str(ROOT)) | |
| import numpy as np | |
| from aureole import WorldMemory,freeze,draw,correct,exact_mse | |
| from aureole.core import proposal_from_bound | |
| from aureole.renderer import Scene,VisibilityPrior,receiver_grid,light_grid,unoccluded,physical_table | |
| from aureole.certificates import CertificateMemory,visibility_certificate,enclosure | |
| from aureole.innovation import prepare,eliminate,exact_risk_two | |
| def iid(h,q,oracle,n,rng): | |
| rows=np.flatnonzero(q.sum(1)>0);y=h.sum(1) | |
| if not len(rows):return y,0 | |
| cdf=np.minimum(np.cumsum(q[rows],1),1.0) | |
| last=q.shape[1]-1-np.argmax(q[rows,::-1]>0,axis=1) | |
| cdf[np.arange(q.shape[1])[None,:]>=last[:,None]]=1.0 | |
| for _ in range(n): | |
| j=(rng.random(len(rows))[:,None]>=cdf).sum(1) | |
| f=oracle(rows,j) | |
| y[rows]+=(f-h[rows,j])/q[rows,j,None]/n | |
| return y,len(rows)*n | |
| def audit_iid(truth,h,q,n=2): | |
| r=truth-h | |
| second=np.divide(r*r,q[...,None],out=np.zeros_like(r),where=q[...,None]>0).sum(1) | |
| return np.maximum(second-r.sum(1)**2,0).mean(-1)/n | |
| def summarize(rows,config): | |
| summary=[];comparisons=[] | |
| for phase in config['phases']: | |
| for method in config['methods']: | |
| rs=[r for r in rows if r['phase']==phase and r['method']==method] | |
| summary.append({'phase':phase,'method':method, | |
| 'expected_mse':float(np.mean([r['expected_mse'] for r in rs])), | |
| 'observed_mse':float(np.mean([r['observed_mse'] for r in rs])), | |
| 'rays':int(sum(r['rays'] for r in rs)), | |
| 'rays_per_receiver':float(np.mean([r['rays']/r['receivers'] for r in rs])), | |
| 'certified_fraction_before':float(np.mean([r['certified_fraction_before'] for r in rs])), | |
| 'false_certificates':int(sum(r['false_certificates'] for r in rs)), | |
| 'max_enclosure_violation':float(max(r['enclosure_violation'] for r in rs)), | |
| 'cpu_median_ms':float(np.median([r['runtime_seconds'] for r in rs])*1000), | |
| 'cpu_p99_ms':float(np.quantile([r['runtime_seconds'] for r in rs],.99)*1000), | |
| 'memory_bytes':max(r['memory_bytes'] for r in rs)}) | |
| for baseline in ('epoch_eliminate','v2_guarded','certificate_iid','constant_certificate','raw_importance'): | |
| a=[];b=[] | |
| for sid in config['scene_ids']: | |
| a.append(np.mean([r['expected_mse'] for r in rows if r['phase']==phase and r['scene']==sid and r['method']=='certificate_eliminate'])) | |
| b.append(np.mean([r['expected_mse'] for r in rows if r['phase']==phase and r['scene']==sid and r['method']==baseline])) | |
| a,b=np.array(a),np.array(b) | |
| if b.mean()<1e-20: | |
| value=None;interval=None | |
| else: | |
| value=float(1-a.mean()/b.mean());rng=np.random.default_rng(9301) | |
| indices=rng.integers(0,len(a),(10000,len(a))) | |
| x=1-a[indices].mean(1)/np.maximum(b[indices].mean(1),1e-30) | |
| interval=np.percentile(x,[2.5,97.5]).tolist() | |
| comparisons.append({'phase':phase,'baseline':baseline,'contender':'certificate_eliminate', | |
| 'expected_mse_reduction':value,'scene_bootstrap_95':interval}) | |
| return summary,comparisons | |
| def run(output): | |
| protocol=ROOT/'experiments_innovation.json';cfg=json.loads(protocol.read_text()) | |
| out=ROOT/output;out.mkdir(parents=True,exist_ok=True) | |
| points=receiver_grid(*cfg['receiver_grid']);lights=light_grid(cfg['emitter_grid_side']) | |
| H,W=cfg['receiver_grid'];vh,vw=cfg['viewport'];prior=VisibilityPrior(ROOT/'models/visibility_prior.npz') | |
| schedule=[(p,k) for p,n in cfg['phases'].items() for k in range(n)] | |
| rows=[];preparation=[];images={};started=time.perf_counter() | |
| for sid in cfg['scene_ids']: | |
| original=Scene.create(sid) | |
| tic=time.perf_counter();p_all=prior(original.features(points[:,None,:],lights[None,:,:])) | |
| preparation.append({'scene':sid,'prior_seconds':time.perf_counter()-tic}) | |
| b0=unoccluded(points,lights);b1=unoccluded(points,lights,True,.7) | |
| for seed in cfg['replicate_seeds']: | |
| memory={} | |
| for method in cfg['methods']: | |
| if method in ('raw_importance','v2_guarded'):memory[method]=WorldMemory(len(points),len(lights),f'scene-{sid}') | |
| else:memory[method]=CertificateMemory(points,lights,original.spheres,f'scene-{sid}', | |
| 'epoch' if method=='epoch_eliminate' else 'unsafe' if method=='unsafe_eliminate' else 'margin') | |
| rngs={m:np.random.default_rng(seed+sid*1000) for m in cfg['methods']} | |
| for frame,(phase,k) in enumerate(schedule): | |
| g=original.spheres.copy() | |
| if phase in ('smooth_motion','jump'): | |
| u=k+1 if phase=='smooth_motion' else cfg['phases']['smooth_motion'] | |
| g[:,0]+=np.array([.004,-.003,.002])*u | |
| g[:,1]+=np.array([-.002,.003,.002])*u | |
| g[:,3]+=np.array([.0002,-.0001,.00015])*u | |
| scene=Scene(sid,g) | |
| if phase=='jump':scene=scene.changed() | |
| x0=2+(k%4);y0=8 | |
| ids=(np.arange(y0,y0+vh)[:,None]*W+np.arange(x0,x0+vw)[None,:]).ravel() | |
| b=(b0 if phase in ('cold','warm','revisit') else b1)[ids] | |
| # Used only in the audit block after each method's online output. | |
| truth=physical_table(scene,points[ids],lights,b);target=truth.sum(1) | |
| vis_truth=scene.visibility(points[ids,None,:],lights[None,:,:]) | |
| for method in cfg['methods']: | |
| tic=time.perf_counter();mem=memory[method];rng=rngs[method] | |
| false=0;known=np.zeros(b.shape[:2],bool);values=np.zeros_like(known,float) | |
| if method in ('raw_importance','v2_guarded'): | |
| v=np.zeros_like(p_all[ids]) if method=='raw_importance' else mem.predict(ids,p_all[ids]) | |
| q=proposal_from_bound(b,v,mem.trusted(ids),active=method=='v2_guarded') | |
| snap=freeze(b*v[...,None],q);j=draw(snap,2,rng) | |
| observed=scene.visibility(points[ids,None,:],lights[j]) | |
| y=correct(snap,j,b[np.arange(len(ids))[:,None],j]*observed[...,None]) | |
| if method=='v2_guarded':mem.commit(ids,j,observed,revise_on_conflict=True) | |
| count=len(ids)*2;h=snap.control | |
| else: | |
| mem.begin_geometry(scene.spheres) | |
| values,known=mem.lookup(ids) | |
| p=np.full_like(p_all[ids],.5) if method=='constant_certificate' else p_all[ids] | |
| score=proposal_from_bound(b,p,active=True) | |
| h,q=prepare(b,p,values,known,score) | |
| count_box=[0] | |
| def oracle(rr,j): | |
| # Only selected current physical segments reach this path. | |
| vv,mm=visibility_certificate(scene,points[ids[rr]],lights[j]) | |
| mem.commit(ids[rr],j,vv,mm);count_box[0]+=len(rr) | |
| return b[rr,j]*vv[:,None] | |
| if method=='certificate_iid':y,_=iid(h,q,oracle,2,rng) | |
| else:y,_=eliminate(h,q,oracle,2,rng) | |
| count=count_box[0] | |
| runtime=time.perf_counter()-tic | |
| # Audit only: references, exact risks, certificate and enclosure checks. | |
| false=int(np.count_nonzero(known & (values!=vis_truth))) | |
| if method in ('raw_importance','v2_guarded'):risk=exact_mse(truth,snap,2) | |
| else: | |
| simulated=np.where(known[...,None],h,truth) | |
| bias=(simulated-truth).sum(1) | |
| risk=(audit_iid(simulated,h,q) if method=='certificate_iid' else exact_risk_two(simulated,h,q))+(bias*bias).mean(-1) | |
| lo,hi=enclosure(b,values,known) | |
| violation=float(max(np.max(lo-target),np.max(target-hi),0)) | |
| rows.append({'scene':sid,'seed':seed,'phase':phase,'phase_frame':k,'frame':frame,'method':method, | |
| 'expected_mse':float(risk.mean()),'observed_mse':float(np.mean((y-target)**2)), | |
| 'rays':count,'receivers':len(ids),'runtime_seconds':runtime, | |
| 'memory_bytes':0 if method=='raw_importance' else mem.nbytes, | |
| 'certified_fraction_before':float(known.mean()),'false_certificates':false, | |
| 'enclosure_violation':violation,'enclosure_mean_width':float(np.mean(hi-lo)), | |
| 'negative_channel_fraction':float(np.mean(y<0))}) | |
| if sid==cfg['scene_ids'][0] and seed==cfg['replicate_seeds'][0] and k==0: | |
| images[f'{phase}_{method}']=y.reshape(vh,vw,3);images[f'{phase}_reference']=target.reshape(vh,vw,3) | |
| print(f'completed scene {sid}; {len(rows)} frame-method records',flush=True) | |
| with (out/'innovation_raw.csv').open('w',newline='') as f: | |
| writer=csv.DictWriter(f,fieldnames=list(rows[0]));writer.writeheader();writer.writerows(rows) | |
| summary,comparisons=summarize(rows,cfg) | |
| report={'protocol':cfg,'protocol_sha256':hashlib.sha256(protocol.read_bytes()).hexdigest(), | |
| 'elapsed_seconds':time.perf_counter()-started,'environment':{'python':platform.python_version(),'numpy':np.__version__,'device':'CPU'}, | |
| 'records':len(rows),'online_segment_queries':sum(r['rays'] for r in rows), | |
| 'summary':summary,'comparisons':comparisons,'prior_preparation':preparation, | |
| 'limitations':['Not matched time or memory; certificate queries perform additional clearance arithmetic.', | |
| 'Finite direct-light renderer with 36 emitters and fixed receiver points.', | |
| 'Current geometry is authoritative; this is not a solution to truly unobservable geometry changes.', | |
| 'CPU batch timings exclude common prior preparation, analytic bound preparation and offline reference audits.', | |
| 'Unsafe ablation deliberately violates validity; its expected MSE includes bias.', | |
| 'No retraining, GPU benchmark, commercial upscaler or unified SR/RR/FG validation.']} | |
| (out/'innovation_report.json').write_text(json.dumps(report,indent=2)+'\n') | |
| np.savez_compressed(out/'innovation_frames.npz',**images) | |
| print(json.dumps({'records':len(rows),'queries':report['online_segment_queries'],'primary':[x for x in comparisons if x['phase']=='smooth_motion' and x['baseline']=='epoch_eliminate']},indent=2)) | |
| if __name__=='__main__': | |
| p=argparse.ArgumentParser();p.add_argument('--output',default='innovation_reproduced');run(p.parse_args().output) | |