TI Tiny ML ModelZoo
v1.5.0

Contents

  • 1. Introduction
    • 1.1. What is Tiny ML ModelZoo?
      • 1.1.1. Overview
      • 1.1.2. Target Applications
      • 1.1.3. Key Capabilities
      • 1.1.4. What’s New in 1.5.0
      • 1.1.5. Repository Structure
      • 1.1.6. Workflow Summary
      • 1.1.7. Next Steps
    • 1.2. System Architecture
      • 1.2.1. High-Level Architecture
      • 1.2.2. Packages and How They Are Delivered
      • 1.2.3. Component Details
        • 1.2.3.1. tinyml-modelzoo
        • 1.2.3.2. tinyml_modelmaker
        • 1.2.3.3. tinyml_tinyverse
        • 1.2.3.4. tinyml_torchmodelopt
      • 1.2.4. Which Install Do I Need?
      • 1.2.5. Data Flow
      • 1.2.6. Configuration System
      • 1.2.7. Integration Points
    • 1.3. Terminology
      • 1.3.1. General ML Terms
      • 1.3.2. Tiny ML ModelZoo Terms
      • 1.3.3. Device and Hardware Terms
      • 1.3.4. Configuration Terms
      • 1.3.5. Model Size Conventions
      • 1.3.6. Abbreviations
    • 1.4. Overview
  • 2. Installation
    • 2.1. Prerequisites
      • 2.1.1. System Requirements
      • 2.1.2. Python
      • 2.1.3. pip and Git
      • 2.1.4. TI Compiler Tools (for compilation)
      • 2.1.5. Verification Checklist
    • 2.2. Wheel Installation
      • 2.2.1. Quick Install
      • 2.2.2. What Is in the Wheel
      • 2.2.3. Running with the Wheel Install
      • 2.2.4. Verifying Installation
      • 2.2.5. Updating and Uninstalling
      • 2.2.6. Limitations of the Wheel Install
      • 2.2.7. Troubleshooting
      • 2.2.8. Next Steps
    • 2.3. Clone Installation
      • 2.3.1. Step 1: Clone the Repository
      • 2.3.2. Step 2: Create a Virtual Environment and Install
      • 2.3.3. Step 3: Verify Installation
      • 2.3.4. Step 4: Configure the Compiler
      • 2.3.5. Step 5: Run the Hello World Example
      • 2.3.6. Folder Layout
      • 2.3.7. Common Developer Tasks
      • 2.3.8. Updating
      • 2.3.9. Troubleshooting
      • 2.3.10. Next Steps
    • 2.4. Windows Setup
      • 2.4.1. Native Windows
      • 2.4.2. WSL2
        • 2.4.2.1. Behind a Proxy (WSL)
      • 2.4.3. Common Windows Issues
      • 2.4.4. Next Steps
    • 2.5. Linux Setup
      • 2.5.1. System Preparation
      • 2.5.2. Install Python 3.10
      • 2.5.3. Installation
      • 2.5.4. Verification
      • 2.5.5. GPU Setup (Optional)
      • 2.5.6. Shell Configuration
      • 2.5.7. Troubleshooting
      • 2.5.8. Next Steps
    • 2.6. macOS Setup
      • 2.6.1. Supported Hardware
      • 2.6.2. Prerequisites
      • 2.6.3. Installation
      • 2.6.4. Using the Apple GPU (MPS)
      • 2.6.5. Notes
      • 2.6.6. Next Steps
    • 2.7. Environment Variables
      • 2.7.1. How the Paths Are Resolved
      • 2.7.2. Which Variable for Which Device
      • 2.7.3. Setting Variables
      • 2.7.4. Installing the Compilers
      • 2.7.5. Verifying
      • 2.7.6. Troubleshooting
      • 2.7.7. Next Steps
    • 2.8. Agent Skill (Claude Code)
    • 2.9. Which Install Should I Choose?
    • 2.10. Quick Start
  • 3. Getting Started
    • 3.1. Quickstart
      • 3.1.1. Prerequisites
      • 3.1.2. Step 1: Get the Example Config
      • 3.1.3. Step 2: Run Hello World
      • 3.1.4. Step 3: View Results
      • 3.1.5. Step 4: Read the Config
      • 3.1.6. Step 5: Try Another Example
      • 3.1.7. Next Steps
    • 3.2. First Example
      • 3.2.1. Overview
      • 3.2.2. Step 1: The Configuration
      • 3.2.3. Step 2: Run
      • 3.2.4. Step 3: Read the Training Log
      • 3.2.5. Step 4: Examine the Output Folder
      • 3.2.6. Step 5: Customize
      • 3.2.7. Next Steps
    • 3.3. Running Examples
      • 3.3.1. Finding Examples
      • 3.3.2. The Three Run Scripts
      • 3.3.3. Reading an Example Config
      • 3.3.4. Customizing
      • 3.3.5. Output Location
      • 3.3.6. Troubleshooting
      • 3.3.7. Next Steps
    • 3.4. Understanding Config
      • 3.4.1. Minimal Config
      • 3.4.2. Common Keys
      • 3.4.3. Next Steps
    • 3.5. How to Create a ModelZoo Config YAML
      • 3.5.1. 1. Config Skeleton and 4-Step Recipe
        • 3.5.1.1. 4-Step Recipe
      • 3.5.2. 2. Feature Extraction: Preset vs. Custom
        • 3.5.2.1. Preset example (classification)
        • 3.5.2.2. Custom transforms example
        • 3.5.2.3. Windowing-only example (anomaly detection)
        • 3.5.2.4. How the task type changes the config
        • 3.5.2.5. Selecting input channels with variables
      • 3.5.3. 3. Useful Knobs
        • 3.5.3.1. Training
        • 3.5.3.2. Quantization
        • 3.5.3.3. Compilation
        • 3.5.3.4. Output location
      • 3.5.4. Common Pitfalls
    • 3.6. Understanding the Run Output
      • 3.6.1. What a Run Produces
      • 3.6.2. Float vs. Quantized Model
      • 3.6.3. Golden Vectors: user_input_config.h
      • 3.6.4. Golden Vectors: test_vector.c
      • 3.6.5. PCA Graphs: Are Your Features Separable?
      • 3.6.6. Post-Training Analysis: Classification
      • 3.6.7. Post-Training Analysis: Other Tasks
      • 3.6.8. Compilation Output: What Goes on the Device
      • 3.6.9. Next Step
    • 3.7. 5-Minute Quickstart
  • 4. Supported Task Types
    • 4.1. Time Series Classification
      • 4.1.1. Overview
      • 4.1.2. Configuration
      • 4.1.3. Dataset Format
      • 4.1.4. Task Types and Related Settings
      • 4.1.5. Available Models
      • 4.1.6. Feature Extraction
      • 4.1.7. Metrics
      • 4.1.8. Example: Arc Fault Detection
      • 4.1.9. Tips
      • 4.1.10. See Also
    • 4.2. Time Series Regression
      • 4.2.1. Overview
      • 4.2.2. Configuration
      • 4.2.3. Dataset Format
      • 4.2.4. Task Settings
      • 4.2.5. Available Models
      • 4.2.6. Key Configuration
      • 4.2.7. Metrics
      • 4.2.8. Tips
      • 4.2.9. See Also
    • 4.3. Time Series Forecasting
      • 4.3.1. Overview
      • 4.3.2. Configuration
      • 4.3.3. Key Parameters
      • 4.3.4. Dataset Format
      • 4.3.5. Task Settings
      • 4.3.6. Available Models
      • 4.3.7. Windowing Example
      • 4.3.8. Metrics
      • 4.3.9. Example: PMSM Temperature Forecasting
      • 4.3.10. Important Notes
      • 4.3.11. Tips
      • 4.3.12. See Also
    • 4.4. Anomaly Detection
      • 4.4.1. Overview
      • 4.4.2. How It Works
      • 4.4.3. Autoencoder Architecture
        • 4.4.3.1. What is an Autoencoder?
        • 4.4.3.2. Architecture Diagram
        • 4.4.3.3. Dimensionality Flow
        • 4.4.3.4. Key Components
        • 4.4.3.5. Training with MSE Loss
        • 4.4.3.6. Semi-Supervised Learning: Normal Data Only
        • 4.4.3.7. Advantages and Limitations
      • 4.4.4. Configuration
        • 4.4.4.1. New in 1.5.0: NPU quantization
      • 4.4.5. Dataset Format
      • 4.4.6. Available Models
      • 4.4.7. Training Workflow
        • 4.4.7.1. Overview
        • 4.4.7.2. Pipeline Steps in Detail
        • 4.4.7.3. Running the Pipeline
        • 4.4.7.4. Output Files
        • 4.4.7.5. Understanding Training Logs
      • 4.4.8. Threshold Selection
        • 4.4.8.1. Formula
        • 4.4.8.2. k-Value Impact
        • 4.4.8.3. threshold_performance.csv
        • 4.4.8.4. How to Choose k Based on Application
      • 4.4.9. Evaluation Metrics
        • 4.4.9.1. Confusion Matrix
        • 4.4.9.2. Metric Definitions
        • 4.4.9.3. Metric Summary
      • 4.4.10. What If You Don’t Have Anomaly Data?
        • 4.4.10.1. What You CAN Do
        • 4.4.10.2. What You CANNOT Do
      • 4.4.11. Semi-Supervised vs Supervised
      • 4.4.12. Example: Motor Bearing Anomaly
      • 4.4.13. Tips
      • 4.4.14. See Also
    • 4.5. Image Classification
      • 4.5.1. Overview
      • 4.5.2. Task Settings
      • 4.5.3. Configuration
      • 4.5.4. Dataset Format
      • 4.5.5. Feature Extraction Presets
      • 4.5.6. Available Models
      • 4.5.7. Current Limitations
      • 4.5.8. Examples
      • 4.5.9. Preparing Image Data
      • 4.5.10. Tips
      • 4.5.11. See Also
    • 4.6. Audio Classification
      • 4.6.1. Overview
      • 4.6.2. Task Settings
      • 4.6.3. Configuration
      • 4.6.4. Dataset Format
      • 4.6.5. Feature Extraction Presets
      • 4.6.6. Available Models
      • 4.6.7. Metrics
      • 4.6.8. Tips
      • 4.6.9. See Also
    • 4.7. Radar Classification
      • 4.7.1. Overview
      • 4.7.2. Task Settings
      • 4.7.3. Configuration
      • 4.7.4. Dataset Format
      • 4.7.5. Available Models
      • 4.7.6. Metrics
      • 4.7.7. Tips
      • 4.7.8. See Also
    • 4.8. Task Overview
    • 4.9. Task Type Strings and Modules
    • 4.10. Choosing the Right Task
  • 5. Bring Your Own Data
    • 5.1. Classification Dataset Format
      • 5.1.1. Directory Structure
      • 5.1.2. Data File Format
      • 5.1.3. Supported File Types
      • 5.1.4. Annotations (Optional)
      • 5.1.5. Configuration
      • 5.1.6. Dataset Splitting Modes
      • 5.1.7. Example: 3-Class Vibration Data
      • 5.1.8. Class Balancing
      • 5.1.9. Common Issues
      • 5.1.10. Key Differences: Classification vs Regression vs Forecasting
    • 5.2. Regression Dataset Format
      • 5.2.1. Directory Structure
      • 5.2.2. Data File Format
      • 5.2.3. Time Column Handling
      • 5.2.4. Annotation Files (Optional)
      • 5.2.5. Configuration
      • 5.2.6. Target Processing
      • 5.2.7. Complete Example
      • 5.2.8. Troubleshooting
      • 5.2.9. Best Practices
      • 5.2.10. Common Issues
      • 5.2.11. See Also
    • 5.3. Forecasting Dataset Format
      • 5.3.1. Directory Structure
      • 5.3.2. Data File Format
      • 5.3.3. Key Difference from Regression
      • 5.3.4. Configuration
      • 5.3.5. Variable Specification Options
      • 5.3.6. Windowing Behavior
      • 5.3.7. Complete Example
      • 5.3.8. Important Notes
      • 5.3.9. Minimum Data Requirements
      • 5.3.10. Common Issues
      • 5.3.11. Annotations and Splits
      • 5.3.12. See Also
    • 5.4. Anomaly Detection Dataset Format
      • 5.4.1. Folder Structure
      • 5.4.2. Concrete Example
      • 5.4.3. Data Splitting Strategy
      • 5.4.4. What If You Don’t Have Anomaly Data?
      • 5.4.5. Datafile Format (CSV)
      • 5.4.6. See Also
    • 5.5. Audio and Radar Dataset Format
      • 5.5.1. Audio Classification
        • 5.5.1.1. Directory structure
        • 5.5.1.2. Preparing public datasets
        • 5.5.1.3. Config
      • 5.5.2. Radar Classification
        • 5.5.2.1. Directory structure
        • 5.5.2.2. Preparing the public dataset
        • 5.5.2.3. Config
      • 5.5.3. See Also
    • 5.6. Data Splitting
      • 5.6.1. Split Methods
      • 5.6.2. Configuration
      • 5.6.3. Annotation File Format
      • 5.6.4. Split Examples
      • 5.6.5. When to Use Each Method
      • 5.6.6. Best Practices
      • 5.6.7. Creating Annotation Files
      • 5.6.8. Verifying Splits
      • 5.6.9. See Also
    • 5.7. Dataset Format Overview
    • 5.8. Supported File Formats
    • 5.9. Data Sources
  • 6. Supported Devices
    • 6.1. Device Overview
      • 6.1.1. Selecting the Device
      • 6.1.2. Complete Device List
        • 6.1.2.1. C2000 F28x (C28x DSP)
        • 6.1.2.2. C2000 F29x (C29x DSP)
        • 6.1.2.3. Arm Cortex-M0+, Cortex-M33 and Cortex-R5F MCUs
        • 6.1.2.4. Connectivity and Radar Devices
      • 6.1.3. Compilation Presets
      • 6.1.4. NPU and Non-NPU Devices
      • 6.1.5. Feature-Extraction Memory Estimation
      • 6.1.6. Choosing a Device
    • 6.2. NPU Guidelines
      • 6.2.1. NPU Devices
      • 6.2.2. How a Model Runs on the NPU
      • 6.2.3. Key Layer Rules
      • 6.2.4. Troubleshooting
    • 6.3. NPU Configuration Guidelines for TI Neural Network Compiler
      • 6.3.1. Table of Contents
      • 6.3.2. Overview
      • 6.3.3. Supported Layer Types
      • 6.3.4. Terminology and Notation
        • 6.3.4.1. Dimension Notation
        • 6.3.4.2. Value Notation
      • 6.3.5. Layer Configuration Constraints
        • 6.3.5.1. FCONV (First Convolution Layer)
        • 6.3.5.2. GCONV (Generic Convolution Layer)
        • 6.3.5.3. DWCONV (Depth-Wise Convolution Layer)
        • 6.3.5.4. PWCONV (Point-Wise Convolution Layer)
        • 6.3.5.5. FC (Fully-Connected Layer)
        • 6.3.5.6. MAXPOOL (Max Pooling Layer)
        • 6.3.5.7. AVGPOOL (Average Pooling Layer)
      • 6.3.6. Optimal Design Patterns
        • 6.3.6.1. Pattern 1: MobileNet-Style Depthwise Separable Convolution
        • 6.3.6.2. Pattern 2: Channel Doubling Progression
        • 6.3.6.3. Pattern 3: Replace Large Kernels with Multiple Small Kernels
        • 6.3.6.4. Pattern 4: Ensure Sufficient FC Input
      • 6.3.7. Common Pitfalls to Avoid
        • 6.3.7.1. 1. Asymmetric Kernel Constraints (Not Both Dimensions Large)
        • 6.3.7.2. 2. Non-m4 Channel Counts
        • 6.3.7.3. 3. Insufficient FC Input Features
        • 6.3.7.4. 4. MaxPool with Both Dimensions > 4
      • 6.3.8. Model Design Checklist
        • 6.3.8.1. Channel Dimensions
        • 6.3.8.2. Kernel Sizes
        • 6.3.8.3. Fully-Connected Layers
        • 6.3.8.4. Pooling
        • 6.3.8.5. Depthwise Convolutions
        • 6.3.8.6. General
      • 6.3.9. Quick Reference Card
      • 6.3.10. References
    • 6.4. C2000 Family
      • 6.4.1. F28x Devices (C28x)
        • 6.4.1.1. New in 1.5.0 for F28x
        • 6.4.1.2. F28P55 (NPU)
        • 6.4.1.3. Other F28x Devices
      • 6.4.2. F29x Devices (C29x)
      • 6.4.3. SDKs and Tools
      • 6.4.4. Typical Applications
      • 6.4.5. Next Steps
    • 6.5. MSPM0 Family
      • 6.5.1. Supported Devices
      • 6.5.2. MSPM0G5187 (NPU)
      • 6.5.3. MSPM0G3507 and MSPM0G3519
      • 6.5.4. Running on the Board
      • 6.5.5. Next Steps
    • 6.6. Connectivity, AM26x, MSPM33 and Radar Devices
      • 6.6.1. Connectivity Devices (CC)
      • 6.6.2. AM26x (AM263, AM263P, AM261)
      • 6.6.3. MSPM33C (MSPM33C32, MSPM33C34)
      • 6.6.4. IWRL6432 (Radar)
      • 6.6.5. Where to Go Next
    • 6.7. Device Families at a Glance
    • 6.8. What’s New for Devices in 1.5.0
    • 6.9. Where to Go Next
  • 7. Examples & Applications
    • 7.1. Running an Example
    • 7.2. Generic Examples (Start Here)
    • 7.3. Timeseries Classification
    • 7.4. Timeseries Regression
    • 7.5. Timeseries Forecasting
    • 7.6. Anomaly Detection
    • 7.7. Audio Classification
    • 7.8. Image Classification
    • 7.9. Radar
      • 7.9.1. Generic Time Series Classification
        • 7.9.1.1. Overview
        • 7.9.1.2. Available Configurations
        • 7.9.1.3. Running the Example
        • 7.9.1.4. Dataset Format
        • 7.9.1.5. Configuration (config.yaml)
        • 7.9.1.6. Output Location
        • 7.9.1.7. Expected Results
        • 7.9.1.8. Variations to Try
        • 7.9.1.9. Next Steps
      • 7.9.2. Generic Timeseries Regression
        • 7.9.2.1. Overview
        • 7.9.2.2. The Dataset
        • 7.9.2.3. Dataset Format
        • 7.9.2.4. Running the Example
        • 7.9.2.5. Configuration
        • 7.9.2.6. Evaluation Metrics
        • 7.9.2.7. Results
        • 7.9.2.8. Output Location
        • 7.9.2.9. Running on Device
        • 7.9.2.10. Next Steps
      • 7.9.3. Generic Timeseries Forecasting
        • 7.9.3.1. Overview
        • 7.9.3.2. The Dataset
        • 7.9.3.3. Dataset Format
        • 7.9.3.4. Running the Example
        • 7.9.3.5. Configuration
        • 7.9.3.6. Evaluation Metrics
        • 7.9.3.7. Results
        • 7.9.3.8. Output Location
        • 7.9.3.9. Running on Device
        • 7.9.3.10. Next Steps
      • 7.9.4. Generic Timeseries Anomaly Detection
        • 7.9.4.1. Overview
        • 7.9.4.2. The Dataset
        • 7.9.4.3. Dataset Format and Splitting
        • 7.9.4.4. Why Frame Size Matters
        • 7.9.4.5. Running the Example
        • 7.9.4.6. Configuration
        • 7.9.4.7. How It Works
        • 7.9.4.8. Results
        • 7.9.4.9. Output Location
        • 7.9.4.10. Running on Device
        • 7.9.4.11. Next Steps
      • 7.9.5. DC Arc Fault Detection
        • 7.9.5.1. Overview
        • 7.9.5.2. Why Arc Fault Detection?
        • 7.9.5.3. Available Configurations
        • 7.9.5.4. Running the Example
        • 7.9.5.5. Configuration (config_dsk.yaml)
        • 7.9.5.6. Configuration for the DSI Dataset
        • 7.9.5.7. Available Models
        • 7.9.5.8. Results from the 1.5.0 Test Run
        • 7.9.5.9. Interpreting Results
        • 7.9.5.10. Deployment Considerations
        • 7.9.5.11. Next Steps
      • 7.9.6. AC Arc Fault
        • 7.9.6.1. Overview
        • 7.9.6.2. Why AC Arc Fault Detection?
        • 7.9.6.3. System Components
        • 7.9.6.4. Running the Example
        • 7.9.6.5. Configuration
        • 7.9.6.6. Dataset
        • 7.9.6.7. Feature Extraction
        • 7.9.6.8. Models
        • 7.9.6.9. Results
        • 7.9.6.10. Training and Deployment Flow
        • 7.9.6.11. References
      • 7.9.7. Motor Bearing Fault
        • 7.9.7.1. Overview
        • 7.9.7.2. Fault Classes
        • 7.9.7.3. Available Configurations
        • 7.9.7.4. Running the Example
        • 7.9.7.5. Configuration (config.yaml)
        • 7.9.7.6. Models
        • 7.9.7.7. Results from the 1.5.0 Test Run
        • 7.9.7.8. Multi-Class Evaluation
        • 7.9.7.9. Dataset Quality Analysis
        • 7.9.7.10. Anomaly Detection Variant
        • 7.9.7.11. Practical Considerations
        • 7.9.7.12. Next Steps
      • 7.9.8. Blower Imbalance
        • 7.9.8.1. Overview
        • 7.9.8.2. Running the Example
        • 7.9.8.3. Configuration
        • 7.9.8.4. Models
        • 7.9.8.5. Results from the 1.5.0 Test Run
        • 7.9.8.6. See Also
      • 7.9.9. Fan Blade Fault Classification
        • 7.9.9.1. Overview
        • 7.9.9.2. Demo Setup
        • 7.9.9.3. Fault Types
        • 7.9.9.4. Available Configurations
        • 7.9.9.5. Running the Example
        • 7.9.9.6. Configuration (config.yaml)
        • 7.9.9.7. Collecting Your Own Data
        • 7.9.9.8. Results
        • 7.9.9.9. Deploying and Live Preview
        • 7.9.9.10. Anomaly Detection Variant
        • 7.9.9.11. See Also
      • 7.9.10. Electrical Fault
        • 7.9.10.1. Overview
        • 7.9.10.2. Dataset Variants
        • 7.9.10.3. Available Configurations
        • 7.9.10.4. Running the Example
        • 7.9.10.5. Configuration (config.yaml)
        • 7.9.10.6. Multicollinearity and Feature Extraction
        • 7.9.10.7. Results from the 1.5.0 Test Run
        • 7.9.10.8. See Also
      • 7.9.11. Grid Stability
        • 7.9.11.1. Overview
        • 7.9.11.2. Preparing the Dataset
        • 7.9.11.3. Running the Example
        • 7.9.11.4. Configuration
        • 7.9.11.5. Understanding the Outputs
        • 7.9.11.6. Results from the 1.5.0 Test Run
        • 7.9.11.7. See Also
      • 7.9.12. Grid Fault Detection
        • 7.9.12.1. Overview
        • 7.9.12.2. Running the Example
        • 7.9.12.3. Configuration
        • 7.9.12.4. Dataset and Feature Extraction
        • 7.9.12.5. Results
        • 7.9.12.6. Deployment
        • 7.9.12.7. See Also
      • 7.9.13. Gas Sensor
        • 7.9.13.1. Overview
        • 7.9.13.2. Preparing the Dataset
        • 7.9.13.3. Running the Example
        • 7.9.13.4. Configuration
        • 7.9.13.5. Quantized vs. Dequantized Output (output_int)
        • 7.9.13.6. Performance on Device
        • 7.9.13.7. Results from the 1.5.0 Test Run
        • 7.9.13.8. See Also
      • 7.9.14. Human Activity Recognition
        • 7.9.14.1. Overview
        • 7.9.14.2. Running the Example
        • 7.9.14.3. Configuration
        • 7.9.14.4. Preparing the WISDM Dataset
        • 7.9.14.5. The CLS_ResCat_3k Model
        • 7.9.14.6. Comparison of Models
        • 7.9.14.7. See Also
      • 7.9.15. ECG Classification
        • 7.9.15.1. Overview
        • 7.9.15.2. System Components
        • 7.9.15.3. Available Configurations
        • 7.9.15.4. Running the Example
        • 7.9.15.5. Dataset (MSPM0 config)
        • 7.9.15.6. Feature Extraction
        • 7.9.15.7. Model and Training (MSPM0 config)
        • 7.9.15.8. Results
        • 7.9.15.9. Anomaly Detection Mode
        • 7.9.15.10. References
      • 7.9.16. NILM Appliance Usage Classification
        • 7.9.16.1. Overview
        • 7.9.16.2. Running the Examples
        • 7.9.16.3. Appliance Usage Classification (ESDA NILM 2021)
        • 7.9.16.4. PLAID Appliance Identification
        • 7.9.16.5. Results
        • 7.9.16.6. On-Device Results and Performance
        • 7.9.16.7. See Also
      • 7.9.17. PIR Detection
        • 7.9.17.1. Overview
        • 7.9.17.2. System Components
        • 7.9.17.3. Available Configurations
        • 7.9.17.4. Running the Example
        • 7.9.17.5. Dataset
        • 7.9.17.6. Feature Extraction Pipeline
        • 7.9.17.7. Configuration (config_MSPM0.yaml)
        • 7.9.17.8. Results
        • 7.9.17.9. References
      • 7.9.18. Gearbox Fault Detection
        • 7.9.18.1. Overview
        • 7.9.18.2. System Components
        • 7.9.18.3. Dataset
        • 7.9.18.4. Feature Extraction
        • 7.9.18.5. Models
        • 7.9.18.6. Configuration
        • 7.9.18.7. Running the Example
        • 7.9.18.8. Results
        • 7.9.18.9. See Also
      • 7.9.19. Human Fall Detection
        • 7.9.19.1. Overview
        • 7.9.19.2. System Components
        • 7.9.19.3. Running the Example
        • 7.9.19.4. Configuration
        • 7.9.19.5. Dataset
        • 7.9.19.6. Feature Extraction
        • 7.9.19.7. Model and Results
        • 7.9.19.8. Practical Considerations
        • 7.9.19.9. Deployment
        • 7.9.19.10. See Also
      • 7.9.20. Dynamic Hand Gesture Recognition
        • 7.9.20.1. Overview
        • 7.9.20.2. Gesture Classes
        • 7.9.20.3. System Components
        • 7.9.20.4. Running the Example
        • 7.9.20.5. Configuration
        • 7.9.20.6. Feature Extraction
        • 7.9.20.7. Training and Deployment
        • 7.9.20.8. Results
        • 7.9.20.9. See Also
      • 7.9.21. Wi-Fi CSI Presence Detection
        • 7.9.21.1. Overview
        • 7.9.21.2. Running the Example
        • 7.9.21.3. Configuration
        • 7.9.21.4. Datasets
        • 7.9.21.5. Feature Extraction
        • 7.9.21.6. Results
        • 7.9.21.7. Training and Deployment
        • 7.9.21.8. See Also
      • 7.9.22. Torque Measurement Regression
        • 7.9.22.1. Overview
        • 7.9.22.2. The Dataset
        • 7.9.22.3. Running the Example
        • 7.9.22.4. Configuration
        • 7.9.22.5. Results
        • 7.9.22.6. Output Location
        • 7.9.22.7. Running on Device
        • 7.9.22.8. See Also
      • 7.9.23. Induction Motor Speed Prediction
        • 7.9.23.1. Overview
        • 7.9.23.2. The Dataset
        • 7.9.23.3. Preparing the Dataset
        • 7.9.23.4. Running the Example
        • 7.9.23.5. Configuration
        • 7.9.23.6. Results
        • 7.9.23.7. Output Location
        • 7.9.23.8. Running on Device
        • 7.9.23.9. See Also
      • 7.9.24. Washing Machine Load Weighing
        • 7.9.24.1. Overview
        • 7.9.24.2. The Dataset
        • 7.9.24.3. Running the Example
        • 7.9.24.4. Configuration
        • 7.9.24.5. Results
        • 7.9.24.6. Output Location
        • 7.9.24.7. Running on Device
        • 7.9.24.8. See Also
      • 7.9.25. MOSFET Junction Temperature Prediction
        • 7.9.25.1. Overview
        • 7.9.25.2. Thermal Model
        • 7.9.25.3. Linear + AI Model
        • 7.9.25.4. The Dataset
        • 7.9.25.5. Running the Example
        • 7.9.25.6. Configuration
        • 7.9.25.7. Results
        • 7.9.25.8. Output Location
        • 7.9.25.9. Running on Device
        • 7.9.25.10. See Also
      • 7.9.26. Battery State of Charge (SOC) Estimation
        • 7.9.26.1. Overview
        • 7.9.26.2. The Dataset
        • 7.9.26.3. Running the Example
        • 7.9.26.4. Configuration
        • 7.9.26.5. Results
        • 7.9.26.6. Output Location
        • 7.9.26.7. Running on Device
        • 7.9.26.8. See Also
      • 7.9.27. PMSM Rotor Temperature Forecasting
        • 7.9.27.1. Overview
        • 7.9.27.2. The Dataset
        • 7.9.27.3. Running the Example
        • 7.9.27.4. Configuration
        • 7.9.27.5. Evaluation
        • 7.9.27.6. Results
        • 7.9.27.7. Output Location
        • 7.9.27.8. Running on Device
        • 7.9.27.9. See Also
      • 7.9.28. HVAC Indoor Temperature Forecasting
        • 7.9.28.1. Overview
        • 7.9.28.2. The Dataset
        • 7.9.28.3. Running the Example
        • 7.9.28.4. Configuration
        • 7.9.28.5. Results
        • 7.9.28.6. Output Location
        • 7.9.28.7. Running on Device
        • 7.9.28.8. See Also
      • 7.9.29. Forecasting Examples Guide
        • 7.9.29.1. Forecasting Examples in 1.5.0
        • 7.9.29.2. How Forecasting Works
        • 7.9.29.3. Metrics
        • 7.9.29.4. Available Models
        • 7.9.29.5. Forecasting versus Regression
        • 7.9.29.6. Deployment
      • 7.9.30. Anomaly Detection Examples Overview
        • 7.9.30.1. Anomaly Detection Configs in 1.5.0
        • 7.9.30.2. Workflow
        • 7.9.30.3. Available Models
        • 7.9.30.4. Threshold Selection
        • 7.9.30.5. Anomaly Detection versus Classification
        • 7.9.30.6. Troubleshooting
        • 7.9.30.7. See Also
      • 7.9.31. Google Speech Command Recognition
        • 7.9.31.1. Overview
        • 7.9.31.2. Keyword Classes
        • 7.9.31.3. The Dataset
        • 7.9.31.4. Features
        • 7.9.31.5. Model
        • 7.9.31.6. Running the Example
        • 7.9.31.7. Configuration
        • 7.9.31.8. Results
        • 7.9.31.9. Output Location
        • 7.9.31.10. See Also
      • 7.9.32. Wake Word Detection
        • 7.9.32.1. Overview
        • 7.9.32.2. The Dataset
        • 7.9.32.3. Feature Extraction: Learned Filterbank
        • 7.9.32.4. Model
        • 7.9.32.5. Running the Example
        • 7.9.32.6. Configuration
        • 7.9.32.7. Results
        • 7.9.32.8. Output Location
        • 7.9.32.9. Running on Device
        • 7.9.32.10. See Also
      • 7.9.33. Glass Break Detection
        • 7.9.33.1. Overview
        • 7.9.33.2. The Dataset
        • 7.9.33.3. Feature Extraction
        • 7.9.33.4. Model
        • 7.9.33.5. Running the Example
        • 7.9.33.6. Configuration
        • 7.9.33.7. Results
        • 7.9.33.8. Output Location
        • 7.9.33.9. See Also
      • 7.9.34. Cough Detection
        • 7.9.34.1. Overview
        • 7.9.34.2. Data Collection
        • 7.9.34.3. Preparing the Dataset
        • 7.9.34.4. Feature Extraction: MSPM0_LPC_8820
        • 7.9.34.5. Model
        • 7.9.34.6. Running the Example
        • 7.9.34.7. Configuration
        • 7.9.34.8. Results
        • 7.9.34.9. Memory Footprint
        • 7.9.34.10. Output Location
        • 7.9.34.11. See Also
      • 7.9.35. MNIST Image Classification
        • 7.9.35.1. Overview
        • 7.9.35.2. The Dataset
        • 7.9.35.3. Feature Extraction
        • 7.9.35.4. Running the Example
        • 7.9.35.5. Configuration
        • 7.9.35.6. Results
        • 7.9.35.7. Output Location
        • 7.9.35.8. See Also
      • 7.9.36. Machine Readable Code Classification
        • 7.9.36.1. Overview
        • 7.9.36.2. The Dataset
        • 7.9.36.3. Running the Example
        • 7.9.36.4. Configuration
        • 7.9.36.5. Results
        • 7.9.36.6. Output Location
        • 7.9.36.7. See Also
      • 7.9.37. Coffee Bean Classification
        • 7.9.37.1. Overview
        • 7.9.37.2. The Dataset
        • 7.9.37.3. Feature Extraction
        • 7.9.37.4. Running the Example
        • 7.9.37.5. Configuration
        • 7.9.37.6. Results
        • 7.9.37.7. Output Location
        • 7.9.37.8. See Also
      • 7.9.38. Image Classification Examples Guide
        • 7.9.38.1. Image Examples in 1.5.0
        • 7.9.38.2. Dataset Format
        • 7.9.38.3. Feature Extraction Presets
        • 7.9.38.4. Available Models
        • 7.9.38.5. Results
        • 7.9.38.6. Limitations
      • 7.9.39. Radar Pose and Fall Detection
        • 7.9.39.1. Overview
        • 7.9.39.2. The Dataset
        • 7.9.39.3. Preparing Your Own Data (Optional)
        • 7.9.39.4. Running the Example
        • 7.9.39.5. Configuration
        • 7.9.39.6. Results
        • 7.9.39.7. Output Location
        • 7.9.39.8. See Also
  • 8. Features
    • 8.1. Feature Extraction
      • 8.1.1. Pipeline
      • 8.1.2. Configuration parameters
      • 8.1.3. Presets
      • 8.1.4. Data processing transforms
      • 8.1.5. Feature extraction transforms
      • 8.1.6. Custom feature extraction
      • 8.1.7. Windowing and framing
        • 8.1.7.1. Frame offset
        • 8.1.7.2. Stacking modes
        • 8.1.7.3. Analysis bandwidth
        • 8.1.7.4. Gain variation augmentation
        • 8.1.7.5. Forecasting
      • 8.1.8. Audio front-ends
      • 8.1.9. Radar and image inputs
      • 8.1.10. Evaluating feature extraction quality
        • 8.1.10.1. Feature extraction only mode
      • 8.1.11. Memory cost on the device
      • 8.1.12. Best practices
      • 8.1.13. Next steps
    • 8.2. Goodness of Fit
      • 8.2.1. Enabling the GoF test
      • 8.2.2. Output
      • 8.2.3. The 8 plots
      • 8.2.4. Interpreting the results
      • 8.2.5. Frame size sweeping
      • 8.2.6. Multiple clusters per class
      • 8.2.7. Comparing feature extraction
      • 8.2.8. Limitations
      • 8.2.9. Next steps
    • 8.3. Early Stopping
      • 8.3.1. Configuration
      • 8.3.2. How it works
    • 8.4. Training Performance
      • 8.4.1. Options in the config YAML
      • 8.4.2. Automatic behavior
      • 8.4.3. Apple Silicon
    • 8.5. Neural Architecture Search
      • 8.5.1. When to use NAS
      • 8.5.2. Supported task types
      • 8.5.3. NAS and the memory estimate
      • 8.5.4. How it works
      • 8.5.5. Configuration
        • 8.5.5.1. Model size presets
      • 8.5.6. Usage
      • 8.5.7. Full example
      • 8.5.8. Tips
      • 8.5.9. Search algorithm
      • 8.5.10. References
      • 8.5.11. Next steps
    • 8.6. Quantization
      • 8.6.1. What is new in 1.5.0
      • 8.6.2. Configuration parameters
      • 8.6.3. Quantization modes
      • 8.6.4. Quantization methods
      • 8.6.5. Bit widths
      • 8.6.6. NPU constraints
      • 8.6.7. Output files
      • 8.6.8. Troubleshooting accuracy loss
      • 8.6.9. QAT training performance
      • 8.6.10. Using the wrappers directly
        • 8.6.10.1. Wrapper arguments
      • 8.6.11. Next steps
    • 8.7. Automatic Mixed Precision Quantization
      • 8.7.1. Overview
      • 8.7.2. Algorithm
      • 8.7.3. Tolerance thresholds
      • 8.7.4. Configuration
      • 8.7.5. Task-specific behavior
      • 8.7.6. Example config
      • 8.7.7. Next steps
    • 8.8. Mixed Precision Quantization
      • 8.8.1. Automatic mixed precision (HAWQ)
        • 8.8.1.1. Tolerances (training section)
      • 8.8.2. Ternary-weight, 8-bit-activation QAT
    • 8.9. Standalone Quantization Examples
      • 8.9.1. Common workflow
      • 8.9.2. Guidance
      • 8.9.3. Next steps
    • 8.10. Post-Training Analysis
      • 8.10.1. Enabling analysis
      • 8.10.2. Where the files are
      • 8.10.3. Confusion matrix
      • 8.10.4. ROC curves
      • 8.10.5. Class score histograms
      • 8.10.6. FPR/TPR thresholds
      • 8.10.7. Regression outputs
      • 8.10.8. Anomaly detection outputs
      • 8.10.9. Float versus quantized
      • 8.10.10. Next steps
    • 8.11. Memory Estimation
      • 8.11.1. Pre-flight during a training run
      • 8.11.2. Standalone estimate_memory
        • 8.11.2.1. Limitations
    • 8.12. On-Device Training (ODT)
      • 8.12.1. Two frameworks
      • 8.12.2. Configuration
      • 8.12.3. Documentation
        • 8.12.3.1. On-Device Training Documentation
        • 8.12.3.2. On-Device Training — Overview
        • 8.12.3.3. Running ModelZoo for On-Device Training
        • 8.12.3.4. Generated Artifacts Overview
        • 8.12.3.5. Trainable Model Configuration Files
        • 8.12.3.6. On-Device Training Data
        • 8.12.3.7. On-Device Training Library
        • 8.12.3.8. Anomaly Detection On-Device Training Library
        • 8.12.3.9. Fan Blade Anomaly Detection — On-Device Training Example
        • 8.12.3.10. On-Device Training — FAQ & Troubleshooting
        • 8.12.3.11. Integer On-Device Training Documentation
        • 8.12.3.12. Integer On-Device Training: Overview
        • 8.12.3.13. Running ModelMaker for Integer On-Device Training
        • 8.12.3.14. Generated Artifacts Overview
        • 8.12.3.15. Integer Model Configuration: Deep Dive
        • 8.12.3.16. Training Data
        • 8.12.3.17. Integer ODL Library: API Reference
    • 8.13. New in 1.5.0
    • 8.14. Overview
  • 9. Deployment
    • 9.1. Start Here
      • 9.1.1. Deploying a ModelZoo Run to an SDK Example (Golden-Vector Check)
        • 9.1.1.1. At a Glance: the 4 Files
        • 9.1.1.2. Step 1: Pick the SDK and the Example
        • 9.1.1.3. Step 2: Import the Example into CCS
        • 9.1.1.4. Step 3: Replace the 4 Files
        • 9.1.1.5. Step 4: Build, Flash, Check
        • 9.1.1.6. Step 5: Try the Other Test Sets
        • 9.1.1.7. Troubleshooting
        • 9.1.1.8. After the Golden Vectors Pass
      • 9.1.2. CCS Integration Guide
        • 9.1.2.1. Prerequisites
        • 9.1.2.2. What You Get in the Run Folder
        • 9.1.2.3. Import the Example
        • 9.1.2.4. Build, Flash and Run
        • 9.1.2.5. Check the Result
        • 9.1.2.6. Memory and Linker Problems
        • 9.1.2.7. Common Issues
        • 9.1.2.8. Next Steps
      • 9.1.3. NPU Device Deployment
        • 9.1.3.1. NPU-Enabled Devices
        • 9.1.3.2. NPU Compilation
        • 9.1.3.3. What Is Different at Run Time
        • 9.1.3.4. Walkthrough: F28P55x
        • 9.1.3.5. Troubleshooting
        • 9.1.3.6. Next Steps
      • 9.1.4. Non-NPU Deployment
        • 9.1.4.1. Non-NPU Devices
        • 9.1.4.2. Importing an Example That Is Not in Resource Explorer
        • 9.1.4.3. CPU Inference Considerations
        • 9.1.4.4. Non-NPU vs NPU
        • 9.1.4.5. Next Steps
      • 9.1.5. Project Compilation Guide: Timeseries Classification Examples
        • 9.1.5.1. Overview
        • 9.1.5.2. Table of Contents
        • 9.1.5.3. Required Tools
        • 9.1.5.4. Output From Modelzoo
        • 9.1.5.5. How to run on device
        • 9.1.5.6. Next Steps
      • 9.1.6. Deploying Regression Models from ModelMaker to Device
        • 9.1.6.1. Abhijeet Pal, Adithya Thonse, Tushar Sharma, Fasna Sharaf, Jaswanth Kumar
        • 9.1.6.2. Table of Contents
        • 9.1.6.3. Overview
        • 9.1.6.4. Prerequisites
        • 9.1.6.5. Deployment Steps
        • 9.1.6.6. Verify Your Model
      • 9.1.7. Deploying Forecasting Models from ModelMaker to Device
        • 9.1.7.1. Fasna Sharaf, Adithya Thonse, Tushar Sharma, Abhijeet Pal, Jaswanth Kumar
        • 9.1.7.2. Table of Contents
        • 9.1.7.3. Overview
        • 9.1.7.4. Prerequisites
        • 9.1.7.5. Deployment Steps
        • 9.1.7.6. Verify Your Model
        • 9.1.7.7. Next Steps
      • 9.1.8. Deploying Anomaly Detection Models from ModelZoo to Device
        • 9.1.8.1. Jaswanth Jadda, Adithya Thonse, Tushar Sharma, Abhijeet Pal, Fasna Sharaf
        • 9.1.8.2. Table of Contents
        • 9.1.8.3. Overview
        • 9.1.8.4. Prerequisites
        • 9.1.8.5. Deployment Steps
        • 9.1.8.6. Verify Your Model
    • 9.2. Deployment Workflow
  • 10. Edge AI Studio Model Composer
    • 10.1. Model Composer Overview
      • 10.1.1. What it does
      • 10.1.2. Accessing Model Composer
      • 10.1.3. Typical features
      • 10.1.4. Limitations
      • 10.1.5. Combining the GUI and the command line
      • 10.1.6. Next steps
    • 10.2. Getting Started (GUI)
      • 10.2.1. Prerequisites
      • 10.2.2. Step 1: Open Model Composer
      • 10.2.3. Step 2: Create the project
      • 10.2.4. Step 3: Add a dataset
      • 10.2.5. Step 4: Feature extraction
      • 10.2.6. Step 5: Training settings
      • 10.2.7. Step 6: Train
      • 10.2.8. Step 7: Analyze and test
      • 10.2.9. Step 8: Export
      • 10.2.10. Next steps
    • 10.3. Exporting Models
      • 10.3.1. Export options
      • 10.3.2. Importing a CCS project
      • 10.3.3. Using artifacts in an existing project
      • 10.3.4. Continuing in the command line
      • 10.3.5. Export troubleshooting
      • 10.3.6. Next steps
    • 10.4. What is Model Composer?
    • 10.5. GUI vs command line
  • 11. Bring Your Own Model
    • 11.1. Contents
      • 11.1.1. Bring Your Own Model (BYOM)
        • 11.1.1.1. Files You Will Change
        • 11.1.1.2. Prerequisites
        • 11.1.1.3. Step 1: Add the Model Class
        • 11.1.1.4. Step 2: Add the Model Description
        • 11.1.1.5. Step 3: Create a Config That Uses Your Model
        • 11.1.1.6. Step 4: Train, Quantize and Compile
        • 11.1.1.7. Step 5: Check the Results
        • 11.1.1.8. Troubleshooting
        • 11.1.1.9. Guidelines for Designing Your Model
      • 11.1.2. Adding Models to ModelZoo
        • 11.1.2.1. The two names
        • 11.1.2.2. Files per task type
        • 11.1.2.3. Writing the model class
        • 11.1.2.4. Writing the description
        • 11.1.2.5. Using the model
        • 11.1.2.6. Next steps
      • 11.1.3. Compilation Only
        • 11.1.3.1. Configuration
        • 11.1.3.2. Running the compilation
        • 11.1.3.3. Example: external PyTorch model
        • 11.1.3.4. NPU constraints
        • 11.1.3.5. Troubleshooting
        • 11.1.3.6. Best practices
        • 11.1.3.7. Next steps
    • 11.2. Which approach do I need?
    • 11.3. Model requirements
  • 12. Troubleshooting
    • 12.1. Common Errors
      • 12.1.1. Setup and configuration
        • 12.1.1.1. Unknown model name
        • 12.1.1.2. Python 3.11 or newer cannot compile
        • 12.1.1.3. No examples/ folder after a wheel install
        • 12.1.1.4. Compiler tools not found (TOOLS_PATH)
      • 12.1.2. Training
        • 12.1.2.1. NaN or infinite loss
        • 12.1.2.2. Training stops before all epochs
        • 12.1.2.3. ONNX export fails at AdaptiveAvgPool
        • 12.1.2.4. QAT: scale and zero-point dimension error
        • 12.1.2.5. QAT: tensors on different devices
        • 12.1.2.6. Dataset download: File is not a zip file
        • 12.1.2.7. IndexError: list index out of range when loading the dataset
      • 12.1.3. Compilation and model design
        • 12.1.3.1. NPU layer constraint violations
        • 12.1.3.2. Golden vector mismatch on the device
      • 12.1.4. Platform
        • 12.1.4.1. macOS (Apple Silicon, MPS)
      • 12.1.5. Other tips
    • 12.2. FAQ
      • 12.2.1. General
      • 12.2.2. Installation
      • 12.2.3. Models and training
      • 12.2.4. Deployment
    • 12.3. Quick checks
    • 12.4. Getting help
  • 13. Appendix
    • 13.1. Configuration Reference
      • 13.1.1. How a YAML is merged
      • 13.1.2. File structure
      • 13.1.3. Common section
      • 13.1.4. Dataset section
      • 13.1.5. Data processing and feature extraction section
      • 13.1.6. Training section
      • 13.1.7. Testing section
      • 13.1.8. Compilation section
      • 13.1.9. Example
    • 13.2. Model Zoo Reference
      • 13.2.1. Timeseries classification (also used by radar classification)
      • 13.2.2. Timeseries regression
      • 13.2.3. Timeseries forecasting
      • 13.2.4. Timeseries anomaly detection
      • 13.2.5. Audio classification
      • 13.2.6. Image classification
      • 13.2.7. Model counts
    • 13.3. Changelog
      • 13.3.1. Version 1.5.0
      • 13.3.2. Version 1.4.0
      • 13.3.3. Version 1.3.0
      • 13.3.4. Version 1.1.0
      • 13.3.5. Version 1.0.0
      • 13.3.6. Migration Guides
        • 13.3.6.1. Migrating from 1.1.x to 1.2.x
      • 13.3.7. Deprecation Notices
      • 13.3.8. Known Issues
      • 13.3.9. Roadmap
      • 13.3.10. Contributing
