tflite 学习——生成.tflite 模型与验证

Tensorflow Lite从入门到精通   TensorFlow Lite 是 TensorFlow 在移动和 IoT 等边缘设备端的解决方案,提供了 Java、Python 和 C++ API 库,可以运行在 Android、iOS 和 Raspberry Pi 等设备上。目前 TFLite 只提供了推理功能,在服务器端进行训练后,经过如下简单处理即可部署到边缘设备上。 个人使用总结: 如果我们只使用Tensorflow的高级AP... 阅读详情

用Resnet 模型进行验证

Step 1 导入resnet 50模型 

import numpy as np
import tensorflow as tf



physical_devices = tf.config.list_physical_devices('GPU')
for device in physical_devices: # 使用GPU 
    tf.config.experimental.set_memory_growth(device, True)

model = tf.keras.applications.resnet50.ResNet50(weights='imagenet') # 导入resnet 模型 
img = tf.keras.utils.load_img('123.jpg', target_size=[224, 224,3])  # 载入图片并给出size 

x = tf.keras.preprocessing.image.img_to_array(img)  # 处理输入图片尺寸 
x = np.expand_dims(x, axis=0)
x = tf.keras.applications.resnet50.preprocess_input(x)


preds = model.predict(x)  # 预测结果 
# 将结果解码为元组列表 (class, description, probability)
# (一个列表代表批次中的一个样本)
print('Predicted:', tf.keras.applications.resnet50.decode_predictions(preds, top=3)[0])








结果: Predicted: [('n03887697', 'paper_towel', 0.71528304), ('n15075141', 'toilet_tissue', 0.16052581), ('n02948072', 'candle', 0.03291733)]

Step 2 存储Resnet 模型为 Savemodel的格式  两种方法

(1)低级API 

存储 tf.saved_model.save (model, path)

这种形式保存以后文件夹是这样的

加载 tf.saved_model.load(path_to_dir)

具体代码如下 

load_model = tf.saved_model.load('resnet50_low_level_save/') # 加载模型
labeling = load_model(x)   # 
imagenet_labels = np.array(open('ImageNetLabels.txt').read().splitlines())  # ImageNetLabels.txt 文件中包含1000个被识别的物体名字列表 和 一个backgroud 所以下面的物体标号是+1 
decoded = imagenet_labels[np.argsort(labeling)[0, ::-1][:3] + 1]
print(decoded)

(2)高级API 

存储  tf.keras.models.save_model(model, path)

这种形式保存以后文件夹是这样的 多了一个keras_metadata.pb的文件 

加载  tf.keras.models.save_model(path_to_dir)

具体代码如下 

tf.keras.models.save_model(model, 'resnet50_high_level_save/')
load_model = tf.keras.models.load_model('resnet50_high_level_save/') # 加载模型
preds = load_model.predict(x)
decoded = imagenet_labels[np.argsort(preds)[0, ::-1][:3] + 1]

这种方法好处在于可以继续使用keras 的方法

Step 3 利用 Savedmodel 生成.tflite模型 

(1) 低级API 

convert = tf.lite.TFLiteConverter.from_saved_model('resnet50_low_level_save')
tflite_model = convert.convert()

tflite_model_file = pathlib.Path('resnet50_low_level.tflite')
tflite_model_file.write_bytes(tflite_model)

(2) 高级API 

convert = tf.lite.TFLiteConverter.from_saved_model('resnet50_high_level_save')
tflite_model = convert.convert()

tflite_model_file = pathlib.Path('resnet50_high_level.tflite')
tflite_model_file.write_bytes(tflite_model)

Step4 .tflite 模型结果验证

(1)低级API 输入图片的处理利用tensorflow 处理 

import numpy as np
import tensorflow as tf

interpreter = tf.lite.Interpreter(model_path="resnet50_low_level.tflite")
# Get input and output tensors.
input_details = interpreter.get_input_details()
output_details = interpreter.get_output_details()
interpreter.allocate_tensors()
imagenet_labels = np.array(open('ImageNetLabels.txt').read().splitlines())


