すべての重要な pycaffe コマンドのチート シートがあるかどうかを知っている人はいますか? これまでのところ、Matlab インターフェイスとターミナル + bash スクリプトを介してのみ caffe を使用していました。
ipython の使用に移行し、ipython ノートブックの例に取り組みたいと思いました。ただし、Python の caffe モジュール内にあるすべての関数の概要を把握するのは難しいと思います。(私はPythonも初めてです)。
すべての重要な pycaffe コマンドのチート シートがあるかどうかを知っている人はいますか? これまでのところ、Matlab インターフェイスとターミナル + bash スクリプトを介してのみ caffe を使用していました。
ipython の使用に移行し、ipython ノートブックの例に取り組みたいと思いました。ただし、Python の caffe モジュール内にあるすべての関数の概要を把握するのは難しいと思います。(私はPythonも初めてです)。
pycaffe テストとこのファイルは、python コーディング インターフェイスへのメイン ゲートウェイです。
まず、Caffe を CPU で使用するか GPU で使用するかを選択します。caffe.set_mode_cpu()
またはcaffe.set_mode_gpu()
をそれぞれ呼び出すだけで十分です。
pycaffe インターフェイスが公開するメイン クラスはNet
. これには 2 つのコンストラクターがあります。
net = caffe.Net('/path/prototxt/descriptor/file', caffe.TRAIN)
単純にNet
(この場合はトレーニング用に指定されたデータレイヤーを使用して) を作成する、または
net = caffe.Net('/path/prototxt/descriptor/file', '/path/caffemodel/weights/file', caffe.TEST)
を作成し、提供されたcaffemodelファイルNet
に保存されている重みを自動的に読み込みます。この場合は、テスト用に指定されたデータ レイヤーを使用します。
オブジェクトにはいくつかのNet
属性とメソッドがあります。それらはここにあります。よく使うものだけ引用します。
を使用して、ネットワーク BLOB にアクセスできますNet.blobs
。例えば
data = net.blobs['data'].data
net.blobs['data'].data[...] = my_image
fc7_activations = net.blobs['fc7'].data
パラメータ (重み) にも同様の方法でアクセスできます。例えば
nice_edge_detectors = net.params['conv1'].data
higher_level_filter = net.params['fc7'].data
では、実際にネットにデータをフィードしてみましょう。したがって、backward()
およびforward()
メソッドを使用します。したがって、単一の画像を分類したい場合は
net.blobs['data'].data[...] = my_image
net.forward() # equivalent to net.forward_all()
softmax_probabilities = net.blobs['prob'].data
勾配の計算に関心がある場合、このbackward()
方法は同等です。
後で再利用するために正味重量を保存できます。それはただの問題です
net.save('/path/to/new/caffemodel/file')
pycaffe によって公開される他のコア コンポーネントはSolver
. ソルバーにはいくつかの種類がありますがSGDSolver
、わかりやすくするためにのみ使用します。カフェモデルをトレーニングするために必要です。ソルバーをインスタンス化できます
solver = caffe.SGDSolver('/path/to/solver/prototxt/file')
はSolver
、トレーニングしているネットワークと、存在する場合はテストに使用されるネットワークをカプセル化します。これらは通常同じネットワークであり、データ層が異なるだけであることに注意してください。ネットワークには次の方法でアクセスできます
training_net = solver.net
test_net = solver.test_nets[0] # more than one test net is supported
次に、ソルバーの反復、つまり重みの更新を伴う前方/後方パスを実行できます。次のように入力します。
solver.step(1)
または、最後の反復までソルバーを実行します。
solver.solve()
pycaffe を使用すると、Python クラスを介してネットワーク アーキテクチャを指定したり、新しいLayer typeを作成したりするなど、さらに多くのことを実行できることに注意してください。これらの機能はあまり使用されませんが、テスト ケースを読めば非常に簡単に理解できます。
Flavio Ferrara による回答には、多くの時間を無駄にする可能性のある小さな問題があることに注意してください。
net.blobs['data'].data[...] = my_image
net.forward()
最初のレイヤーがデータ型レイヤーの場合、上記のコードは効果がありません。net.forward()
が呼び出されると、最初のレイヤーから開始され、挿入されたデータmy_image
がカバーされるためです。したがって、エラーは表示されませんが、まったく無関係な出力が得られます。正しい方法は、開始レイヤーと終了レイヤーを割り当てることです。次に例を示します。
net.forward(start='conv1', end='fc')
これは、pycaffe といくつかの matlab コードを使用した、LFW データセットでの顔検証実験の Github リポジトリです。caffe_ftr.py
特にファイルに関しては、大いに役立つと思います。
https://github.com/AlfredXiangWu/face_verification_experiment
さらに、画像分類に pycaffe を使用する短いサンプル コードを次に示します。</p>
http://codrspace.com/Jaleyhd/caffe-python-tutorial/ http://prog3.com/sbdm/blog/u011762313/article/details/48342495