--- license: cc --- ## Install following python libs ``` pip3 install tensorflow pip3 install tensorflowjs pip3 install tf2onnx pip3 install onnxruntime pip3 install pillow pip3 install optimum[exporters] ``` Change to compatible version of numpy for tensorflow ``` pip3 uninstall numpy pip3 install numpy==1.23.5 ``` ## Node Install Download install project dependencies. ``` npm install ``` ### Summary of Commands: - Run the Node training script to save the Layers Model. - Convert tfjs_layers_model → tfjs_graph_model - Convert graph model to onnx - Validate onnx structure - Test Model # 1. Create Tensorflow model in node This will loop through the training images taking base folder name as the label for the images to be associated against. Once complete saved-model/model.json is created. ``` node generate.js ``` # 2. Convert Model Convert from layers to graph model this is required to generate an onnx from tf2onnx ``` tensorflowjs_converter --input_format=tfjs_layers_model \ --output_format=tfjs_graph_model \ ./saved-model/layers-model/model.json \ ./saved-model/graph-model ``` # 3. Convert to ONNX Model This will convert to a ONNX model to be used with transformers.js on web or nodejs. ``` python3 -m tf2onnx.convert --tfjs ./saved-model/graph-model/model.json --output ./saved-model/model.onnx ``` Unable to figure a way to use Optimum with tensorflow.js models atm.. # 4. Validate ONNX Make sure the conversion worked and no issues ``` python3 validate_onnx.py ``` # 5. Test ONNX Model python update the image path in the code to point to an image to confirm working as expected - I tested against one of the trained image that should give 1. ``` python3 test_image.py ``` Inference outputs: [array([[0., 1.]], dtype=float32)] # 5. Test ONNX Model JS onnxruntime-node update the image path in the code to point to an image to confirm working as expected ``` node onnxruntime-node ``` Inference outputs: Tensor { cpuData: Float32Array(2) [ 0, 1 ], dataLocation: 'cpu', type: 'float32', dims: [ 1, 2 ], size: 2 }