[ESP32]:TFLite Micro推理CIFAR10模型

基于TensorFlow Lite Micro在物联网设备上玩转TinyML之离线语音唤醒 本文介绍如何基于HaaS EDU K1进行TFLite-Micro离线语音模型的部署。通过本文将学习到离线语音识别全链路开发流程。从语音数据集采集到模型训练,再到模型部署的TinyML(微型机器学习)整个生命周期。 阅读详情
AI摘要

本文介绍了如何在ESP32平台上使用TensorFlowLiteMicro进行CIFAR10数据集的2D卷积神经网络模型训练,随后将模型转换为TFLite格式,并提供了两种推理方案:PC端JPEG图片转换为数组和ESP32本地JPEG解码。,

[ESP32]:TFLite Micro推理CIFAR10模型

模型训练

数据集处理

from keras.datasets import cifar10
from keras.preprocessing.image import ImageDataGenerator
from keras.models import Sequential, load_model, Model
from keras.layers import Input, Dense, Dropout, Activation, Flatten
from keras.layers import Convolution2D, MaxPooling2D, GlobalAveragePooling2D
import pandas as pd
import matplotlib.pyplot as plt
import time, pickle
from keras.utils import to_categorical
from keras import layers
import tensorflow as tf
from tensorflow.keras.callbacks import EarlyStopping

(x_train, y_train), (x_test, y_test) = cifar10.load_data()

y_train = y_train.reshape(y_train.shape[0])
y_test = y_test.reshape(y_test.shape[0])

print('x_train shape:', x_train.shape)
print(x_train.shape[0], 'training samples')
print(x_test.shape[0], 'validation samples')

x_train = x_train.astype('float32')
x_test = x_test.astype('float32')
x_train /= 255
x_test /= 255

y_train = to_categorical(y_train, 10)
y_test = to_categorical(y_test, 10)

模型搭建

def build_model():
    model = tf.keras.Sequential()
    model.add(layers.Conv2D(32, kernel_size=(4,4), strides=1,activation='relu', input_shape=(32, 32, 3)))
    model.add(layers.MaxPooling2D((2, 2)))

    model.add(layers.Conv2D(32, kernel_size=(4,4), strides=1,activation='relu'))
    model.add(layers.MaxPooling2D((2, 2)))


    model.add(layers.Flatten())
    model.add(layers.Dense(256, activation='relu'))
    model.add(layers.Dense(10, activation='softmax'))

    print(model.summary())
    return model

model=build_model()

tflite模型转换


converter = tf.lite.TFLiteConverter.from_keras_model(model)
tflite_model = converter.convert()
open("cifar10.tflite", "wb").write(tflite_model)

ESP32推理

本文采用的是2DCNN,添加所需的op算子即可

static tflite::MicroMutableOpResolver<5> resolver;
// 这里需要添加我们模型使用的层
if (resolver.AddReshape() != kTfLiteOk)
{
    ESP_LOGI(TAG, "Add reshape failed");
    return;
}

if (resolver.AddConv2D() != kTfLiteOk)
{
    ESP_LOGI(TAG, "Add reshape failed");
    return;
}

if (resolver.AddMaxPool2D() != kTfLiteOk)
{
    ESP_LOGI(TAG, "Add reshape failed");
    return;
}

if (resolver.AddFullyConnected() != kTfLiteOk)
{
    ESP_LOGI(TAG, "Add reshape failed");
    return;
}

if (resolver.AddSoftmax() != kTfLiteOk)
{
    ESP_LOGI(TAG, "Add reshape failed");
    return;
}

推理方案1:PC端JPG图片转换为数组

每一个像素点都有RGB三个数值,依次排开即可,以下为python的一段实例

from PIL import Image
import numpy as np

def image_to_c_array(image_path):
    # 读取图片
    image = Image.open(image_path)

    print(image.size)
    # 转换为numpy数组
    image_array = np.array(image)


    # 归一化
    # normalized_image_array = image_array / 255.0
    print(image_array.size)
    x_array_flatten = image_array.flatten()
    print(len(x_array_flatten))
    c_array_string = "{" + ", ".join(str(pixel) for pixel in x_array_flatten) + "}"

    with open("image_array.h", "w") as f:
        f.write("#ifndef IMAGE_ARRAY_H\n")
        f.write("#define IMAGE_ARRAY_H\n\n")
        f.write("const float image_array[] = %s;\n" % c_array_string)
        f.write("#endif\n")


