色婷婷AⅤ一区二区三区|亚洲精品第一国产综合亚AV|久久精品官方网视频|日本28视频香蕉

          新聞中心

          EEPW首頁(yè) > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > TFLite模型的開(kāi)盲盒體驗(yàn)

          TFLite模型的開(kāi)盲盒體驗(yàn)

          作者: 時(shí)間:2024-05-10 來(lái)源:恩智浦MCU加油站 收藏

          的開(kāi)盲盒體驗(yàn)之flatbuffer格式介紹

          本文引用地址:http://cafeforensic.com/article/202405/458552.htm

          相信在嵌入式平臺(tái)上部署過(guò)神經(jīng)網(wǎng)絡(luò)的伙伴,都不會(huì)對(duì)格式陌生。是谷歌推出的一個(gè)輕量級(jí),它的主要目標(biāo)是在移動(dòng)端和嵌入式設(shè)備上部署。為了在這些設(shè)備上運(yùn)行,需要將訓(xùn)練好的TensorFlow模型轉(zhuǎn)換成一種特殊的格式,這就是TensorFlow Lite模型。轉(zhuǎn)換過(guò)程包括模型轉(zhuǎn)化、部署和優(yōu)化三個(gè)步驟,旨在提升運(yùn)算速度并減少內(nèi)存、顯存占用。

          具體來(lái)說(shuō),這其中最終要的就是以.TFLite為格式的模型文件,其主結(jié)構(gòu)為一個(gè)Model。在這個(gè)模型中,包含了操作符(Operator code)、子圖(SubGraph)以及緩沖區(qū)(Buffer)。子圖中定義了模型中的子圖,包括各個(gè)tensor,輸入輸出的Tensor,以及子圖中的各個(gè)算子。

          還真是麻雀雖小,五臟俱全啊。那么是什么技術(shù)支撐TFLite這個(gè)小小的身體內(nèi)部能夠儲(chǔ)存這么大的能量呢?答案就是FlatBuffer。

          FlatBuffers是一種高效的二進(jìn)制序列化格式,使用C++編寫,是一個(gè)開(kāi)源的、跨平臺(tái)的序列化工具庫(kù),由Google提供并維護(hù)。它實(shí)現(xiàn)了一種類似于Protocol Buffers的序列化格式。這個(gè)庫(kù)的主要特點(diǎn)包括:對(duì)序列化的數(shù)據(jù)不需要打包和拆包,內(nèi)存和效率速度高,擴(kuò)展靈活,代碼依賴較少,強(qiáng)類型設(shè)計(jì),編譯期即可完成類型檢查,使用簡(jiǎn)單,可跨平臺(tái)使用。

          一個(gè)FlatBuffers文件主要由三部分組成:verison、string table和buffer。其中,version表示FlatBuffers的版本號(hào);string table存儲(chǔ)了序列化數(shù)據(jù)中所有的字符串;buffer則包含了實(shí)際的數(shù)據(jù)內(nèi)容。

          在實(shí)際應(yīng)用中,例如在Android應(yīng)用程序中,JSON數(shù)據(jù)可以在應(yīng)用程序之外的某個(gè)地方被轉(zhuǎn)換成FlatBuffer格式的文件。這些二進(jìn)制數(shù)據(jù)可以以文件的形式提交,也可以從API直接返回FlatBuffer二進(jìn)制文件。

          值得一提的是,F(xiàn)latBuffers是一種無(wú)需解碼的二進(jìn)制格式,因此其解碼性能極高,要比Protobuf快幾百倍,比JSON更快得多。所以,對(duì)于需要重度依賴反序列化的場(chǎng)景,可以考慮使用FlatBuffers。

          相較于其他序列化格式,如JSON、XML和Protocol Buffers等,F(xiàn)latBuffers具有以下特點(diǎn):

          1. 高效性:FlatBuffers的序列化和反序列化速度非常快,因?yàn)樗恍枰M(jìn)行解析和編碼操作,而是直接將數(shù)據(jù)寫入或讀取內(nèi)存。

          2. 緊湊性:FlatBuffers生成的二進(jìn)制文件大小比JSON、XML等文本格式更小,因?yàn)樗淮鎯?chǔ)實(shí)際的數(shù)據(jù)內(nèi)容,而不包括任何元數(shù)據(jù)或格式化信息。

          3. 靈活性:FlatBuffers支持定義復(fù)雜的數(shù)據(jù)結(jié)構(gòu),并可以在運(yùn)行時(shí)動(dòng)態(tài)修改這些結(jié)構(gòu)。此外,它還提供了一些高級(jí)功能,如嵌套表、枚舉類型和引用等。

          4. 易于使用:FlatBuffers提供了一個(gè)簡(jiǎn)單的API,可以方便地將數(shù)據(jù)序列化為二進(jìn)制格式,或?qū)⒍M(jìn)制數(shù)據(jù)反序列化為對(duì)象。此外,它還提供了一個(gè)可視化工具,可以幫助用戶快速創(chuàng)建和管理數(shù)據(jù)模型。

          5. 跨平臺(tái)性:FlatBuffers可以在多種編程語(yǔ)言中使用,包括C++、Java、Python等。此外,它還支持多種操作系統(tǒng)和硬件平臺(tái)。

          當(dāng)然,講了這么多,小編也只是想告訴大家,正所謂知己知彼。既然我們想要打開(kāi)TFLite這個(gè)盲盒,當(dāng)然要知道他是誰(shuí),以及他的一切。那么現(xiàn)在,我們知道了,TFLite表面上是一種模型表達(dá)格式,包含了模型的基本信息。而其內(nèi)在,是一個(gè)叫做FlatBuffer的技術(shù)在支撐著它。

          具體來(lái)說(shuō),TFLite模型實(shí)際上是以FlatBuffer格式存儲(chǔ)的。在進(jìn)行模型轉(zhuǎn)換時(shí),例如將TensorFlow訓(xùn)練好的模型轉(zhuǎn)化為適合在移動(dòng)設(shè)備上運(yùn)行的輕量級(jí)模型時(shí),我們主要使用的是TensorFlow Lite Converter。這個(gè)轉(zhuǎn)換器可以將訓(xùn)練好的TensorFlow模型轉(zhuǎn)換成.TFLite文件,也就是FlatBuffer格式的文件。所以說(shuō),TFLite與FlatBuffers的關(guān)系就在于,TFLite利用FlatBuffer這種高效二進(jìn)制序列化格式來(lái)存儲(chǔ)和表示其模型數(shù)據(jù)。

          想要打開(kāi)盲盒,鑰匙就在這個(gè)叫做FlatBuffer的技術(shù)。我們可以使用flatc工具來(lái)解析FlatBuffer,其依賴對(duì)應(yīng)的schema,這個(gè)schema類似于protobuf的proto文件,用來(lái)定義數(shù)據(jù)封裝格式。

          如此一來(lái),我們就找到了切入點(diǎn),利用一個(gè)叫做flatc的工具來(lái)解析FlatBuffer格式的TFLite模型,以查看其中的內(nèi)容。當(dāng)然,查看內(nèi)容是為了后面根據(jù)需要進(jìn)行修改。

          小編將在下期帶大家從源碼開(kāi)始構(gòu)建屬于我們自己的flatc工具,并對(duì)TFLite模型進(jìn)行解析及簡(jiǎn)單修改。預(yù)知如何編輯,請(qǐng)見(jiàn)下期分解啦!

          開(kāi)盲盒后續(xù):TFLite模型的開(kāi)盲盒體驗(yàn)之編輯模型 http://cafeforensic.com/article/202405/458554.htm

          開(kāi)盲盒終極:TFLite模型終極開(kāi)盲盒來(lái)啦! http://cafeforensic.com/article/202405/458557.htm



          評(píng)論


          相關(guān)推薦

          技術(shù)專區(qū)

          關(guān)閉