TI Tiny ML ModelZoo
  • 8. Features
  • 8.5. Neural Architecture Search

8.5. Neural Architecture Search

Neural Architecture Search (NAS) discovers a model architecture for your task and device constraints, instead of using a model from the ModelZoo.

  • It searches over layer configurations with a gradient-based method (DARTS).

  • It optimizes for memory (parameter count) or compute (MACs).

  • It generates a model for your dataset that can then be quantized and compiled like any other model.

Warning

NAS is compute-intensive. A GPU is needed for practical use, and each NAS epoch can take several minutes. Choose nas_epochs with care.

8.5.1. When to use NAS

Use it when you do not know the right model size for the task, when you want the smallest model that meets an accuracy target, or when manual architecture tuning takes too long. Do not use it when a ModelZoo model already works, when time is short, or when no GPU is available.

8.5.2. Supported task types

In 1.5.0 the NAS arguments are passed to the training script of the time series classification, image classification, audio classification and radar classification task types. Regression, forecasting and anomaly detection do not use NAS.

8.5.3. NAS and the memory estimate

The standalone estimate_memory tool and the memory pre-flight need a fixed architecture, so they do not support configs with nas_enabled: True. See Memory Estimation.

8.5.4. How it works

  1. The training section of the config YAML is parsed and the NAS parameters are read.

  2. With nas_enabled: True no ModelZoo model is needed: ModelMaker creates a minimal generic model description, so model_name does not have to name a ModelZoo model.

  3. The search runs for nas_epochs epochs, optimizing for the mode in nas_optimization_mode.

  4. The best architecture found is trained from scratch with the rest of the training configuration.

  5. The result is tested, quantized and compiled as for any other model.