# 调用函数生成.h文件
image_to_c_array("0042.jpg")

在这里插入图片描述

这样,我们可以直接将这个数组作为模型的输入去推理,记得归一化,除以255。

推理方案2:esp_jpeg解码jpg

size_t pic_buf_size = 32 * 32 * sizeof(uint32_t);
        uint8_t *pic_buf = (uint8_t *)heap_caps_malloc(pic_buf_size + 1, MALLOC_CAP_SPIRAM); // create out image buffer
        esp_jpeg_image_cfg_t jpeg_cfg = {
            .indata = (uint8_t *)file_buf,
            .indata_size = filesize,
            .outbuf = (uint8_t *)pic_buf,
            .outbuf_size = pic_buf_size,
            .out_format = JPEG_IMAGE_FORMAT_RGB888,
            .out_scale = JPEG_IMAGE_SCALE_0,
        };

        // // decode jpg
        esp_jpeg_image_output_t outimage;
        esp_jpeg_decode(&jpeg_cfg, &outimage);
        ESP_LOGI(TAG, "%s size: %d x %d", filename, outimage.width, outimage.height);

和上面python版本的一样,解码出来的pic_buf存放的也是每一个的像素,类似于这样

pic_buf[]= {像素0的R,像素0的G,像素0的B,像素1的R....}

所以在输入网络的时候,pic_buf的长度一定是图像宽图像高3,其中3为RGB,包括解码的时候选择RGB888

推理端的代码,记得归一化。

void cifar10_model_predict(const uint8_t *pic, int size)
{
    for (int i = 0; i < size; i++)
    {
        input->data.f[i] = pic[i] / 255.0f;
    }

    TfLiteStatus invoke_status = interpreter->Invoke();
    if (invoke_status != kTfLiteOk)
    {
        MicroPrintf("Invoke failed on");
        return;
    }

    for (int i = 0; i < 10; i++)
    {
        printf("%.2f ", output->data.f[i]);
    }
    printf("\n");
}
LiteOk)
    {
        MicroPrintf("Invoke failed on");
        return;
    }

    for (int i = 0; i < 10; i++)
    {
        printf("%.2f ", output->data.f[i]);
    }
    printf("\n");
}

可以看到推理结果还是挺不错的。
在这里插入图片描述

侧信道攻击如何破解嵌入式AI黑盒:从功耗分析到对抗样本生成 侧信道攻击是一种通过分析设备运行时的物理泄露信息(如功耗、电磁辐射、执行时间)来推断其内部秘密的攻击方式,其原理在于硬件执行计算时产生的物理状态变化会携带与处理数据相关的特征。这项技术的价值在于,它绕过了传统的软件安全防线,为硬件和嵌入式系统的安全评估提供了全新视角。在AI模型广泛部署于边缘设备的今天,侧信道信息与对抗样本生成技术结合,形成了一种新型威胁范式:攻击者无需了解模型内部细节,仅通过分析设备运行目标模型时的物理侧信道信息,就能高效构造出欺骗模型的恶意输入。这揭示了AI模型在物理层面临的安全风险,对 阅读详情

相关推荐

AutoMCU:基于LLM多智能体的MCU神经网络自动化定制方案

神经网络部署在资源受限的微控制器上,是嵌入式AI领域的核心挑战。传统流程中,模型设计、训练、压缩与硬件部署往往脱节,导致高昂的试错成本。其原理在于,需要将硬件约束(内存、算力、功耗)作为第一性原理,贯穿模型设计的始终。这项技术的价值在于,它能实现从算法到硬件的端到端自动化设计,大幅降低开发门槛和周期。在应用场景上,特别适用于智能家居、工业传感、可穿戴设备等需要低功耗、实时响应的边缘计算场景。本文探讨的AutoMCU项目,正是通过引入LLM驱动的多智能体系统,模拟专家协作,在MCU开发中践行“可行性优先”的理