################################### 输入矩阵处理方式 1 ###################################
img_path = '123.jpg'
print(np.shape(img_path))
img = tf.keras.preprocessing.image.load_img(img_path, target_size=(224, 224, 3))   # 输入矩阵处理方式 1
x = tf.keras.preprocessing.image.img_to_array(img)
x = np.expand_dims(x, axis=0)
x = tf.keras.applications.resnet50.preprocess_input(x)


print(np.shape(x))

interpreter.set_tensor(input_details[0]['index'], x)
interpreter.invoke()
output_data = interpreter.get_tensor(output_details[0]['index'])

decoded = imagenet_labels[np.argsort(output_data)[0, ::-1][:3] + 1]
print(output_data[:,[np.argsort(output_data)[0, ::-1][:3]]])
print("Result before saving:\n", decoded)

结果 : 

与前面的结果基本一样,所以证明一切正确。

 (2)低级API 输入图片的处理利用Opencv 处理 

import numpy as np
import tensorflow as tf
import cv2
interpreter = tf.lite.Interpreter(model_path="resnet50_low_level.tflite")
# Get input and output tensors.
input_details = interpreter.get_input_details()
output_details = interpreter.get_output_details()
interpreter.allocate_tensors()
imagenet_labels = np.array(open('ImageNetLabels.txt').read().splitlines())


################################### 输入矩阵处理方式 2 利用Opencv ###################################
img = cv2.imread("123.jpg")
new_img = cv2.resize(img, (224, 224))
new_img = new_img.astype(dtype=np.float32)
# new_img = tf.cast(new_img , dtype=np.float32)
x = np.expand_dims(new_img, axis=0)

print(np.shape(x))

interpreter.set_tensor(input_details[0]['index'], x)
interpreter.invoke()
output_data = interpreter.get_tensor(output_details[0]['index'])

decoded = imagenet_labels[np.argsort(output_data)[0, ::-1][:3] + 1]
print(output_data[:,[np.argsort(output_data)[0, ::-1][:3]]])
print("Result before saving:\n", decoded)

 从结果看,Opencv 处理的图片,识别效果更好。

(3)高级API 输入图片的处理利用tensorflow 处理 

只需要把低级API保存的模型,改成高级的。

 

结论保存结果的形式,对于tflite的结果无影响。

(4)高级API 输入图片的处理利用tensorflow 处理 

只需要把低级API保存的模型,改成高级的。

 

TFlite模型转换和使用 TFlite 的简单使用 阅读详情

相关推荐

深度学习笔记(九)——tf模型导出保存、模型加载、常用模型导出tflite、权重量化、模型部署

简单介绍了tf2保存模型的方式和相关代码,并导出为tflite,在加载保存的模型进行一次前向推理。最后简单介绍了了两种常用的量化方式。

拨雪寻春,烧灯续昼 4602

TFLite文件解析及格式转换

        随着深度学习越来越流行,工业生产不光在PC端应用场景丰富,在移动端也越来越凸显出深度学习的重要性及应用价值。由于嵌入式平台受存储、指令集限制,需要提供更小的网络模型,并且某些DSP平台不支持float指令。tensorflow提供TOCO转换工具能够自动生成量化为U8的TFLite文件。本文将介绍如何解析tflite的网络结构以及权重信息。 一、tflite文件格式      ...

SilentOB的博客 1万+

tflite模型测试

tflite模型和pb一样都需要测试,仅仅转换成功只是其中的一步,如果测试结果很差劲,就有可能转换过程中有问题,这个问题就多了,比如模型问题、有些Op问题、UNIT8/FLOAT问题,不可预知。无论哪个环节出现问题,都有可能需要重头再来!!比如换模型,后果不堪设想。 我之前提到过,这里也再说一次,目前tf RNN尚不能直接转为tflite,只有按照官方给的trick才可以,GRU是死都不能转的。...

