0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

如何进行tflite模型量化

恩智浦MCU加油站 ? 来源:恩智浦MCU加油站 ? 2025-08-13 11:45 ? 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

开发AI应用分享来到了本系列最后一期分享。

在windows上,如果我们按照上一期的方式安装了tflite2pb,是不能直接运行的。因为命令行工具是为linux编译的。那我们的广大windows用户就无缘了吗?那可未必,小编给大家带来一个好办法,当然不仅仅适用于当前这个tflite2pb工具,话不多说,开始:

首先让我们找到tflite2pb的安装路径:

eff22452-7328-11f0-a18e-92fbcf53809c.png

打开tflite2tensorflow.py文件,并定位到5641行:

f003e674-7328-11f0-a18e-92fbcf53809c.png

我们可以看到,这是函数的主入口,并且添加了对于命令行参数的解析,而且既然是def定义的函数,那我们就可以通过import来进行导入。那接下来小编就要利用这个函数做一些文章,首先在我们编写的转换函数中导入这个叫做main的函数:

fromtflite2tensorflow.tflite2tensorflowimportmain

现在已经导入了进来,接下来是怎么传入main函数需要处理的参数,换句话来说,main函数实际上是处理系统命令行参数,那我们需要做的就是伪造一个系统命令行参数,那简单了,首先导入sys模块,然后开始系统参数伪造:

sys.argv = ['main.py',f'--model_path={tflite_model_name}.tflite',r'--flatc_path=flatc.exe','--schema_path=schema.fbs','--output_pb']

这里通过直接给sys.argv参数赋值,实际上相当于像系统命令行传入了参数,接下来直接调用main:

main()

果不其然,成功运行,和在linux上运行效果一致,我们也获得了saved_model文件夹以及模型:

f0153d2a-7328-11f0-a18e-92fbcf53809c.png

下面就是进行模型的量化:

# Convert the model
converter = tf.lite.TFLiteConverter.from_saved_model("saved_model")
converter.optimizations = [tf.lite.Optimize.DEFAULT]
converter.target_spec.supported_ops = [tf.lite.OpsSet.TFLITE_BUILTINS_INT8]
converter.representative_dataset = gen_representative_data_gen(represent_data)
converter.inference_input_type = tf.int8
converter.inference_output_type = tf.int8
tflite_model = converter.convert()
# Save the i8 model.
withopen(f"{tflite_model_name}_i8_opt.tflite","wb")asf:
 f.write(tflite_model)

熟悉tflite模型量化的伙伴应该是很熟悉了吧?首先声明converter导入我们刚才生成的pb格式模型的文件夹,接下来指定量化类型为:

tf.lite.OpsSet.TFLITE_BUILTINS_INT8

指定代表性数据集:

converter.representative_dataset= gen_representative_data_gen(represent_data)

为了快速验证模型,我们可以先随机出来一些数据来指导模型量化:

defgen_representative_data_gen(datas_path):
 datas= np.load(datas_path)
 datas= (np.random.randint(0,255, size=(10,1,192,192,3), dtype='uint8') /255).astype("float32")
 defrepresentative_data_gen(samples=datas):
   forsample in samples:
     yield[sample]
 returnrepresentative_data_gen

并且指定输入输出格式:

converter.inference_input_type= tf.int8
   converter.inference_output_type= tf.int8

最终保存量化好的模型:

withopen(f"{tflite_model_name}_i8_opt.tflite","wb")asf:
f.write(tflite_model)

当然,我们还可以打印出来模型的算子信息:

intepreter = tf.lite.Interpreter(model_path=f"{tflite_model_name}_i8_opt.tflite")
 op_names =sorted(set([x['op_name']forx inintepreter._get_ops_details()]))
 print("len ops: ",len(op_names))
 print(op_names)

好了,至此,记站在巨人的肩膀上开发AI应用就到此完结了,此次系列分享给大家分享了小编的一次项目开发历程,尤其是涉及到如何将网上找到的,不包含推理代码的模型,如何一步步的进行分析,并最终转换为可以为我们所用的模型,希望能够帮助大家!

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • Linux
    +关注

    关注

    88

    文章

    11535

    浏览量

    214835
  • WINDOWS
    +关注

    关注

    4

    文章

    3617

    浏览量

    91744
  • AI
    AI
    +关注

    关注

    88

    文章

    35726

    浏览量

    282328
  • 函数
    +关注

    关注

    3

    文章

    4388

    浏览量

    65287

原文标题:站在巨人肩膀上开发AI应用分享(三)

文章出处:【微信号:NXP_SMART_HARDWARE,微信公众号:恩智浦MCU加油站】欢迎添加关注!文章转载请注明出处。

