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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 人工智能 > Caffe >内容正文

Caffe

caffe模型文件解析_深度学习 Caffe 初始化流程理解(数据流建立)

發布時間:2025/3/12 Caffe 88 豆豆
生活随笔 收集整理的這篇文章主要介紹了 caffe模型文件解析_深度学习 Caffe 初始化流程理解(数据流建立) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

深度學習 Caffe 初始化流程理解(數據流建立)

之前在簡書的文章,搬遷過來 ^-^

本文是作者原創,如有理解錯誤,懇請大家指出,如需引用,請注明出處。

#Caffe FeatureMap數據流的建立 ##用語解釋

  • FeatureMap: 輸入的圖片信息或者經過多層處理后的圖片信息。
  • weights: 只針對卷積層存在的權重系數。
  • caffe :文中提到的caffe均指caffed1.0,如果使用caffe2.0會特別指出。

在講解FeatureMap的數據流之前,首先需要明確一下caffe的大體結構,caffe的整體邏輯結構分為3層,分別是Net,Layer和Blob,分別的作用如下:

  • Net: 該層處于CAFFE的最頂層,主要負責對模型文件的讀寫,根據模型文件的內容建立相應的Layer,填充對應層的數據并進行相關的調用。
  • Layer: 該層是實際的執行單元,常見的如卷積層,Pooling層都是處于這一邏輯層。
  • Blob:該層是一個內存管理的模塊,為Layer和Net提供相應的存儲空間,屏蔽上層對于內存分配,CPU,GPU切換的感知。

由上面的講解分層關系不難看出,FeatureMap在整個Caffe框架中,不屬于任何一個Layer,所以它被最頂層的Net層所持有。Net層就需要能夠通過caffe的模型文件推倒出每一層所依賴的輸入,這樣才能構建出一個完整的數據鏈。在這種需求下Caffe引入了兩個定義:

  • bottom: Layer的輸入數據。
  • top: Layer的輸出數據。 具體的形式如下圖(單輸入和多輸入的情形):

所以Net在調用Layer之前就一定知道了Layer的所需要的輸入數據,也就是需要Net層所持有的Blob變量需要被那些層所引用。這些在模型文件中也有直觀的反應(為了方便截圖,刪除了下圖proto中關于Convlution的參數配置):

上述的工作都在Net的Init(void Net::Init(const NetParameter& in_param))函數里面進行了處理,主要實現的就是根據上圖左側的模型文件得到需要建立的Layer的類型,并將各個Layer間的數據鏈接起來。函數中的關鍵參數如下:

名稱功能in_param存放由protobuf轉換出的模型文件bottom_vecs_存放每一層中的輸入數據類型為:vector >top_vecs_存放每一層中的輸出數據類型為:vector >available_blobs存放每一層中的輸出數據類型為:vector >

##常規的數據鏈建立流程是(單輸入單輸出的場景):

  • 鏈接本層的bottom數據( int Net::AppendBottom(const NetParameter& param, const int layer_id, const int bottom_id, set* available_blobs, map* blob_name_to_idx) ),該函數會使用從當前layer持有的bottom信息中得到對應bottom的層名,然后利用該名稱找到對應的blob,并加入到bottom_vecs_。
  • 鏈接本層的top數據(void Net::AppendTop(const NetParameter& param, const int layer_id,const int top_id, set* available_blobs, map* blob_name_to_idx)),該操作就是將本層的輸出數據加入到top_vecs_中,并與 layer_id相關聯,這里同時負責Blob對象的申請。 需要指出的是,新的Blob對象是在top中進行創建的,在Bottom中只是將上一層top的指針添加進來,同時在這個過程中CAFFE還利用available_blobs進行了異常校驗,在每次新加入top的時候記錄對應的Blob名稱,在bottom中鏈接上一層top之后,在available_blobs中將對應的Blob名稱剔除。相關偽代碼如下:
  • for (int layer_id = 0; layer_id < param.layer_size(); ++layer_id) { AppendBottom(); AppendTop(); }復制代碼

    ##多輸入的數據鏈的建立: 細心的同學應該已經發現,當數據為多bottom輸入的時候,因為available_blobs的數據被上一次的鏈接過程刪掉,則再次鏈接相同bottom的時候,會出先異常告警,在這種情況下我們就要引入CAFFE的另外一處理函數 void InsertSplits(const NetParameter& param, NetParameter* param_split),該函數的主要功能就是對 top輸出到多個 Layer的情況進行分割。 整個函數分為兩個部分:

  • 遍歷整個網絡,記錄每一個Layer的top的使用情況,記錄結構放在 top_idx_to_bottom_count中。
  • 遍歷整個網絡,對 top_idx_to_bottom_count > 1 的情況進行處理: a. 首先是對top被多個層使用的Layer進行分割,主要的做法是在該層的后面新建一個Layer ,這個新的Layer的會按照 top_idx_to_bottom_count 的個數和約定的分割名稱(SplitBlobName)去新建top,添加層的代碼如下(此處只展示核心的創建過程,具體調用流程請自行跟蹤):
  • //該函數執行新層的添加 void ConfigureSplitLayer(const string& layer_name, const string& blob_name, const int blob_idx, const int split_count, const float loss_weight, LayerParameter* split_layer_param) { split_layer_param->Clear(); split_layer_param->add_bottom(blob_name); split_layer_param->set_name(SplitLayerName(layer_name, blob_name, blob_idx)); split_layer_param->set_type("Split"); for (int k = 0; k < split_count; ++k) {//split_count就是該top被引用的個數 //添加了分割后的top //命名由SplitBlobName生成 split_layer_param->add_top( SplitBlobName(layer_name, blob_name, blob_idx, k)); if (loss_weight) { if (k == 0) { split_layer_param->add_loss_weight(loss_weight); } else { split_layer_param->add_loss_weight(0); } } } }復制代碼
  • b. 之后,是對使用同一個top的后續層的bottom的blob進行改名,使用與上一步相同的命名規則進行改名。
  • 下面以SqueezeNet1.1為例,展示了添加新的分割層的實例:

    ![Upload new_split_layer.jpg failed. Please try again.]

    通過這樣一個分割的轉化,達到了對多輸入數據流的建立。

    ##遺留問題 上面講的是在初始化階段對FeatureMap數據的鏈接關系的建立,但是對于weights的填充和初始圖片的輸入并沒有進行分析。

    總結

    以上是生活随笔為你收集整理的caffe模型文件解析_深度学习 Caffe 初始化流程理解(数据流建立)的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

    主站蜘蛛池模板: 我的公把我弄高潮了视频 | 伊人久久九| 精品玖玖玖 | 性视频黄色| 777在线视频 | 成年人黄色一级片 | 夜夜免费视频 | 色哟哟免费在线观看 | 99精品久久久久久久婷婷 | 一本色道久久88亚洲精品综合 | 一区二区三区免费看 | 久久偷看各类wc女厕嘘嘘偷窃 | 午夜视频免费在线 | 大尺度在线观看 | 中国黄色小视频 | av网站在线观看免费 | 97中文字幕在线观看 | 日本一区二区三区视频在线观看 | 午夜一区二区三区 | 欧美精品久久久久久久久老牛影院 | 人人射人人 | 色香蕉在线视频 | 国产一级片子 | 美女高潮黄又色高清视频免费 | 国产97av| 欧美精品在欧美一区二区少妇 | 三大队在线观看 | 婷婷视频在线观看 | 国产精品爱啪在线线免费观看 | 香蕉视频久久久 | 亚洲人精品午夜射精日韩 | 亚洲免费在线视频 | 午夜精品福利在线 | 性欧美大战久久久久久久 | 青青草视频在线看 | 色婷婷综合久久久久中文 | 熟女少妇在线视频播放 | 成人影| 久久天天操 | 日本黄色一区 | 红桃视频成人 | 天天艹av | 狠狠操狠狠操 | 欧美性色19p | 日本吃奶摸下激烈网站动漫 | 欧美日本高清视频 | 91中文字日产乱幕4区 | 国产精品久久久久高潮 | 97精品国产97久久久久久免费 | 天堂av亚洲av国产av电影 | 国产激情网站 | 黄色a级片网站 | 日日好av | 男女xx网站 | 日本另类视频 | 亚洲一区二区三区四区在线播放 | 国产三级视频网站 | 又粗又猛又爽又黄少妇视频网站 | 中文字幕无码乱码人妻日韩精品 | 91免费视频网 | 伊人av一区 | 九色视频丨porny丨丝袜 | 波多野结衣之双调教hd | 51精产品一区一区三区 | 国产精品美女久久久久图片 | 国产成人亚洲综合a∨婷婷 台湾a级片 | 波多野结衣一二三区 | 国产一区二区欧美日韩 | 流白浆视频| 日韩黄色免费网站 | av片国产| 欧美亚洲丝袜 | 91高清视频在线观看 | 中文字幕一区二区三区在线视频 | 国产免费av一区二区三区 | 超碰av在线 | 国产成人精品在线视频 | 灌满闺乖女h高h调教尿h | 欧美91av | 青青草伊人久久 | av黄网站 | 99久久伊人| 五月激情av | 国产精品日韩一区二区三区 | 女性女同性aⅴ免费观女性恋 | 国产亚洲精品自拍 | 日本少妇网站 | 激情五月综合色婷婷一区二区 | 国产熟女一区二区丰满 | 天天摸夜夜添狠狠添婷婷 | 日韩在线视频你懂的 | 国产极品粉嫩 | 天天摸天天添 | 国产一级片一区二区 | 亚洲一区和二区 | av这里只有精品 | 亚洲av电影一区 | 六月色丁香 | 亚洲激情网 |