查看: 275|回复: 6

TFLite模型终极开盲盒来啦!

[复制链接]
  • TA的每日心情
    开心
    2024-3-26 15:16
  • 签到天数: 266 天

    [LV.8]以坛为家I

    3302

    主题

    6549

    帖子

    0

    管理员

    Rank: 9Rank: 9Rank: 9

    积分
    32045
    最后登录
    2024-4-29
    发表于 2024-3-19 08:51:48 | 显示全部楼层 |阅读模式
    大家好!前两期的内容,不知道大家是不是都已经体验过了呢~


    上期小编带着大家从源码开始编译了一个叫做flatc的小工具。可以用来实现对于TFLite模型格式的解析与生成。然后也带着大家,手动编辑了以下json文件,为模型添加了一个新的输出节点:      
    11.png
    相信大家一定不想仅仅局限于手动编辑吧?那小编就满足大家的好奇心,继续给大家看看如何利用python脚本进行自动化编辑,用代码的方式,编译TFLite模型。


    在开始前,先给大家介绍一下何谓JSON格式:


    JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,基于JavaScriptJSON(JavaScript Object Notation)是一种轻量级的数据交换格式,基于JavaScript编程语言的一个子集。它的主要优点包括:


    数据格式简单,易于读写


    格式已压缩,占用带宽小


    易于解析,客户端JavaScript可通过eval ()进行JSON数据的读取


    支持多种语言,包括ActionScript, C, C#, ColdFusion, Java, JavaScript, Perl, PHP,     Python, Ruby等服务器端语言,便于服务器端的解析


    PHP-JSON和JSON-PHP已经存在PHP领域,偏于PHP序列化后的程序直接调用,PHP服务器端的对象、数组等能直接生成JSON格式,便于客户端的访问提取


    JSON格式可直接为服务器端代码使用,极大简化了服务器端和客户端的代码开发量,且完成任务不变,并易于维护
    与此同时,JSON也存在一些不足:


    没有XML格式推广和使用的广泛性,没有XML的通用性


    目前在Web Service中推广还属于初级阶段

    好啦!书归正传,我们在使用python进行处理时就需要用到json库,使用方式很直接,同时为了保证都进来的json文件中的元素不会被打乱顺序,需要用到OrderedDict:
    1. import json
    2. from collections import OrderedDict
    复制代码
    接下来就是将json文件读取进来:
    1. json_file = "./cifar10.json"
    2. json_ctx = json.load(open(json_file),  object_pairs_hook=OrderedDict)
    复制代码
    不过,此时直接进行读取,会报错:
    12.png
    这是因为flatc转换出来的json文件不太符合标准,需要进行一下修改:
    1. import re
    2. json_file = "./cifar10.json"
    3. json_pad_file = "./cifar10_pad.json"
    4. f = open(json_file, 'r+')
    5. with open(json_pad_file, "w") as j:
    6.     for idx, i in enumerate(f.readlines()):
    7.         _word = re.search(".*?:", i)
    8.         if(_word):
    9.             s = _word.start()
    10.             e = _word.end()
    11.             word = i[s:e-1].strip()
    12.             i = i.replace(word, '"' + word + '"' )
    13.         j.write(i)
    14.     j.close()
    15. f.close()
    16. json_ctx = json.load(open(json_pad_file), object_pairs_hook=OrderedDict)
    复制代码
    这样一来,就可以成功打开了:
    13.png
    获取模型输出:
    1. outputs_list =  json_ctx['subgraphs'][0]['outputs']
    复制代码
    可以看到果然是我们上次所修改的0和11:
    14.png
    现在我们就可以直接进行修改,将输出变回去,只有一个0作为输出:
    1. json_ctx['subgraphs'][0]['outputs'] = [0]
    复制代码
    重新保存json文件:
    1. json_saved_file = "cifar10_new.json"
    2. datas = json.dumps(json_ctx, ensure_ascii=False,indent=4)
    3. with open(json_saved_file,'w+') as f:
    4.     f.write(datas)
    5.     f.close()
    复制代码
    利用flatc工具导出tflite格式,模型会保存成cifar10_new.tflite:
    15.png
    使用模型可视化工具将模型打开:
    16.png
    再检查下模型输入输出参数:
    17.png
    转换成功!这样我们就可以通过编写python脚本更加灵活的对TFLite格式文件进行处理。当然实际上是利用python的json库对json文件进行处理,间接实现改造TFLite文件的目的。


    至此,全部TFLite模型的开盲盒体验就完结了。希望大家发挥想象,使TFLite模型成为自由可编辑的模型格式!加油!




    签到签到
    回复

    使用道具 举报

  • TA的每日心情

    6 小时前
  • 签到天数: 1943 天

    [LV.Master]伴坛终老

    61

    主题

    1万

    帖子

    3

    版主

    Rank: 7Rank: 7Rank: 7

    积分
    17326
    最后登录
    2024-4-29
    发表于 2024-3-19 09:55:30 | 显示全部楼层
    学习学习,搞AI
    该会员没有填写今日想说内容.
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    7 小时前
  • 签到天数: 1282 天

    [LV.10]以坛为家III

    21

    主题

    1万

    帖子

    1

    金牌会员

    Rank: 6Rank: 6

    积分
    13258
    最后登录
    2024-4-29
    发表于 2024-3-19 13:57:31 | 显示全部楼层
    感谢分享!
    跟着日天混 ,三天饱九顿!
    回复

    使用道具 举报

  • TA的每日心情
    慵懒
    昨天 14:34
  • 签到天数: 1213 天

    [LV.10]以坛为家III

    22

    主题

    4770

    帖子

    0

    版主

    Rank: 7Rank: 7Rank: 7

    积分
    8094

    活跃会员

    最后登录
    2024-4-28
    发表于 2024-3-19 16:22:37 | 显示全部楼层
    学习一下,谢谢分享
    该会员没有填写今日想说内容.
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    奋斗
    10 小时前
  • 签到天数: 2042 天

    [LV.Master]伴坛终老

    17

    主题

    4832

    帖子

    5

    金牌会员

    Rank: 6Rank: 6

    积分
    9915
    最后登录
    2024-4-29
    发表于 2024-3-19 20:00:11 | 显示全部楼层

    学习学习,谢谢分享
    该会员没有填写今日想说内容.
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    7

    主题

    20

    帖子

    0

    注册会员

    Rank: 2

    积分
    125
    最后登录
    2024-4-29
    发表于 2024-3-20 15:13:24 | 显示全部楼层
    学习学习了,不错。有学习Tensorflow训练模型简易入门教程吗?
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    奋斗
    2024-3-22 08:52
  • 签到天数: 437 天

    [LV.9]以坛为家II

    3

    主题

    1789

    帖子

    0

    金牌会员

    Rank: 6Rank: 6

    积分
    3936
    最后登录
    2024-4-11
    发表于 2024-3-23 10:48:48 | 显示全部楼层
    学习一下
    回复

    使用道具 举报

    您需要登录后才可以回帖 注册/登录

    本版积分规则

    关闭

    站长推荐上一条 /4 下一条

    Archiver|手机版|小黑屋|恩智浦技术社区

    GMT+8, 2024-4-29 20:35 , Processed in 0.145365 second(s), 28 queries , MemCache On.

    Powered by Discuz! X3.4

    Copyright © 2001-2024, Tencent Cloud.

    快速回复 返回顶部 返回列表