weixin_30325487的博客 1226

TensorFlow Lite Micro简介与使用

一文高效搞懂TensorFlow Lite Micro的简介与使用!

全栈O-Jay的博客 7872

V4L2 Camera 驱动的数据流模型:Buffer Queue 与 Streaming 流程详解

在 Linux V4L2 摄像头驱动架构中,数据流模型由 Buffer Queue 管理机制与 Streaming 流程共同构建,直接关系到图像采集性能、帧稳定性与平台兼容性。本文从工程视角出发,详解 V4L2 的 buffer 管理架构,包括内核态的数据流路径、帧队列调度逻辑、内存映射机制、驱动层对 `VIDIOC_QBUF` 和 `VIDIOC_DQBUF` 的处理,以及 streaming 启停流程的具体状态转换。结合 Qualcomm、MTK 等平台的调度优化策略,深入剖析视频帧在驱动层级的完整生命

努力分享一些人工智能、计算机视觉、影像等相关的知识干货! 1721

ESP32 & Tensorflow Lite (二)TensorFlow Lite Hello World

这篇文章将介绍使用 TensorFlow Lite for Microcontrollers 的基础知识。它包括训练模型,将其转换为 TensorFlow Lite 版本使用以及在微控制器上运行的完整的端到端工作流程。

InfiniteYuan 5429

tflite-micro:适用于微控制器的TensorFlow Lite

适用于微控制器的TensorFlow Lite TFLM代码目前正在从重构为独立的。 此重构目前处于初始阶段,预计将在2021年6月底完成。

QGroundControl或者华科尔地面站安装完打不开问题解决

QGroundControl 华科尔 打不开

wv112406的博客 4917

AutoMCU:基于LLM多智能体实现MCU神经网络自动部署与优化

神经网络模型在资源受限的微控制器(MCU)上部署,是嵌入式AI和边缘计算领域的关键挑战,涉及模型压缩、硬件适配与性能优化等多个技术环节。其核心原理是通过剪枝、量化等技术,在保证模型精度的前提下,大幅减少模型体积与计算量,以适应MCU有限的内存和算力。这项技术的价值在于降低了边缘设备实现本地智能的门槛,推动了物联网、可穿戴设备等场景的AI应用落地。本文探讨的AutoMCU框架,创新性地运用大语言模型(LLM)驱动的多智能体系统,自动化地完成模型分析、架构优化和硬件感知部署等复杂流程,显著提升了**MCU神经网

weixin_34293141的博客 451

日前日内多阶段多时间尺度源荷储协调调度(matlab代码)

多阶段多时间尺度的协调调度的优势是考虑新能源出力的波 动性与随机性,需求响应负荷的不确定性会对电网制定的日前调度计划准确性造成影响,也就是能够更加精准的进行调度和分析,优化结果的可用性更强。在这方面论文里面,金力的《考虑特性分布的储能电站接入的电网多时间尺度源储荷协调调度策略》就考虑了日前日内实时三个阶段调度,每个阶段考虑了不同负荷需求响应策略,同时考虑了负荷波动性的影响,具有很强的参考意义。 目录 一、模型 二、程序运行 三、程序链接 一、模型 负荷需求响应考虑电价型和激励型两种,电.

zhangxd212489的博客 7915

TFLite Micro嵌入式AI部署:如何在千字节内存设备上运行机器学习模型?

