簡體   English   中英

圖層刪除和更新Caffe模型

[英]Layer drop and update caffe model

我需要從現有的caffe模型中更新caffe模型,在其中我將刪除最后兩層。 需要減小Caffe模型的大小,以便部署起來更容易和更小。 假設我現有的caffe模型是A1.caffemodel ,它具有5個卷積層3個完全連接的層 我想從中生成一個名為B1.caffemodel的新模型,它將具有5個卷積層1個完全連接的層 (丟棄了最后2個fc層)。

感謝您提出的所有寶貴建議和有用的代碼段。

完全連接的層確實可能非常重。 請查看GirshickR Fast-RCNN ICCV 2015上的 “ 3.1截斷SVD以更快地進行檢測” 部分,其中描述了如何使用SVD技巧來顯着減少全連接層的負擔。 因此,您可以用6個非常薄的層替換三個完全連接的層。

從模型AB

  1. 創建B.prototxt ,它具有5個卷積層, 並具有與 A 相同的"name"

  2. B的單個完全連接層賦予A中不存在的新"name"

  3. 在python中

     import caffe B = caffe.Net('/path/to/B.prototxt', '/path/to/weights_A.caffemodel', caffe.TEST) B.save('/path/to/weights_B.caffemodel') 
  4. 現在,您具有的B的權重與所有卷積層的A的權重相同,而對於新的單個完全連接層的權重則是隨機的。

  5. '/path/to/weights_B.caffemodel'開始微調模型B ,以學習新的單個完全連接層的權重。

C ++實現:

    Net<float> caffe_net("B.prototxt", caffe::TEST);
    caffe_net.CopyTrainedLayersFrom("A.caffemodel");

    caffe::NetParameter net_param;
    caffe_net.ToProto(&net_param);
    caffe::WriteProtoToBinaryFile(net_param, "B.caffemodel");

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM