在线时间4070 小时
UID3441752
注册时间2017-11-21
NXP金币752404
TA的每日心情 | 开心 2024-3-26 15:16 |
---|
签到天数: 266 天 [LV.8]以坛为家I
管理员
- 积分
- 32045
- 最后登录
- 2024-4-29
|
大家好!前两期的内容,不知道大家是不是都已经体验过了呢~
上期小编带着大家从源码开始编译了一个叫做flatc的小工具。可以用来实现对于TFLite模型格式的解析与生成。然后也带着大家,手动编辑了以下json文件,为模型添加了一个新的输出节点:
相信大家一定不想仅仅局限于手动编辑吧?那小编就满足大家的好奇心,继续给大家看看如何利用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:
- import json
- from collections import OrderedDict
复制代码 接下来就是将json文件读取进来:
- json_file = "./cifar10.json"
- json_ctx = json.load(open(json_file), object_pairs_hook=OrderedDict)
复制代码 不过,此时直接进行读取,会报错:
这是因为flatc转换出来的json文件不太符合标准,需要进行一下修改:
- import re
- json_file = "./cifar10.json"
- json_pad_file = "./cifar10_pad.json"
- f = open(json_file, 'r+')
- with open(json_pad_file, "w") as j:
- for idx, i in enumerate(f.readlines()):
- _word = re.search(".*?:", i)
- if(_word):
- s = _word.start()
- e = _word.end()
- word = i[s:e-1].strip()
- i = i.replace(word, '"' + word + '"' )
- j.write(i)
- j.close()
- f.close()
- json_ctx = json.load(open(json_pad_file), object_pairs_hook=OrderedDict)
复制代码 这样一来,就可以成功打开了:
获取模型输出:
- outputs_list = json_ctx['subgraphs'][0]['outputs']
复制代码 可以看到果然是我们上次所修改的0和11:
现在我们就可以直接进行修改,将输出变回去,只有一个0作为输出:
- json_ctx['subgraphs'][0]['outputs'] = [0]
复制代码 重新保存json文件:
- json_saved_file = "cifar10_new.json"
- datas = json.dumps(json_ctx, ensure_ascii=False,indent=4)
- with open(json_saved_file,'w+') as f:
- f.write(datas)
- f.close()
复制代码 利用flatc工具导出tflite格式,模型会保存成cifar10_new.tflite:
使用模型可视化工具将模型打开:
再检查下模型输入输出参数:
转换成功!这样我们就可以通过编写python脚本更加灵活的对TFLite格式文件进行处理。当然实际上是利用python的json库对json文件进行处理,间接实现改造TFLite文件的目的。
至此,全部TFLite模型的开盲盒体验就完结了。希望大家发挥想象,使TFLite模型成为自由可编辑的模型格式!加油!
|
|