2016-12-08 2 views
4

私は怒鳴る説明したようImageNetのカフェのモデルを変更したいと思います:Imagenet Caffeモデルを変更するには?

As the input channel number for temporal nets is different from that of spatial nets (20 vs. 3), we average the ImageNet model filters of first layer across the channel, and then copy the average results 20 times as the initialization of temporal nets.

私の質問は、私は上記の結果をachiveことができる方法ですか?これらの変更を行うためには、どのようにしてcaffeモデルを開くことができますか?

私はネット手術のチュートリアルを読んだが、必要な手順については触れていない。

ありがとうございました!

AMayer

答えて

3

Net Surgery tutorialは、あなたがこれをカバーするために必要な基礎を与える必要があります。しかし、私はあなたがより詳細に行うために必要な手順を説明しましょう:

  1. .prototxtネットワークアーキテクチャを準備します。既存のImageNet .prototxtファイル、および新しい一時的なネットワークアーキテクチャ:あなたは、2つのファイルを必要とします。 以外のすべてのレイヤーをにする必要があります。最初の畳み込みレイヤーは、レイヤーの名前を含めて、両方のネットワークで同じです。こうすることで、ImageNet .caffemodelファイルを使用してウェイトを自動的に初期化することができます。

    最初のコンバレイヤーのサイズが異なるため、.prototxtファイルにImageNetファイルとは異なる名前を付ける必要があります。さもなければ、Caffeは既存のウェイトを使ってこのレイヤーを初期化しようとしますが、これは形状が異なるので失敗します。 (これはあなたの質問の編集で起こることです)。 conv1bに変更し、それに応じてそのレイヤーへのすべての参照を変更します。

  2. 負荷テストのためのImageNetネットワーク、あなたがモデルファイルからパラメータを抽出することができますので:

    net = caffe.Net('imagenet.prototxt', 'imagenet.caffemodel', caffe.TEST) 
    
  3. はこのロードされたモデルから重みを抽出します。

    conv_1_weights = old_net.params['conv1'][0].data 
    conv_1_biases = old_net.params['conv1'][1].data 
    
  4. 平均チャネルにわたって重み:

    conv_av_weights = np.mean(conv_1_weights, axis=1, keepdims=True) 
    
  5. 第一層以外の全ての層が直接ImageNetからの重みを使用して、古い.caffemodelファイルと一緒にあなたの新しいネットワークをロードします。

    new_net = caffe.Net('new_network.prototxt', 'imagenet.caffemodel', caffe.TEST) 
    
  6. 新しいネットワークにあなたの計算された平均の重みを割り当て

    new_net.params['conv1b'][0].data[...] = conv_av_weights 
    new_net.params['conv1b'][1].data[...] = conv_1_biases 
    
  7. 新しい.caffemodelファイルにあなたの重みを保存します。

    new_net.save('new_weights.caffemodel') 
    
+0

あなたの知識を共有していただきありがとうございます。私は今それをテストしています。私はそれがいかに進んだかについてすぐにあなたを更新します。私は助けに感謝します。 – AMayer

+0

私はエラーが発生しました。私は問題のより良い見解のためにあなたの提案に基づいて使用したコードでメインポストを更新しました。後で新しい読者を混乱させないようにコードを削除します。私はそこで何をしたの?ありがとうございました! – AMayer

+0

私はそのエラーを渡すことができましたが、別のエラーが発生しました。私はメインポストを更新しました。ありがとうございました! – AMayer

関連する問題