NLP与推荐算法 3599

tensorflow 19: tflite 概念理解

概述 学术界对精度、自由度的要求和工业界对速度、精简度的要求形成了反差,这就使得越来越多的框架开始把training和inference分开,各公司都开始针对移动设备纷纷推出高性能inference库。 tflite tflite其实就是谷歌自己的一个轻量级推理库。主要用于移动端。之前的tensorflow mobile那一套到2019年就不再维护了。 tflite使用的思路主要是从预训练的模型转...

yuanlulu的博客 2万+

python 导入模型_Tensorflow Lite tflite模型的生成与导入 - python

假如想要在ARM板上用tensorflow lite,那么意味着必须要把PC上的模型生成tflite文件,然后在ARM上导入这个tflite文件,通过解析这个文件来进行计算。根据前面所说,tensorflow的所有计算都会在内部生成一个图,包括变量的初始化,输入定义等,那么即便不是经过训练的神经网络模型,只是简单的三角函数计算,也可以生成一个tflite模型用于在tensorflow lite上导...

weixin_30748139的博客 1568

把模型“瘦身”到能上板:TFLite Micro 架构要点与算子裁剪实战

在 MCU 上跑 DNN,核心不在“能不能跑”,而在**内存是否可控**与**算子是否最小化**。本文聚焦 TFLite Micro(TFLM)的落地路径:从 `MicroInterpreter` 与 `MicroAllocator` 的内存模型切入,手工注册**最小算子集**,用**静态 Tensor Arena** 取代一切动态分配,并给出**Arena 估算与收敛**的方法(含二分逼近与上线余量)。最后以“模型加载→AllocateTensors→峰值测量”为闭环,给出可直接粘贴的骨架代码与排错清单,

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

深度学习人物肖像生成:结构化建模与可控生成实战

人物肖像生成并非简单图像合成,而是融合人脸几何建模、语义理解与风格解耦的系统性任务。其核心原理在于突破2D像素回归局限,引入三维可变形模型(3DMM)先验实现姿态-身份-表情三元解耦,并通过关键点引导、光照校准与风格标签注入提升数据质量。技术价值体现在生成结果的几何一致性、ID保真度与跨姿态鲁棒性显著增强,支撑数字人、身份认证、艺术创作等严肃应用场景。本文聚焦PyTorch实战,覆盖从Dlib/CLAHE数据清洗、LPIPS+感知损失优化,到3DMM联合建模与ONNX/TFLite部署全链路,直击GAN生成

weixin_30558697的博客 244

二、模型训练与优化(5):验证优化后的模型

PC 上验证安装或使用;编写脚本加载.tflite模型并推理测试集,以查看准确率和推理速度;适合快速验证,不依赖目标硬件特性。STM32 或其他 MCU 上验证使用导入.tflite或.h5;生成 C 代码并集成到固件工程;在真实硬件上测试资源占用推理速度、以及预测结果是否符合预期。通过这两种方式,就能完整地验证量化后模型在不同平台的推理结果与性能。对于 PC 测试而言,上述 Python 脚本非常直接;对于嵌入式,则需运用目标厂商的工具(如 STM32Cube.AI)或。

FCZlll的博客 1586

Nano-Banana Studio模型蒸馏:知识迁移到轻量级网络

本文介绍了如何在星图GPU平台上自动化部署🍌 Nano-Banana Studio: 衣服拆解展示台镜像,实现服装细节的轻量化拆解与可视化展示。该镜像基于模型蒸馏技术,在保持人物特征一致性的前提下,支持电商场景中快速更换服饰、调整纹理与背景,显著提升商品展示效率。

weixin_34374684的博客 86

TFLite在移动端部署的总结,绝对干货!