收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    使用ml configurator进行tflite网络模型的转换不成功怎么解决?

    使用ml configurator进行tflite网络模型的转换不成功,提示错误,请帮忙协助谢谢 [ERROR] Failed to run QEMU
    发表于 01-31 06:56

    瑞芯微模型量化文件构建

    模型是一张图片输入时,量化文件如上图所示。但是我现在想量化deepprivacy人脸匿名模型,他的输入是四个输入。该模型训练时数据集只标注
    发表于 06-13 09:07

    何进行YOLO模型转换?

    ]# 输入图像反量化范围compile_options.mean = [0, 0, 0] # 预处理均值compile_options.std = [1, 1, 1]# 标准差设为1,不进行归一化
    发表于 08-14 06:03

    模型量化会带来哪些好处?

    量化算法具有什么特点?模型量化会带来哪些好处?
    发表于 09-28 06:32

    tflite接口调用tensorflow模型进行推理

    摘要本文为系列博客tensorflow模型部署系列的一部分,用于实现通用模型的部署。本文主要实现用tflite接口调用tensorflow模型进行
    发表于 12-22 06:51

    EIQ onnx模型转换为tf-lite失败怎么解决?

    我们正在尝试将 tflite 框架与 npu 一起使用来进行机器学习。这是我们的步骤:1)用pytorch训练一个模型2) 以onnx格式导出模型3) eiq工具的covnert
    发表于 03-31 08:03

    如何在MIMXRT1064评估套件上部署tflite模型

    我有一个婴儿哭声检测 tflite (tensorflow lite) 文件,其中包含模型本身。我如何将此模型部署到 MIMXRT1064-evk 以通过 MCUXpresso IDE 运行推理。你能推荐一些用于婴儿哭声检测的教
    发表于 04-06 06:24

    tflite + XNNPACK代表对量化网络的推理不起作用是怎么回事?

    mobilenet_v1_1.0_224_quant.tfliteTFLite 进行基准推理,我发现 XNNPACK 委托未用于推理(很可能是因为这是一个量化网络- 因为它适用
    发表于 04-11 07:05

    如何将DS_CNN_S.pb转换为ds_cnn_s.tflite

    文本文件中添加了您能否提供该脚本或类似脚本,哪个量化和转换模型在 ds_cnn_s.pb 到 ds_cnn_s.tflite 中?
    发表于 04-19 06:11

    RT1060注册内存被TFLite Micro模型中的其他函数覆盖了怎么解决?

    您好,我遇到了一些 TFLM 操作注册在其他操作中被覆盖的错误。这只发生在 INT8/UINT8 量化模型中,这意味着相同的模型但在浮点数中以预期的输出完成执行(尽管非常慢)。我在模型
    发表于 04-20 07:18

    【KV260视觉入门套件试用体验】Vitis AI 进行模型校准和来量化

    过程中不会被修改,但是在部署模型时可能需要用到。 总结 模型的校准和量化看起来很简单,只需少量代码就能完成整个过程。但其实,量化的关键不在于使用Vtiis AI工具,而在于理解
    发表于 10-15 10:51

    使用NVIDIA QAT工具包实现TensorRT量化网络的设计

      目前, TensorFlow 在其开源软件 模型优化工具包 中提供非对称量化。他们的量化方法包括在所需层的输出和权重(如果适用)处插入 QDQ 节点,并提供完整模型或部分层类类型的
    的头像 发表于 06-21 16:54 ?4777次阅读
    使用NVIDIA QAT工具包实现TensorRT<b class='flag-5'>量化</b>网络的设计

    使用Arduino和TFlite进行下垂检测

    电子发烧友网站提供《使用Arduino和TFlite进行下垂检测.zip》资料免费下载
    发表于 06-15 10:25 ?0次下载
    使用Arduino和<b class='flag-5'>TFlite</b><b class='flag-5'>进行</b>下垂检测

    【飞腾派4G版免费试用】第五章:使用C++部署tflite模型到飞腾派

    本章记录下使用 C++ 进行佩奇检测 tflite 模型推理的过程。
    的头像 发表于 12-28 09:08 ?2879次阅读
    【飞腾派4G版免费试用】第五章:使用C++部署<b class='flag-5'>tflite</b><b class='flag-5'>模型</b>到飞腾派

    快速部署Tensorflow和TFLITE模型在Jacinto7 Soc

    电子发烧友网站提供《快速部署Tensorflow和TFLITE模型在Jacinto7 Soc.pdf》资料免费下载
    发表于 09-27 11:41 ?0次下载
    快速部署Tensorflow和<b class='flag-5'>TFLITE</b><b class='flag-5'>模型</b>在Jacinto7 Soc