すべての重要な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
を作成します(この場合は、トレーニングに指定されたData Layerを使用)、または
_net = caffe.Net('/path/prototxt/descriptor/file', '/path/caffemodel/weights/file', caffe.TEST)
_
Net
を作成し、提供されたcaffemodelファイルに保存されている重みを自動的にロードします-この場合はテスト用に指定されたデータ層。
Net
オブジェクトには、いくつかの属性とメソッドがあります。それらは here にあります。頻繁に使用するものだけを引用します。
_Net.blobs
_を使用してネットワークBLOBにアクセスできます。例えば。
_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
は、トレーニング中のネットワークと、存在する場合はテストに使用されるネットワークをカプセル化します。通常、それらは同じネットワークであり、異なるData Layerのみであることに注意してください。ネットワークにアクセスするには
_ training_net = solver.net
test_net = solver.test_nets[0] # more than one test net is supported
_
次に、ソルバーの反復を実行できます。つまり、次のように入力するだけで、重みの更新を伴うフォワード/バックワードパスを実行できます。
_ solver.step(1)
_
または、最後の反復までソルバーを実行します。
_ solver.solve()
_
Pycaffeでは、 Python class を使用してネットワークアーキテクチャを指定する)や 新しいLayertype 。これらの機能はあまり使用されませんが、テストケースを読むことで非常に簡単に理解できます。
フラビオ・フェラーラの答えにはリッテの問題があり、多くの時間を無駄にすることに注意してください。
_net.blobs['data'].data[...] = my_image
net.forward()
_
最初のレイヤーがデータ型レイヤーの場合、上記のコードは効果がありません。なぜなら、net.forward()
が呼び出されると、最初のレイヤーから始まり、挿入されたデータ_my_image
_がカバーされるからです。したがって、エラーは表示されませんが、まったく無関係な出力が得られます。正しい方法は、開始レイヤーと終了レイヤーを割り当てることです、例えば:
net.forward(start='conv1', end='fc')
以下は、pycaffeといくつかのmatlabコードを使用した、LFWデータセットでのFace Verification ExperimentのGithubリポジトリです。特に_caffe_ftr.py
_ファイルが大いに役立つと思います。
https://github.com/AlfredXiangWu/face_verification_experiment
さらに、画像分類にpycaffeを使用する短いコード例を以下に示します。
http://codrspace.com/Jaleyhd/caffe-python-tutorial/http://prog3.com/sbdm/blog/u011762313/article/details/48342495