最近在忙语音唤醒的工作,涉及了非常多的深度学习集成到移动端的技术点。 这篇博客主要讲的是通过TensorFlow训练出来的模型如何转为可以在移动设备上进行部署的tflite文件。可能有人会说了这个很简单,通过TensorFlow的相关函数就可以了。。。实际上不是这样的,这其中还牵扯很多需要注意的地方。主要的一方面是移动端设备对性能要求极高,有内存大小的要求。因此我们需要将模型的大小不断压缩达到我们...

fmbao的博客 4360

TensorFlow Object Detection API 模型转tflite并验证

最近在用TensorFlow Object DetectionAPI训练目标检测模型,训练好的pb模型大小17.6M,用pb预测效果不错,于是想着如何在手机端运行,查看官网关于tflite的转换,网址:https://github.com/tensorflow/models/blob/master/research/object_detection/g3doc/running_on_mobile...

奥特曼大战神 3165

从数据管线到模型部署:DLology第三期翻译的工程细节与避坑指南

在深度学习工程实践中,数据供给、训练调试与模型部署是决定模型能否真正落地的关键环节。本文从数据管线优化讲起,介绍tf.data与自定义生成器的适用场景,再剖析回调函数、梯度裁剪等训练机制的原理与价值,进而讨论模型导出、量化转换等部署中的常见问题。结合一个实战技术博客的第三期翻译过程,梳理这些概念在实际项目中的应用与避坑经验,帮助读者在阅读英文技术资料时更快抓住核心逻辑。

weixin_29051193的博客 167

K-GAS解读(08)

大众kgas标准,大众及其供应商kgas

m0_51113317的博客 598

Pytorch转tensorflow、tflite,ONNX转为tensorflow、tflite模型

Pytorch模型转tensorflow-keras或者tlite模型,或者ONNX转tensorflow-keras或者tlite模型。

u013666632的博客 6160

Cesium体渲染实战:从医学CT到气象数据的3D可视化全攻略

本文详细介绍了如何利用Cesium体渲染技术实现医学CT和气象数据的3D可视化。从数据预处理到交互式渲染,涵盖了DICOM和NetCDF格式的处理技巧,以及性能优化的实战策略,帮助开发者高效处理复杂的三维数据集。

weixin_28717431的博客 420

Mplus—随机截距交叉滞后模型(RI-CLPM)语法

随机截距交叉滞后模型RI-CLPM的Mplus语法。

m0_54401011的博客 2534

5分钟快速上手onnx2tflite:ONNX模型转TFLite的4步极简教程

onnx2tflite 是一款轻量易用的开源模型转换工具,核心功能是把 ONNX 模型一键转换为 Keras(h5)或 TFLite 格式,平均元素误差小于 1e-5,转换出的 TFLite 模型推理速度比同类工具快约 30%,特别适合想把 PyTorch 视觉模型部署到移动端的初学者。 ## 为什么选择 onnx2tflite?🚀 在开始之前,先用 10 秒了解它的核心优势: | 亮点

gitblog_00431的博客 805

[kriging](一)网上下载的kriging克里金的C++程序的初步调试

笔者在网上下载了一份克里金的C++程序,水平有限,正在逐步地调试中。 初步 克里金法现在在许多软件都已经有集成了,据笔者所知: arcgis : 看过有的arcgis培训视频里面简略介绍了里面的插值方法,有克里金。 surfer :笔者用过这个,效果很好。 gocad :听说有 landmark &jason :研究生时候用的专业的石油物探软件,里面有克里金法,万恶的开始。 pykrig...

FOREST优快云 5612

tflite文件解析

一. 安装flatbuffer 下载flatbuffer:https://github.com/google/flatbuffers 解压flatbuffer,进入其根目录 cd flatbuffers mkdir build cd build cmake .. make -j4 sudo make install flatc --version #输出flatbuffer版...

亦梦云烟的博客 5576

MPC模型预测控制实战:从理论到代码实现(Python示例)

本文详细介绍了MPC模型预测控制的实战应用,从理论到Python代码实现。通过构建系统模型、预测方程、优化问题及约束处理,展示了如何实现一个完整的MPC控制器。文章还提供了水箱液位控制的应用案例,帮助读者掌握MPC在工业控制中的实际应用。

weixin_42653691的博客 460

C语言编写Picard迭代和牛顿迭代法

为了完成学校计算方法的作业,花了两个多星期将所有实验报告编写出来,看到同桌找代码的辛苦,优快云也没有这类代码,我只是一时兴起,想分享我写的代码与大家共飨,有错误还请多多指正,代码都不难,也是为了让优快云帮我保存下,我辛辛苦苦做出来的,倘若能给别人带来一丝一毫的帮助,我都万分荣幸。 1:什么是Picard迭代 先弄一个满足f(x) = 0的函数将其转化为x= 正在上传… 重新上传 取消 ...

mohenxiang的博客 4699

YOLO模型导出为TFLite格式的操作步骤

将YOLO模型转换为TFLite格式,实现边缘设备高效推理。涵盖PyTorch到ONNX、再到TensorFlow SavedModel的转换步骤,详解量化策略与常见问题处理,并提供部署优化建议,帮助开发者在树莓派、手机等资源受限设备上稳定运行目标检测模型。

weixin_42504649的博客 1137

解锁激光加工密码:功率、频率、脉宽、占空比全解析

激光加工利用高能量激光束实现材料加工,具有无接触、高效率等特点。其核心参数包括功率(决定能量输出)、频率(控制脉冲重复)、脉宽(调节能量作用时间)和占空比(调控工作周期),这些参数相互协同影响加工效果。针对不同材料需采用差异化参数组合:金属材料需较高功率,塑料需低功率防过热,陶瓷需高频短脉宽减少热应力。实际操作中应通过小范围测试逐步优化参数,并注意解决烧损、切割不平整等常见问题。合理调节这些参数可实现高质量、高效率的激光加工。

远程部署调试 运行安装 项目调试 二次开发 项目技术新 持续迭代 部分源码免费分享 616

如何轻松实现ONNX到TFLite模型转换?onnx2tflite工具完整指南

onnx2tflite是一款高效实用的开源工具,专门用于将ONNX模型格式转换为TensorFlow Lite(TFLite)模型格式,帮助开发者轻松实现模型在不同框架间的迁移与部署。 ## 一、onnx2tflite工具核心优势解析 ???? ### 为什么选择onnx2tflite进行模型转换? 在深度学习模型部署过程中,不同框架间的模型格式转换常常是开发者面临的一大难题。onnx2tfli...

gitblog_00096的博客 1033

第4章:外包接单全攻略——Upwork/电鸭/猪八戒从0到第一单

> - 三个外包平台的详细对比(适合人群、抽成、防骗) > - 每个平台的Profile优化模板(可直接复制修改) > - 用AI写Proposal的3个Prompt模板(我实测回复率提升50%) > - 报价策略与防骗指南(附5个危险信号) > - 我的第一单复盘:从注册到收款的全过程(含聊天记录脱敏)

sfishfly的博客 576

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

Oumi模型转换:TFLite格式全流程导出指南

你是否在将Oumi训练的大模型部署到移动端时遇到过这些问题?模型体积过大导致安装包臃肿、推理速度慢影响用户体验、设备内存不足频繁崩溃?TFLite(TensorFlow Lite)作为轻量级推理框架,专为移动设备和嵌入式系统优化,能有效解决这些问题。本文将系统讲解如何将Oumi训练的模型转换为TFLite格式,实现模型体积减少70%+、推理速度提升3-5倍的移动端部署效果。 读完本文你将掌握: ...

gitblog_01008的博客 1085

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

上一篇: Linux(Ubuntu) 安装anaconda环境
下一篇: Windows 安装TVM 及各种报错解决!无GPU版本
WilliamCHW
博客等级 码龄15年 62粉丝 43原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值