2

16 ビット データを受け入れるために、Caffe にいくつかの変更を加えようとしています。
通常の Caffe 8 ビット符号なしデータの代わりに、16 ビット符号なし、エンコードされていない 256x256 画像で満たされた lmdb データセットを作成することに成功し、DIGITS ユーティリティで作成できる通常の 8 ビット lmdb のように「文字列」として保存されましたimage_convert。関数を
変更し、この lmdb を 16 ビットの「文字列」データで作成するようにしました。ここで、この lmdb をカフェ (4 つのクラスのみ) で使用すると、ネットワークは実行されますが、収束しません。私のデータを正しく読み取っていないのではないかと強く疑っています。問題は、関数と内部データの内容を区別していないように見えることです。io.pyarray_to_datumdatum_to_arrayio.pyarray_to_blobprotoblobproto_to_array
どこで取り組むべきか、誰か私にヒントを教えてもらえますか?

編集:コードをいじって、lmdbを介さずにpngで直接作業したい場合は、新しいデータレイヤーまたは新しい画像データレイヤーを作成する必要があると思います。しかし、その C++ コードを変更しようとすることは、特に私にとって簡単な作業ではありません。コード内のデータ フローを簡単にたどることができません。新しいレイヤーはPythonで記述できることがわかりました。新しい入力データ層はうまく機能すると思いますか、それとも cnn のパフォーマンスを低下させると思いますか?

4

1 に答える 1

0

私は、caffe/lmdb インターフェイスの変換と適応についてはあまり知りませんが、自分が何をしているのか 100% 確実でない場合、非常に危険な道のように思えます。
たとえば、python インターフェイスの io 関数を変更しましたが、コマンド ラインから実行するときに caffe がこのインターフェイスを使用しているとは思いません (例: $CAFFE_ROOT/build/tools/caffe train ...)。ファイル内の cpp io 関数を調べましたio.cppか?

別の方法を強くお勧めします: lmdb の代わりに hdf5 バイナリ入力を使用します。
必要な 16 ビット イメージを float32 に変換して hdf5 ファイルに保存し、"HDF5Data"レイヤー経由で caffe に入力できます。

hdf5 と caffe の詳細については、このスレッドを参照してください。

于 2016-03-27T06:57:02.473 に答える