# Public ML model zoo

This is the model zoo for public models used in Shodan vector core examples.

## Model discription

### person_detection.tflite

The person presence detection quantized model from https://github.com/tensorflow/tflite-micro/blob/main/tensorflow/lite/micro/models/person_detect.tflite

### mobilenet_v1_0.25_224_float.tflite

Mobilenet V1 float-point model from https://tfhub.dev/tensorflow/lite-model/mobilenet_v1_0.25_224/1/default/1?lite-format=tflite

### mobilenet_v1_0.25_224_quant.tflite

Mobilenet V1 quantized model from https://tfhub.dev/tensorflow/lite-model/mobilenet_v1_0.25_224_quantized/1/default/1?lite-format=tflite

### mobilenet_v2_1.0_224_quant.tflite

Mobilenet V2 quantized model from https://tfhub.dev/tensorflow/lite-model/mobilenet_v2_1.0_224_quantized/1/default/1?lite-format=tflite

### hps_quant.tflite

HPS (Human Presence Sensor) non-tiled quantized model from https://chromium.googlesource.com/chromiumos/platform/hps-firmware/+/6cdea6d1158a8cd3238b8ae4f744fdb494779c80/models/shared.tflite

## Visualize the model

For tflite models, use the [web-based visualization tool](https://lutzroeder.github.io/netron/) to
inspect the file. The tool supports drag and drop or file GUI.

## Test data

Test data for sample model inputs are in the "test_data" directory. Currently, only test data for the Human Presence Sensor model are included.

### hps_0-6.jpg

Test image files for Human Presence Sensor model, from ChromeOS codebase.

## Model executables

For each model, the corresponding model executable under `iree_exec` can be
built with the .c/.h files using `sw/vec_iree` project as library. They can be
run as unit tests via lit framework using Renode or QEMU.
