litert-models / conversion /check_fire_runtime216.py
unicorn who dev
Complete FireViewer Android learning SDK, source and verification records
dee7f43 verified
Raw History Blame Contribute Delete
2.31 kB
"""Run each delivery with the same TensorFlow Lite release as Android (Linux ABI)."""
import os
os.environ.update(CUDA_VISIBLE_DEVICES='',TF_CPP_MIN_LOG_LEVEL='2',TF_NUM_INTRAOP_THREADS='4',TF_NUM_INTEROP_THREADS='2')
import sys,json,hashlib,tempfile
from pathlib import Path
import tensorflow as tf,numpy as np
root=Path('/workspace/vds-litert-batch2')
for key in sys.argv[1:]:
out=root/'learning'/key;artifact=out/'model.tflite'
def load():
i=tf.lite.Interpreter(model_path=str(artifact),num_threads=4,experimental_op_resolver_type=tf.lite.experimental.OpResolverType.BUILTIN_WITHOUT_DEFAULT_DELEGATES)
return i,{n:i.get_signature_runner(n) for n in ['infer','train','save','restore']}
i,s=load();x=np.random.default_rng(420).uniform(0,1,(1,3,128,192)).astype(np.float32)
if 'dinov3' in key:
y=np.zeros((1,3,448,448),np.float32);y[:,2]=1;y[:,0,100:250,150:300]=1;y[:,1,160:170,200:210]=1
targets={'y':y,'presence':np.array([[1,0]],np.float32),'abstention':np.array([0],np.float32),'supervision':np.ones(4,np.float32)}
else:
y=np.zeros((1,100,6),np.float32);y[0,0]=[.2,.2,.4,.5,0,1];y[0,1]=[.6,.5,.8,.8,1,1];targets={'y':y}
before=s['infer'](x=x);loss=float(s['train'](x=x,**targets,learning_rate=np.float32(.001))['loss']);assert np.isfinite(loss)
after=s['infer'](x=x);assert any(not np.array_equal(before[n],after[n]) for n in before)
with tempfile.TemporaryDirectory() as d:
path=np.array(str(Path(d)/'weights'),dtype=np.bytes_);s['save'](checkpoint_path=path)
j,t=load();t['restore'](checkpoint_path=path)
for n,v in after.items():np.testing.assert_array_equal(v,t['infer'](x=x)[n])
for runner in [s,t]:runner['train'](x=x,**targets,learning_rate=np.float32(.001))
a=s['infer'](x=x);b=t['infer'](x=x)
for n in a:np.testing.assert_array_equal(a[n],b[n])
report={'key':key,'runtime':tf.__version__,'platform':'Linux x86_64; same LiteRT release as Android, different ABI','sha256':hashlib.sha256(artifact.read_bytes()).hexdigest(),'train':True,'loss':loss,'restart_exact':True,'optimizer_resume_exact':True,'two_object_fixture':'dinov3' not in key}
(out/'runtime216_validation.json').write_text(json.dumps(report,indent=2)+'\n');print(json.dumps(report),flush=True)
del i,s,j,t