|
import argparse |
|
import os |
|
os.sys.path += ['expman'] |
|
import json |
|
from glob import glob |
|
import subprocess |
|
from tqdm import tqdm |
|
import expman |
|
|
|
|
|
def main(args): |
|
|
|
variants = ( |
|
('' , []), |
|
|
|
|
|
|
|
) |
|
|
|
converted_models = [] |
|
|
|
exps = expman.gather(args.run).filter(args.filter) |
|
for exp_name, exp in tqdm(exps.items()): |
|
|
|
|
|
ckpt = exp.path_to('best_savedmodel/') |
|
|
|
for suffix, extra_args in variants: |
|
name = exp_name + suffix |
|
out = os.path.join(args.output, name) if args.output else exp.path_to(f'tfjs_graph{suffix}') |
|
|
|
if args.force or not os.path.exists(out): |
|
os.makedirs(out, exist_ok=True) |
|
cmd = ['tensorflowjs_converter', |
|
'--input_format', 'tf_saved_model', |
|
'--output_format', 'tfjs_graph_model'] + extra_args + [ckpt, out] |
|
subprocess.call(cmd) |
|
|
|
converted_models.append(name) |
|
|
|
js_output = 'models = ' + json.dumps(converted_models) |
|
if args.output: |
|
js_filename = os.path.join(args.output, 'models.js') |
|
with open(js_filename, 'w') as f: |
|
f.write(js_output) |
|
else: |
|
print(js_output) |
|
|
|
|
|
if __name__ == '__main__': |
|
parser = argparse.ArgumentParser(description='Convert runs to tfjs') |
|
parser.add_argument('-f', '--filter', default={}, type=expman.exp_filter) |
|
parser.add_argument('run', default='runs/') |
|
parser.add_argument('--output', help='output dir for models, defaults to run dir') |
|
parser.add_argument('--force', action='store_true', default=False) |
|
|
|
args = parser.parse_args() |
|
main(args) |
|
|