Task-Level Demo
Introduction
Section titled “Introduction”Each task in heartKIT has a corresponding demo mode that allows you to run a task-level demonstration using the specified backend inference engine (e.g. PC or EVB). This is useful to showcase the model’s performance in real-time and to verify its accuracy in a real-world scenario. Similar to other modes, the demo can be invoked either via CLI or within heartkit python package. At a high level, the demo mode performs the following actions based on the provided configuration parameters:
- Load the configuration data (e.g.
configuration.json) - Load the desired datasets (e.g.
icentia11k) - Load the trained model (e.g.
model.keras) - Initialize inference engine backend (e.g.
pcorevb) - Generate input data (e.g.
x, y) - Perform inference on backend (e.g.
model.predict) - Generate report (e.g.
report.html)
Backend Inference Engines
Section titled “Backend Inference Engines”heartKIT includes two built-in backend inference engines: PC and EVB. Additional backends can be easily added to the heartKIT framework by creating a new backend class and registering it to the backend factory, BackendFactory.
PC Backend Inference Engine
Section titled “PC Backend Inference Engine”The PC backend is used to run the task-level demo on the local machine via Keras. This is useful for quick testing and debugging of the model.
- Create / modify configuration file (e.g.
configuration.json) - Ensure “pc” is selected as the backend in configuration file.
- Run demo
heartkit --mode demo --task segmentation --config ./configuration.json - HTML report will be saved to
${job_dir}/report.html
EVB Backend Inference Engine
Section titled “EVB Backend Inference Engine”The EVB backend is used to run the task-level demo on an Ambiq EVB. This is useful to showcase the model’s performance in real-time and to verify its accuracy on deployed hardware.
- Create / modify configuration file (e.g.
configuration.json) - Ensure “evb” is selected as the
backendin configuration file. - Plug EVB into PC via two USB-C cables.
- Run demo
heartkit --mode demo --task beat --config ./configuration.json - HTML report will be saved to
${job_dir}/report.html
Bring-Your-Own-Backend Engine
Section titled “Bring-Your-Own-Backend Engine”Similar to datasets, dataloaders, tasks, and models, the demo mode can be customized to use your own backend inference engine. heartKIT includes a backend factory (BackendFactory) that is used to create and run the backend engine.
How it Works
Section titled “How it Works”-
Create a Backend: Define a new backend class that inherits from the HKInferenceBackend base class and implements the required abstract methods.
Python example import heartkit as hkclass CustomBackend(hk.HKInferenceBackend):"""Custom backend inference engine"""def __init__(self, params: hk.HKTaskParams) -> None:self.params = paramsdef open(self):"""Open backend"""passdef close(self):"""Close backend"""passdef set_inputs(self, inputs: npt.NDArray):"""Set inputs"""passdef perform_inference(self):"""Perform inference"""passdef get_outputs(self) -> npt.NDArray:"""Get outputs"""pass -
Register the Backend: Register the new backend with the BackendFactory by calling the
registermethod. This method takes the backend name and the backend class as arguments.Python example import heartkit as hk# Register the custom backendhk.BackendFactory.register("custom", CustomBackend) -
Use the Backend: The new backend can now be used by setting the
backendflag in the demo configuration settings.Python example import heartkit as hk# Define demo parametersparams = hk.HKTaskParams(...)params.backend = "custom"# Load the desired tasktask = hk.TaskFactory.get("rhythm")# Run the task-level demo using the custom backendtask.demo(params=params)
The following is an example of a task-level demo report for the segmentation task. Upon running segmentation, the demo will extract inter-beat-intervals (IBIs) and report various HR and HRV metrics. These metrics are computed using Ambiq’s physioKIT Python Package- a toolkit to process raw ambulatory bio-signals.
heartkit -m export -t segmentation -c ./configuration.jsonfrom pathlib import Pathimport heartkit as hk
task = hk.TaskFactory.get("segmentation")task.export(hk.HKTaskParams( job_dir=Path("./results/segmentation-class-2"), datasets=[hk.NamedParams( name="icentia11k", params=dict( path=Path("./datasets/icentia11k") ) )], num_classes=2, class_map={ 0: 0, 1: 1, 2: 1 }, class_names=[ "NONE", "AFIB/AFL" ], sampling_rate=100, frame_size=256, backend="pc", model_file=Path("./results/segmentation-class-2/model.keras"),))Arguments
Section titled “Arguments”Please refer to HKTaskParams for the list of arguments that can be used with the demo command.