Caffe を使用する場合、画像を含むトレーニング データセットを作成するには、lmdb などの特別な形式でデータベースを作成する必要がありますが、たとえば、画像のバッチを Caffe に渡すオプションはありますvector<cv::Mat>
か?
明確にするために、メモリに収まらない大量の画像を処理できるソリューションを探しています (ただし、1 つのトレーニング バッチ (たとえば 50 個の画像を含む) をメモリに格納できると仮定します)。
Caffe は、使用する入力レイヤーに応じて、多くの種類の入力を受け取ることができます。利用可能な入力方法のいくつかは次のとおりです。
モデル ファイルで最初に見つかるレイヤーは で、入力メソッドとしてLayer type: Data
使用されます。lmdb or leveldb
これらのデータベースへの一連の画像の変換は、Caffe が既に画像を変換するツールを提供しているため、非常に簡単です。
はLayer type: MemoryData
メモリから直接データを読み取ります。これは、テスト段階でカメラ入力を Caffe 入力として渡す際に非常に役立ちます。このレイヤーをトレーニングに使用することは強くお勧めしません。
はLayer type: ImageData
テキスト ファイルを入力として受け取ります。テキスト ファイルには、すべてのイメージ名とその完全なパスおよびクラス番号が含まれています。Caffe は OpenCV を使用して、このレイヤーの画像を読み取ります。また、画像へのすべての変換も処理します。したがって、OpenCV を使用して画像を読み取ってから MemoryData レイヤーに渡す代わりに、ImageData を使用することをお勧めします。
ImageData レイヤーが画像を読み取る .txt の形式は次のとおりです。
/path/to/the/image/imageName.jpg クラス番号
LMDB または LevelDB の使用を強くお勧めします。画像のパスまたは名前にスペースが含まれている場合、または画像のいずれかが破損している場合、ImageData が適切に機能する必要がないからです。
さまざまなレイヤーの詳細については、こちらを参照してください。
モデルとバッチサイズに応じて、GPU にメモリが割り当てられます。メモリ オーバーフローが発生した場合は、バッチ サイズを小さくしてみてください。Caffe は、120 万枚の画像の Imagenet データベースのトレーニングを簡単に処理しました。したがって、最適なバッチ サイズで、アルゴリズムは問題なく動作するはずです。