開(kāi)發(fā)AI應(yīng)用分享來(lái)到了本系列最后一期分享。
在windows上,如果我們按照上一期的方式安裝了tflite2pb,是不能直接運(yùn)行的。因?yàn)槊钚泄ぞ呤菫?a target="_blank">linux編譯的。那我們的廣大windows用戶(hù)就無(wú)緣了嗎?那可未必,小編給大家?guī)?lái)一個(gè)好辦法,當(dāng)然不僅僅適用于當(dāng)前這個(gè)tflite2pb工具,話不多說(shuō),開(kāi)始:
首先讓我們找到tflite2pb的安裝路徑:
打開(kāi)tflite2tensorflow.py文件,并定位到5641行:
我們可以看到,這是函數(shù)的主入口,并且添加了對(duì)于命令行參數(shù)的解析,而且既然是def定義的函數(shù),那我們就可以通過(guò)import來(lái)進(jìn)行導(dǎo)入。那接下來(lái)小編就要利用這個(gè)函數(shù)做一些文章,首先在我們編寫(xiě)的轉(zhuǎn)換函數(shù)中導(dǎo)入這個(gè)叫做main的函數(shù):
fromtflite2tensorflow.tflite2tensorflowimportmain
現(xiàn)在已經(jīng)導(dǎo)入了進(jìn)來(lái),接下來(lái)是怎么傳入main函數(shù)需要處理的參數(shù),換句話來(lái)說(shuō),main函數(shù)實(shí)際上是處理系統(tǒng)命令行參數(shù),那我們需要做的就是偽造一個(gè)系統(tǒng)命令行參數(shù),那簡(jiǎn)單了,首先導(dǎo)入sys模塊,然后開(kāi)始系統(tǒng)參數(shù)偽造:
sys.argv = ['main.py',f'--model_path={tflite_model_name}.tflite',r'--flatc_path=flatc.exe','--schema_path=schema.fbs','--output_pb']
這里通過(guò)直接給sys.argv參數(shù)賦值,實(shí)際上相當(dāng)于像系統(tǒng)命令行傳入了參數(shù),接下來(lái)直接調(diào)用main:
main()
果不其然,成功運(yùn)行,和在linux上運(yùn)行效果一致,我們也獲得了saved_model文件夾以及模型:
下面就是進(jìn)行模型的量化:
# 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模型量化的伙伴應(yīng)該是很熟悉了吧?首先聲明converter導(dǎo)入我們剛才生成的pb格式模型的文件夾,接下來(lái)指定量化類(lèi)型為:
tf.lite.OpsSet.TFLITE_BUILTINS_INT8
指定代表性數(shù)據(jù)集:
converter.representative_dataset= gen_representative_data_gen(represent_data)
為了快速驗(yàn)證模型,我們可以先隨機(jī)出來(lái)一些數(shù)據(jù)來(lái)指導(dǎo)模型量化:
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)
當(dāng)然,我們還可以打印出來(lái)模型的算子信息:
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)
好了,至此,記站在巨人的肩膀上開(kāi)發(fā)AI應(yīng)用就到此完結(jié)了,此次系列分享給大家分享了小編的一次項(xiàng)目開(kāi)發(fā)歷程,尤其是涉及到如何將網(wǎng)上找到的,不包含推理代碼的模型,如何一步步的進(jìn)行分析,并最終轉(zhuǎn)換為可以為我們所用的模型,希望能夠幫助大家!
-
Linux
+關(guān)注
關(guān)注
88文章
11576瀏覽量
216674 -
WINDOWS
+關(guān)注
關(guān)注
4文章
3623瀏覽量
92658 -
AI
+關(guān)注
關(guān)注
88文章
37034瀏覽量
290086 -
函數(shù)
+關(guān)注
關(guān)注
3文章
4400瀏覽量
66368
原文標(biāo)題:站在巨人肩膀上開(kāi)發(fā)AI應(yīng)用分享(三)
文章出處:【微信號(hào):NXP_SMART_HARDWARE,微信公眾號(hào):恩智浦MCU加油站】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
使用ml configurator進(jìn)行tflite網(wǎng)絡(luò)模型的轉(zhuǎn)換不成功怎么解決?
瑞芯微模型量化文件構(gòu)建
如何進(jìn)行YOLO模型轉(zhuǎn)換?
用tflite接口調(diào)用tensorflow模型進(jìn)行推理
EIQ onnx模型轉(zhuǎn)換為tf-lite失敗怎么解決?
如何在MIMXRT1064評(píng)估套件上部署tflite模型?
tflite + XNNPACK代表對(duì)量化網(wǎng)絡(luò)的推理不起作用是怎么回事?
如何將DS_CNN_S.pb轉(zhuǎn)換為ds_cnn_s.tflite?
RT1060注冊(cè)內(nèi)存被TFLite Micro模型中的其他函數(shù)覆蓋了怎么解決?
【KV260視覺(jué)入門(mén)套件試用體驗(yàn)】Vitis AI 進(jìn)行模型校準(zhǔn)和來(lái)量化
使用NVIDIA QAT工具包實(shí)現(xiàn)TensorRT量化網(wǎng)絡(luò)的設(shè)計(jì)

使用Arduino和TFlite進(jìn)行下垂檢測(cè)

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

評(píng)論