TFLite模型的開盲盒體驗
相信在嵌入式平臺上部署過神經網絡模型的伙伴,都不會對TFLite格式陌生。TFLite是谷歌推出的一個輕量級推理庫,它的主要目標是在移動端和嵌入式設備上部署深度學習模型。為了在這些設備上運行,需要將訓練好的TensorFlow模型轉換成一種特殊的格式,這就是TensorFlow Lite模型。轉換過程包括模型轉化、部署和優(yōu)化三個步驟,旨在提升運算速度并減少內存、顯存占用。
具體來說,這其中最終要的就是以.TFLite為格式的模型文件,其主結構為一個Model。在這個模型中,包含了操作符(Operator code)、子圖(SubGraph)以及緩沖區(qū)(Buffer)。子圖中定義了模型中的子圖,包括各個tensor,輸入輸出的Tensor,以及子圖中的各個算子。
還真是麻雀雖小,五臟俱全啊。那么是什么技術支撐TFLite這個小小的身體內部能夠儲存這么大的能量呢?答案就是FlatBuffer。
FlatBuffers是一種高效的二進制序列化格式,使用C++編寫,是一個開源的、跨平臺的序列化工具庫,由Google提供并維護。它實現(xiàn)了一種類似于Protocol Buffers的序列化格式。這個庫的主要特點包括:對序列化的數(shù)據(jù)不需要打包和拆包,內存和效率速度高,擴展靈活,代碼依賴較少,強類型設計,編譯期即可完成類型檢查,使用簡單,可跨平臺使用。
一個FlatBuffers文件主要由三部分組成:verison、string table和buffer。其中,version表示FlatBuffers的版本號;string table存儲了序列化數(shù)據(jù)中所有的字符串;buffer則包含了實際的數(shù)據(jù)內容。
在實際應用中,例如在Android應用程序中,JSON數(shù)據(jù)可以在應用程序之外的某個地方被轉換成FlatBuffer格式的文件。這些二進制數(shù)據(jù)可以以文件的形式提交,也可以從API直接返回FlatBuffer二進制文件。
值得一提的是,F(xiàn)latBuffers是一種無需解碼的二進制格式,因此其解碼性能極高,要比Protobuf快幾百倍,比JSON更快得多。所以,對于需要重度依賴反序列化的場景,可以考慮使用FlatBuffers。
相較于其他序列化格式,如JSON、XML和Protocol Buffers等,F(xiàn)latBuffers具有以下特點:
1. 高效性:FlatBuffers的序列化和反序列化速度非常快,因為它不需要進行解析和編碼操作,而是直接將數(shù)據(jù)寫入或讀取內存。
2. 緊湊性:FlatBuffers生成的二進制文件大小比JSON、XML等文本格式更小,因為它只存儲實際的數(shù)據(jù)內容,而不包括任何元數(shù)據(jù)或格式化信息。
3. 靈活性:FlatBuffers支持定義復雜的數(shù)據(jù)結構,并可以在運行時動態(tài)修改這些結構。此外,它還提供了一些高級功能,如嵌套表、枚舉類型和引用等。
4. 易于使用:FlatBuffers提供了一個簡單的API,可以方便地將數(shù)據(jù)序列化為二進制格式,或將二進制數(shù)據(jù)反序列化為對象。此外,它還提供了一個可視化工具,可以幫助用戶快速創(chuàng)建和管理數(shù)據(jù)模型。
5. 跨平臺性:FlatBuffers可以在多種編程語言中使用,包括C++、Java、Python等。此外,它還支持多種操作系統(tǒng)和硬件平臺。
當然,講了這么多,小編也只是想告訴大家,正所謂知己知彼。既然我們想要打開TFLite這個盲盒,當然要知道他是誰,以及他的一切。那么現(xiàn)在,我們知道了,TFLite表面上是一種模型表達格式,包含了模型的基本信息。而其內在,是一個叫做FlatBuffer的技術在支撐著它。
具體來說,TFLite模型實際上是以FlatBuffer格式存儲的。在進行模型轉換時,例如將TensorFlow訓練好的模型轉化為適合在移動設備上運行的輕量級模型時,我們主要使用的是TensorFlow Lite Converter。這個轉換器可以將訓練好的TensorFlow模型轉換成.TFLite文件,也就是FlatBuffer格式的文件。所以說,TFLite與FlatBuffers的關系就在于,TFLite利用FlatBuffer這種高效二進制序列化格式來存儲和表示其模型數(shù)據(jù)。
想要打開盲盒,鑰匙就在這個叫做FlatBuffer的技術。我們可以使用flatc工具來解析FlatBuffer,其依賴對應的schema,這個schema類似于protobuf的proto文件,用來定義數(shù)據(jù)封裝格式。
如此一來,我們就找到了切入點,利用一個叫做flatc的工具來解析FlatBuffer格式的TFLite模型,以查看其中的內容。當然,查看內容是為了后面根據(jù)需要進行修改。
小編將在下期帶大家從源碼開始構建屬于我們自己的flatc工具,并對TFLite模型進行解析及簡單修改。預知如何編輯,請見下期分解啦!
開盲盒后續(xù):TFLite模型的開盲盒體驗之編輯模型 http://2s4d.com/article/202405/458554.htm
開盲盒終極:TFLite模型終極開盲盒來啦! http://2s4d.com/article/202405/458557.htm
評論