答えて

2

あなたはGとBを選択しますあなたの入力の上畳み込み層を追加することができます。

layer { 
    name: "select_B_G" 
    type: "Convolution" 
    bottom: "data" 
    top: "select_B_G" 
    convolution_param { kernel_size: 1 num_output: 2 bias_term: false } 
    param { lr_mult: 0 } # do not learn parameters for this layer 
} 

あなたはこの層は

をするためのいくつかの net surgery前の重みを設定するための訓練を行う必要があります
net.params['select_B_G'][0].data[...] = np.array([[1,0,0],[0,1,0]], dtype='f4') 

注:は時々カフェにロードされた画像は、チャネル・スワップ・変換を通過している、すなわち、RGB - > BGR、したがって、あなたが選ぶどのチャンネルに注意する必要があります。

+0

ありがとうございます。 Matlapのためのどんな手掛かり? – user570593

+0

@ user570593何がmatlabにありますか?ネット手術?古いmatlabユーザとして、私はcaffeを扱う際にはPythonに移行することを強くお勧めします。 – Shai

+0

Matlabを使ってどうすればいいのですか? – user570593

2

私はこのコードをテストしませんでしたが、これを行うには単純なpython層を書きました。あなたは、これが正常に動作します。この

layer { 
    name: "GB" 
    type: "Python" 
    bottom: "data" 
    top: "GB" 
    python_param { 
    module: "MyPythonLayer" 
    layer: "ExtractGBChannelLayer" 
    } 
} 

希望のようImageDataLayer後層を挿入することができprototxtで

import caffe 

class ExtractGBChannelLayer(caffe.Layer): 
    def setup(self,bottom,top): 
    pass 
    def reshape(self,bottom,top): 
    bottom_shape=bottom[0].data.shape 
    top_shape=[bottom_shape[0],2,bottom_shape[2],bottom_shape[3]] #because we only want G and B channels. 
    top[0].reshape(*top_shape) 
    def forward(self,bottom,top): 
    #copy G and B channel to top, note caffe BGR order! 
    top[0].data[:,0,...]=bottom[0].data[:,1,...] 
    top[0].data[:, 1, ...] = bottom[0].data[:, 0, ...] 
    def backward(self,top,propagate_down,bottom): 
    pass 

あなたはMyPythonLayer.py

としてこのファイルを保存することができます。

+0

素敵な答え! [Shaiの](http://stackoverflow.com/a/36551710/1714410)に対するこの答えの利点は、その単純さです。しかし、 '' Convolution ''レイヤーインフラストラクチャを使うことはより速くなるかもしれません。 – Shai

0

これは私が使用したMatlabコードであり、動作します。

caffe.reset_all(); % reset caffe 
caffe.set_mode_gpu(); 
gpu_id = 0; % we will use the first gpu in this demo 
caffe.set_device(gpu_id); 
net_model = ['net_images.prototxt']; 
net = caffe.Net(net_model, 'train') 
a = zeros(1,1,3,2); 
a(1,1,:,:) = [[1,0,0];[0,1,0]]'; % caffe uses BGR color channel order 
net.layers('select_B_G').params(1).set_data(a); 
solver = caffe.Solver(solverFN); 
solver.solve(); 
net.save(fullfile(model_dir, 'my_net.caffemodel')); 
+0

私が正しく理解していれば、この回答は「スタンドアローン」ではなく、[この回答](http://stackoverflow.com/a/36551710/1714410)のpythonic net surgery部分に取って代わります。私は正しいですか? – Shai

+0

はい。それは正しく、あなたの答えに感謝します。 – user570593

関連する問題