在当今边缘计算时代,将AI模型部署到资源受限的嵌入式设备已成为关键技术挑战。TFLite Micro作为TensorFlow生态中专为微控制器设计的轻量级框架,让开发者能够在仅有千字节级内存的设备上运行复杂的机器学习算法。本文将带你了解这一革命性技术的核心概念、应用场景和实战方法。 [![TFLite Micro代码架构](https://raw.gitcode.com/gh_mirrors/t

gitblog_00321的博客 1333

从零构建智能ai语音助手:ESP32s3+Python+大语言模型实战指南

本文详细介绍了基于ESP32S3硬件和Python后端的智能语音助手系统开发指南。系统采用ESP32S3采集语音,通过WebSocket实时传输到Python后端处理,利用大语言模型实现自然语言理解和意图识别,再通过TTS合成语音返回。文章从系统架构、工作流程、技术实现(包括OPUS编码、WebSocket通信、ESP32音频处理)等方面进行了详细讲解,并提供了分阶段学习路线和常见问题解决方案。该项目展示了物联网技术与AI技术的融合应用,相比传统语音系统具有更高的灵活性和智能性,为开发者提供了完整的实现方案

Despacito0o的博客 2630

用ESP32-S3+OV2640摄像头+ILI9488屏,DIY一个能联网的智能猫眼(附完整代码)

本文详细介绍了如何利用ESP32-S3微控制器搭配OV2640摄像头和ILI9488显示屏,DIY一个功能强大的智能猫眼系统。从硬件选型、电路设计到软件开发,提供了完整的解决方案和优化技巧,包括图像采集显示、WiFi远程访问及低功耗设计,适合智能家居爱好者动手实践。

weixin_30897233的博客 501

TFLite Micro Introduce

本文系统指导开发者在MCU上部署TensorFlow Lite Micro模型,涵盖从轻量模型训练、算子支持验证、模型转换量化到算子移植与性能优化的全流程。强调模型体积与算子兼容性,推荐使用MobileNet等轻量网络,通过TFLite Converter生成C数组嵌入固件,并利用MicroMutableOpResolver和张量竞技场完成推理。针对缺失算子,提供从Lite到Micro的三步移植方案及硬件优化实践,助力高效落地边缘智能。

探索未知,成就非凡 782

环境配置 |Jupyter lab/Jupyter Notebook 安装与设置

ipynb使用Jupyterlab/Jupyter Notebook 来编写程序时的文件,在使用时,可以现转换为标准的.py的python文件。

weixin_44649780的博客 5773

TfLite: c++ in TfLite micro

u011279649的专栏 962

LIGGGHTS颗粒模拟入门:从DEM原理到工程实践

离散元法(DEM)是一种用于模拟颗粒物质行为的数值方法,其核心原理是通过计算每个颗粒的运动和相互作用来预测颗粒系统的宏观行为。该方法基于牛顿第二定律和接触力学模型,能够精确描述颗粒间的碰撞、摩擦和粘结等微观机制。在工程实践中,DEM技术为优化工业设备设计、预测材料流动和减少实验成本提供了重要价值。它广泛应用于制药造粒、矿石破碎、粉体输送和农业加工等领域,帮助工程师和研究人员深入理解颗粒系统的复杂动力学。LIGGGHTS作为一款基于LAMMPS的开源DEM软件,继承了其高效的并行计算架构,并针对颗粒模拟进行了

weixin_33979203的博客 419

OCS2 入门教程(一)

OCS2 是专为切换系统优化控制(ptimalontrol forwitchedystems,OCS2)定制的 C++ 工具箱。该工具箱提供以下算法的高效实现:SLQ:连续时间域约束 DDPiLQR:离散时域约束 DDPSQP:基于 HPIPM 的多重打靶算法IPM: 基于非线性内点法的多重搜索算法SLP:基于 PIPG 的顺序线性规划算法OCS2 通过增强拉格朗日法(Augmented Lagrangian)或松弛障碍法(relaxed barrier methods)处理一般路径约束。

机器人控制与仿真应用 7837

tflite micro makefile and test

Makefile

u011279649的专栏 786

Challenge 4 - OSCP A

在c盘下发现一个windows.old,在里面可以找到SYSTEM和SAM文件,下载到本地,利用samdump2解密发现没解出来,再来试试pwdump.py(https://github.com/CiscoCXSecurity/creddump7)得到压缩包密码bludecode,解压之后发现一个比较特殊的文件configuration.php,里面有两个类似密码的字符串。登录之后在/opt/backups/下发现几个特殊文件,其中sitebackup3.zip是个正常的压缩包。但是这个压缩包是有密码的。

羽的博客 5787

【STM32开发笔记】移植AI框架TensorFlow到STM32单片机【下篇】

本文将会继续介绍——如何为STM32H7S78-DK开发板准备CMake项目、如何将TFLM集成到基于CMake的STM32项目中、如何在STM32H7S78-DK开发板上运行TFLM基准测试,具体包括如何支持计时和printf输出、如何集成TFLM到基于CMake的STM32项目,以及解决过程中遇到的一些问题。

码工许师傅 5432

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

TensorFlow 核心模块详解:TensorFlow Lite Micro 与微控制器部署

TensorFlow Lite Micro(TFLite Micro)是专为微控制器设计的超轻量级AI推理框架,能在KB级内存、MHz级CPU的硬件上运行。其核心特性包括超小体积(16KB)、低内存占用(2-10KB)、仅需CPU运算和超低功耗(微安级)。部署流程分为四步:设计极简模型(如10KB参数)、全整数量化(INT8/INT16)、转换为TFLite格式和集成到微控制器固件。通过训练后量化和模型剪枝可进一步压缩模型体积,适用于智能传感器、可穿戴设备等边缘AI场景。

没事学AI的博客 1769

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

在 windows 上使用 docker 运行 tflite-micro 示例代码

TFLite Micro 是 Google 推出的 TensorFlow Lite 的一个特殊版本,专门用于在资源受限的嵌入式设备上运行机器学习模型。本文介绍了如何在windows使用docker-destop运行 tflite-micro 的示例项目。

qq_41456316的博客 971

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

TFLite Micro完整教程:嵌入式AI部署终极指南

在边缘计算和物联网设备蓬勃发展的今天,如何在资源受限的微控制器上部署机器学习模型成为开发者的重要课题。TensorFlow Lite for Microcontrollers(TFLM)作为专为低功耗嵌入式设备设计的微型机器学习框架,让AI推理在仅有千字节级内存的设备上成为现实。本文将深入解析这一框架的技术优势、部署流程和性能优化策略,为嵌入式开发者提供完整的解决方案。 ## 技术优势解析:为什

gitblog_00599的博客 908

ESP32部署TensorFlow Lite

后面看了历险记(参考中)那个文章,说是现在乐鑫自己也有tflite的例子,可以曲线救国,先跑通乐鑫自己的例子,然后用python下的tensorflow生成lite模型,最后用xxd命令转换成model.cc。继续往机器学习的方向走,遇到的最大的问题就是不管是tensorflow还是tflite-micro,都无法下载。照着他写的一步步来,晚上把乐鑫自己的hello world跑通了,还是很简单。接着有时间我会慢慢来分析分析的。本来是想找一篇中文教程,不过只看到一个英文官方的,也行吧,虽然效率会慢丢丢。

fanged的专栏 4443

大模型时代下的轻量化部署:TensorFlow Lite Micro详解

在资源受限的微控制器上实现深度学习推理,TensorFlow Lite Micro 通过静态内存分配、零依赖设计和端到端工具链,让智能模型直接以C代码运行于裸机环境,推动边缘智能的真正落地。

weixin_42581003的博客 1067

如何在微控制器上部署AI模型?TFLite Micro实战指南

TensorFlow Lite Micro(TFLM)是专为资源受限的嵌入式设备设计的微型机器学习框架,能在仅有几十KB内存的微控制器上运行AI模型,为边缘计算提供强大支持。本文将带你从零开始掌握TFLM的部署技巧,让AI在最小硬件上发挥最大价值。 ## 🌟 理解TFLite Micro的核心优势 TFLM框架最大的特点就是**极致轻量化**和**跨平台兼容性**。与传统机器学习框架相比,T

gitblog_01137的博客 1070

【嵌入式AI开发必看】:TensorFlow Lite Micro C扩展的5大核心应用场景

掌握嵌入式AI开发利器,详解TensorFlow Lite Micro的C扩展在物联网、传感器处理、语音识别等5大场景的应用方法。突出低功耗、高实时性优势,提供轻量级模型部署方案,助力开发者高效实现边缘计算。实用技巧值得收藏。

Algorhythm的博客 1019
上一篇: [ESP32]:百度语音识别
下一篇: [全志T113]:ST7701 86屏幕驱动
YAN_KEEE
博客等级 码龄9年 287粉丝 41原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值