8.5.5. Configuration

All NAS parameters are in the training section. The defaults are the ModelMaker defaults.

Parameter

Default

Description

Values

nas_enabled

False

Enable NAS.

True, False

nas_epochs

10

Number of epochs of the search.

integer

nas_optimization_mode

'Memory'

'Memory' penalizes the parameter count (read-only data on the MCU). 'Compute' penalizes MACs/FLOPs (peak SRAM usage and latency).

'Memory', 'Compute'

nas_model_size

None

Preset search space size. If set, it overrides the customization parameters below.

's', 'm', 'l', 'xl'

Customization parameters, used when nas_model_size is not set:

Parameter

Default

Description

nas_nodes_per_layer

4

Nodes (operations) per layer in the DAG.

nas_layers

3

Number of layers; the minimum is 3.

nas_init_channels

1

Initial feature map channels of the first convolution.

nas_init_channel_multiplier

3

Channel multiplier after the first pre-processing step.

nas_fanout_concat

4

Nodes per layer concatenated into the layer output (at most nas_nodes_per_layer).

8.5.5.1. Model size presets

Preset

Layers

Nodes/layer

Init channels

Channel multiplier

s

3

4

1

3

m

10

4

1

3

l

12

4

4

3

xl

20

4

4

3

All presets use nas_fanout_concat 4. The training script command line accepts s, m, l and xl.

