Skip to main content

Generate portable C inference code from Keras or PyTorch model

Project description

Copyright 2021 (c) Pierre-Emmanuel Novac penovac@unice.fr Université Côte d'Azur, CNRS, LEAT. All rights reserved.

Qualia-CodeGen-Core

Converts a pre-trained Keras .h5 or PyTorch model to C code for inference.

Generated C code uses channels_last data format.

Supported layers

  • Activation: ReLU (combined to previous Conv1D, Dense, MaxPooling1D, AveragePooling1D AddV2), Softmax
  • Conv1D: optional bias, valid padding only
  • Dense: optional bias
  • MaxPooling1D: valid padding only
  • AveragePooling1D: valid padding only
  • Flatten: implies reordering next layer's kernel for data format conversion
  • ZeroPadding1D: combined with next Conv1D
  • AddV2

Dependencies

python >= 3.9

Python:

jinja2
numpy

Keras

Python:

tensorflow >= 2.6.0
keras >= 2.6.0 

PyTorch

Python:

torch >= 1.8.0

Installation

pip install -e .

Usage

Generate C code from Keras .h5

qualia_codegen <model.h5> <output directory>

Use in your C code

Include the model: (can also be built as a separate object)

#include "model.h"

Allocate inputs and outputs arrays with correct dimensions. Remember that inputs must have channels_last data format.

Call it in your C code:

cnn(inputs, outputs);

Add the source file model.c to your build system. It includes all the other source files for layers, don't add these to the build system.

Examples

See the src/qualia_codegen_core/examples/Linux directory for a demo console application to evaluate model accuracy.

src/qualia_codegen_core/examples/qualia_codegen-NucleoL476RG contains an STM32CubeIDE project for the Nucleo-L476RG board that's currently broken due to some recent changes

Documentation

Nothing much…

Source tree

src/qualia_codegen_core/Allocator.py: manages activation buffer allocation. Tries to group all buffers into one, except when they cannot be overwritten (dependencies).

src/qualia_codegen_core/Converter.py: the actual conversion code, parses a Keras model and use the template file associated to each layer to generate C code. When weights have to be written, they are optionally quantized to fixed-point by setting the appropriate parameters of Converter constructor (see its definition)

src/qualia_codegen_core/Validator.py: work in progress, should contain functions to check if a model can be successfully converted. For now only check activation function.

src/qualia_codegen_core/assets/: contains the templates to generate C inference code

src/qualia_codegen_core/assets/layers/: contains the implementation of the various supported layers

src/qualia_codegen_core/assets/layers/weights: contains the support for the trainable layers weights

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

qualia_codegen_core-2.5.0.tar.gz (7.5 MB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

qualia_codegen_core-2.5.0-py3-none-any.whl (8.3 MB view details)

Uploaded Python 3

File details

Details for the file qualia_codegen_core-2.5.0.tar.gz.

File metadata

  • Download URL: qualia_codegen_core-2.5.0.tar.gz
  • Upload date:
  • Size: 7.5 MB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: pdm/2.22.3 CPython/3.13.2 Linux/6.13.3-arch1-1

File hashes

Hashes for qualia_codegen_core-2.5.0.tar.gz
Algorithm Hash digest
SHA256 48faad90b25731fe8d05b9eb38c5e9eed593bf65570345d405ea19b5343f16ca
MD5 201aa4c7b46773463d50d7df6def04c2
BLAKE2b-256 bd0e6220af2845c55bca99b8054e6a3cb0ea128a59649c55006a3a9a764e3492

See more details on using hashes here.

File details

Details for the file qualia_codegen_core-2.5.0-py3-none-any.whl.

File metadata

  • Download URL: qualia_codegen_core-2.5.0-py3-none-any.whl
  • Upload date:
  • Size: 8.3 MB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: pdm/2.22.3 CPython/3.13.2 Linux/6.13.3-arch1-1

File hashes

Hashes for qualia_codegen_core-2.5.0-py3-none-any.whl
Algorithm Hash digest
SHA256 55d4940336187846609654e92ee2916a2bab31a0a9186f2aeeb946a62c463315
MD5 9a02abce1a87d54e699d5960151bffde
BLAKE2b-256 82af01ca7c06f5319bd1d22fdaeae62fe93aedb8c000f5f184cd91b7fd49adca

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page