2015-10-16 11 views
6

caffeを使用する場合、イメージを含むトレーニングデータセットを作成するには、lmdbのような特別なフォーマットでデータベースを作成する必要があります。Caffe + Opencv(lmdbなし)

私は、メモリに収まらない大量の画像を扱うことができる解決策を探しています(しかし、1つのトレーニングバッチ(例えば50個の画像を含む)をメモリに格納できると仮定します)。

答えて

6

私たちが使用する入力層に応じて、Caffeは多くの種類の入力を取ることができます。 利用可能な入力方法には次のものがあります

  1. データ
  2. MemoryData
  3. HDF5Data
  4. のImageDataなどのモデルファイルで

、あなたは見つけることは非常に第一層入力方法としてlmdb or leveldbを使用したLayer type: Dataとなります。 Caffeがすでに画像を変換するツールを提供しているので、一連の画像をこれらのデータベースに変換するのは簡単です。

Layer type: MemoryDataは、メモリから直接データを読み取ります。これは、テストフェーズでCaffe入力として渡されるカメラ入力を使用する際に非常に役立ちます。トレーニング用にこのレイヤーを使用すると、でなく、が推奨されます。

Layer type: ImageDataは、テキストファイルを入力として受け取ります。テキストファイルには、完全なパスとクラス番号と共に、すべてのイメージ名が含まれています。 CaffeはOpenCVを使用してこのレイヤーの画像を読み取ります。また、画像へのすべての変換を処理します。したがって、OpenCVを使用してイメージを読み取ってからMemoryDataレイヤに渡す代わりに、ImageDataを使用することをお勧めします。

ImageDataを層は、画像がなければならない読み取るから.txtファイルのフォーマット:

/path/to/the/image/imageName.jpg classNumber

LMDB又はLevelDBの使用画像パスや名前にスペースが含まれている場合、または画像が壊れている場合は、ImageDataがうまく機能しない場合があるため、このオプションを強くお勧めします。

さまざまなレイヤの詳細は、hereで確認できます。

メモリは、モデルとバッチサイズによってGPUに割り当てられます。メモリオーバーフローが発生した場合は、バッチサイズを小さくすることができます。 Caffeは120万枚の画像のImagenetデータベースのトレーニングを簡単に処理しました。したがって、最適なバッチサイズでは、アルゴリズムは問題なく動作するはずです。

+0

トレーニングでMemoryDataの使用を推奨しないのはなぜですか?また、lmdbとImageDataの読み込み速度に違いはありますか? – mrgloom

+1

MemoryDataは初心者にはお勧めできません。これは、トレーニングが予定どおりに進まない場合には困難になる可能性があるためです。また、画像上で行われた変換は、MemoryDataレイヤーから非難されています。つまり、MemoryDataを使用する将来のリリースでは、平均画像の減算、トリミング、サイズ変更などは、データをメモリデータレイヤーに渡す前に外で行う必要があります。 –

関連する問題