Skip to content
heartKIT
User guide
HELIA

Model Exporting

Export mode is used to convert the trained TensorFlow model into a format that can be used for deployment onto Ambiq’s family of SoCs. Currently, the command will convert the TensorFlow model into both TensorFlow Lite (TFL) and TensorFlow Lite for micro-controller (TFLM) variants. The command will also verify the models’ outputs match. The activations and weights can be quantized by configuring the quantization section in the configuration file or by setting the quantization parameter in the code.

  1. Load the configuration data (e.g. configuration.json)
  2. Load the test data (e.g. test.pkl)
  3. Load the trained model (e.g. model.keras)
  4. Quantize the model (e.g. 16x8)
  5. Convert the model (e.g. TFL, TFLM)
  6. Verify the models’ outputs match
  7. Save artifacts (e.g. model.tflite)

Example configuration

modes-export-1.json150 lines · JSONDownload
Show full exampleCollapse example
modes-export-1.json
{
"name": "arr-2-eff-sm",
"project": "hk-rhythm-2",
"job_dir": "./results/arr-2-eff-sm",
"verbose": 2,
"datasets": [
{
"name": "ptbxl",
"params": {
"path": "./datasets/ptbxl"
}
}
],
"num_classes": 2,
"class_map": {
"0": 0,
"7": 1,
"8": 1
},
"class_names": [
"NORMAL",
"AFIB/AFL"
],
"class_weights": "balanced",
"sampling_rate": 100,
"frame_size": 512,
"samples_per_patient": [
10,
10
],
"val_samples_per_patient": [
5,
5
],
"test_samples_per_patient": [
5,
5
],
"val_patients": 0.2,
"val_size": 20000,
"test_size": 20000,
"batch_size": 256,
"buffer_size": 20000,
"epochs": 100,
"steps_per_epoch": 50,
"val_metric": "loss",
"lr_rate": 0.001,
"lr_cycles": 1,
"threshold": 0.75,
"val_metric_threshold": 0.98,
"tflm_var_name": "g_rhythm_model",
"tflm_file": "rhythm_model_buffer.h",
"backend": "pc",
"demo_size": 896,
"display_report": true,
"quantization": {
"qat": false,
"format": "INT8",
"io_type": "int8",
"conversion": "CONCRETE",
"debug": false
},
"preprocesses": [
{
"name": "layer_norm",
"params": {
"epsilon": 0.01,
"name": "znorm"
}
}
],
"augmentations": [],
"model_file": "model.keras",
"use_logits": false,
"architecture": {
"name": "efficientnetv2",
"params": {
"input_filters": 16,
"input_kernel_size": [
1,
9
],
"input_strides": [
1,
2
],
"blocks": [
{
"filters": 24,
"depth": 2,
"kernel_size": [
1,
9
],
"strides": [
1,
2
],
"ex_ratio": 1,
"se_ratio": 2
},
{
"filters": 32,
"depth": 2,
"kernel_size": [
1,
9
],
"strides": [
1,
2
],
"ex_ratio": 1,
"se_ratio": 2
},
{
"filters": 40,
"depth": 2,
"kernel_size": [
1,
9
],
"strides": [
1,
2
],
"ex_ratio": 1,
"se_ratio": 2
},
{
"filters": 48,
"depth": 1,
"kernel_size": [
1,
9
],
"strides": [
1,
2
],
"ex_ratio": 1,
"se_ratio": 2
}
],
"output_filters": 0,
"include_top": true,
"use_logits": true
}
}
}
{
    "name": "arr-2-eff-sm",
    "project": "hk-rhythm-2",
    "job_dir": "./results/arr-2-eff-sm",
    "verbose": 2,
    "datasets": [
        {
            "name": "ptbxl",
… 142 more lines

Load configuration and test data

Load trained model

Quantize model

Convert model

Verify outputs

Save deployment artifacts


The following command will export a rhythm model using the reference configuration.

Terminal
heartkit --task rhythm --mode export --config ./configuration.json

The model can be evaluated using the following snippet:

Python example
task = hk.TaskFactory.get("rhythm")
params = hk.HKTaskParams(...)
task.export(params)

Example configuration

modes-export-4.py82 lines · PYTHONDownload
Show full exampleCollapse example
modes-export-4.py
hk.HKTaskParams(
name="arr-2-eff-sm",
project="hk-rhythm-2",
job_dir="./results/arr-2-eff-sm",
verbose=2,
datasets=[hk.NamedParams(
name="ptbxl",
params=dict(
path="./datasets/ptbxl"
)
)],
num_classes=2,
class_map={
"0": 0,
"7": 1,
"8": 1
},
class_names=[
"NORMAL", "AFIB/AFL"
],
class_weights="balanced",
sampling_rate=100,
frame_size=512,
samples_per_patient=[10, 10],
val_samples_per_patient=[5, 5],
test_samples_per_patient=[5, 5],
val_patients=0.20,
val_size=20000,
test_size=20000,
batch_size=256,
buffer_size=20000,
epochs=100,
steps_per_epoch=50,
val_metric="loss",
lr_rate=1e-3,
lr_cycles=1,
threshold=0.75,
val_metric_threshold=0.98,
tflm_var_name="g_rhythm_model",
tflm_file="rhythm_model_buffer.h",
backend="pc",
demo_size=896,
display_report=True,
quantization=hk.QuantizationParams(
qat=False,
format="INT8",
io_type="int8",
conversion="CONCRETE",
debug=False
),
preprocesses=[
hk.NamedParams(
name="layer_norm",
params=dict(
epsilon=0.01,
name="znorm"
)
)
],
augmentations=[
],
model_file="model.keras",
use_logits=False,
architecture=hk.NamedParams(
name="efficientnetv2",
params=dict(
input_filters=16,
input_kernel_size=[1, 9],
input_strides=[1, 2],
blocks=[
{"filters": 24, "depth": 2, "kernel_size": [1, 9], "strides": [1, 2], "ex_ratio": 1, "se_ratio": 2},
{"filters": 32, "depth": 2, "kernel_size": [1, 9], "strides": [1, 2], "ex_ratio": 1, "se_ratio": 2},
{"filters": 40, "depth": 2, "kernel_size": [1, 9], "strides": [1, 2], "ex_ratio": 1, "se_ratio": 2},
{"filters": 48, "depth": 1, "kernel_size": [1, 9], "strides": [1, 2], "ex_ratio": 1, "se_ratio": 2}
],
output_filters=0,
include_top=True,
use_logits=True
)
}
)

hk.HKTaskParams(
    name="arr-2-eff-sm",
    project="hk-rhythm-2",
    job_dir="./results/arr-2-eff-sm",
    verbose=2,
    datasets=[hk.NamedParams(
        name="ptbxl",
… 74 more lines

Please refer to HKTaskParams for the list of arguments that can be used with the export command.