8.5.6. Usage

Preset mode (recommended):

training:
  nas_enabled: True
  nas_epochs: 10
  nas_optimization_mode: 'Memory'
  nas_model_size: 'm'

Customization mode:

training:
  nas_enabled: True
  nas_epochs: 20
  nas_optimization_mode: 'Compute'
  nas_nodes_per_layer: 4
  nas_layers: 5
  nas_init_channels: 8
  nas_init_channel_multiplier: 2
  nas_fanout_concat: 3

8.5.7. Full example

common:
  task_type: 'arc_fault'
  target_device: 'F28P55'

dataset:
  dataset_name: 'dc_arc_fault_example_dsk'

data_processing_feature_extraction:
  feature_extraction_name: 'FFT1024Input_256Feature_1Frame_Full_Bandwidth'
  variables: 1

training:
  training_epochs: 15
  batch_size: 256
  nas_enabled: True
  nas_epochs: 10
  nas_optimization_mode: 'Memory'
  nas_model_size: 'm'

testing: {}
compilation: {}

Run it as any other config, for example ./run_tinyml_modelzoo.sh <your_nas_config>.yaml (see Quickstart).

The training script can also load an architecture found earlier through the load_saved_model parameter (path of a pre-searched NAS model).

8.5.8. Tips

  • Start with a ModelZoo model, and use NAS only if you need a different size or accuracy trade-off.

  • Start with presets s or m before larger ones.

  • More nas_epochs can improve the result but lengthen the run.

  • Use 'Memory' for devices with limited Flash and RAM, 'Compute' for latency-sensitive applications.

  • Compare the NAS model with the hand-designed models; it does not always win.

  • Validate the found model on your test data before deployment.

