2016-03-26 12 views
1

私の16ビットデータを受け入れるためにCaffeをいくつか修正しようとしています。
image_convertまたはDIGITSユーティリティで作成できる通常の8ビットのlmdbと同じように、通常のcaffe 8ビットの符号なしデータの代わりに、16ビットの符号なし、符号化されていない256x256イメージでlmdbデータセットを作成することに成功しました。
このlmdbを16ビットの "文字列"データで作成するために、io.py関数array_to_datumdatum_to_arrayを変更しました。 このlmdbをcaffe(ちょうど4つのクラス)で使用すると、ネットワークは動作しますが、収束しません。私は強く、自分のデータを正しく読んでいないと思う。 問題は、io.py関数array_to_blobprotoblobproto_to_arrayは内部データの内容を区別していないようですが、16ビットを扱うために変更する必要があるコードを見つけることができません。
誰かが私に仕事のヒントを教えてもらえますか?lmdb内の16ビットデータを受け入れるようにCaffeを変更しました

編集: コードを使いこなすと、lmdbを使わずにpngに直接作業したい場合は、新しいデータレイヤーまたは新しいイメージデータレイヤーを作成する必要があります。しかし、そのC++コードを修正しようとすることは、私にとって些細な作業ではありません。私はコード内のデータフローに簡単に従うことができません。私は新しい層がPythonで記述できることを知っています。新しい入力データレイヤーがうまく動作するか、またはcnnのパフォーマンスが低下すると思いますか?

答えて

0

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

lmdbの代わりにhdf5バイナリ入力を使用することを強くお勧めします。
あなたが持っている16ビット画像をfloat32に変換し、hdf5ファイルに保存してから、"HDF5Data"レイヤー経由でcaffeに入力することができます。

詳細については、hdf5とcaffe in this threadを参照してください。

関連する問題