日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

TensorRT学习笔记7 - 保存与读取序列化的结果

發(fā)布時間:2025/3/15 编程问答 37 豆豆
生活随笔 收集整理的這篇文章主要介紹了 TensorRT学习笔记7 - 保存与读取序列化的结果 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

目錄

  • 保存序列化的結(jié)果
  • 讀取序列化的結(jié)果



? ? ? ?我們使用TensorRT轉(zhuǎn)化Caffe模型時,每次都要使用如下代碼將模型序列化,之后再進行反序列化,才可以進行inference。但是build engine的過程是十分耗時的,我們可以將序列化的結(jié)果保存至本地,以后直接讀取本地的序列化結(jié)果即可,無需build engine,這樣可以節(jié)省很多時間。

// 此函數(shù)用于得到pluginFactory和gie_model_stream void objectDetection::caffeToGIEModel(const std::string& deploy_file,const std::string& model_file,const std::vector<std::string>& outputs,unsigned int max_batch_size,nvcaffeparser1::IPluginFactory* pluginFactory,IHostMemory **gie_model_stream) {...... //函數(shù)中的其他代碼ICudaEngine *engine = builder->buildCudaEngine(*network);...... //函數(shù)中的其他代碼// 得到序列化的模型結(jié)果(*gie_model_stream) = engine->serialize();...... //函數(shù)中的其他代碼 }// 調(diào)用caffeToGIEModel得到_plugin_factory和_gie_model_stream caffeToGIEModel(_deploy_file, _model_file, _outputs, _batch_size, &_plugin_factory, &_gie_model_stream);// 將序列化得到的結(jié)果進行反序列化,以執(zhí)行后續(xù)的inference _engine = _runtime->deserializeCudaEngine(_gie_model_stream->data(), _gie_model_stream->size(), &_plugin_factory);

保存序列化的結(jié)果

// 此函數(shù)用于得到pluginFactory和gie_model_stream void objectDetection::caffeToGIEModel(const std::string& deploy_file,const std::string& model_file,const std::vector<std::string>& outputs,unsigned int max_batch_size,nvcaffeparser1::IPluginFactory* pluginFactory,IHostMemory **gie_model_stream) {...... //函數(shù)中的其他代碼ICudaEngine *engine = builder->buildCudaEngine(*network);...... //函數(shù)中的其他代碼// 得到序列化的模型結(jié)果(*gie_model_stream) = engine->serialize();// 設(shè)置保存文件的名稱為cached_model.binstd::string cache_path = "../cached_model.bin";std::ofstream serialize_output_stream;// 將序列化的模型結(jié)果拷貝至serialize_str字符串std::string serialize_str;serialize_str.resize( (*gie_model_stream)->size() );memcpy((void*)serialize_str.data(), (*gie_model_stream)->data(), (*gie_model_stream)->size());// 將serialize_str字符串的內(nèi)容輸出至cached_model.bin文件serialize_output_stream.open(cache_path);serialize_output_stream << serialize_str;serialize_output_stream.close();...... //函數(shù)中的其他代碼 }

讀取序列化的結(jié)果

// 調(diào)用caffeToGIEModel得到_plugin_factory,將此函數(shù)中和_gie_model_stream相關(guān)的代碼注釋或者刪除 caffeToGIEModel(_deploy_file, _model_file, _outputs, _batch_size, &_plugin_factory, &_gie_model_stream);// 從cached_model.bin文件中讀取序列化的結(jié)果 std::string cached_path = "../cached_model.bin"; std::ifstream fin(cached_path);// 將文件中的內(nèi)容讀取至cached_engine字符串 std::string cached_engine = ""; while (fin.peek() != EOF){ // 使用fin.peek()防止文件讀取時無限循環(huán)std::stringstream buffer;buffer << fin.rdbuf();cached_engine.append(buffer.str()); } fin.close();// 將序列化得到的結(jié)果進行反序列化,以執(zhí)行后續(xù)的inference _engine = _runtime->deserializeCudaEngine(cached_engine.data(), cached_engine.size(), &_plugin_factory);

總結(jié)

以上是生活随笔為你收集整理的TensorRT学习笔记7 - 保存与读取序列化的结果的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。