8.5.9. Search algorithm

The search uses Differentiable Architecture Search (DARTS). Every edge of the search DAG has architecture parameters (alphas), one per candidate operation, and a softmax over them gives a mixture of operations. The model weights and the alphas are optimized alternately (bilevel optimization): weights on training data, alphas on validation data. After the search, the operation with the highest alpha on each edge is selected, which gives a discrete architecture (the genotype), and this is retrained from scratch.

The search includes a resource penalty: parameter count in 'Memory' mode, MACs/FLOPs in 'Compute' mode.

The candidate operations (PRIMITIVES_CNN) are 1D convolution and pooling primitives for time series: none, avg_pool_3x1, max_pool_3x1, skip_connect, conv_bn_relu_3x1, conv_bn_relu_5x1 and conv_bn_relu_7x1. A found architecture consists of normal cells (which keep the dimensions) and reduction cells (which downsample).

The NAS code is in the tinyml_torchmodelopt.nas package of tinyml-modeloptimization.

8.5.10. References

  • Liu, H., Simonyan, K., and Yang, Y. (2019). DARTS: Differentiable Architecture Search. ICLR 2019.

  • Ye, P., et al. (2022). beta-DARTS: Beta-Decay Regularization for Differentiable Architecture Search.

  • Bender, G., et al. (2020). Balanced One-shot Neural Architecture Optimization.

8.5.11. Next steps

  • Quantization

  • Feature Extraction

Previous Next

© Copyright 2026, Texas Instruments Incorporated. Last updated on Oct 13, 2026.