LMDB形式 / LevelDB形式 / HDF5形式のデータフォーマット

Caffeにおけるデータの準備では、学習や検証に用いるデータを特定の形式で保存・読み込むことが重要です。Caffeは主に以下の3種類のデータフォーマットに対応しています:


1. LMDB形式(Lightning Memory-Mapped Database)

概要:

  • Caffeで最も推奨されているデータフォーマット。

  • 読み書き速度が速く、大規模なデータセットに適している。

  • データはキーと値のペアで格納され、値には通常DatumというCaffeのシリアライズ形式が使われる。

特徴:

  • メモリマップドI/Oを用いて高速アクセスが可能。

  • スレッドセーフで複数のプロセスから読み込み可能(書き込みは単一プロセス)。

  • 内部でB+木を使っているため、ソートされた順序でアクセス可能。

作成手順(Pythonスクリプト例):

python
import lmdb import caffe from caffe.proto import caffe_pb2 import numpy as np env = lmdb.open('my_lmdb', map_size=1e12) with env.begin(write=True) as txn: datum = caffe_pb2.Datum() datum.channels = 1 datum.height = 28 datum.width = 28 datum.data = np.random.rand(28*28).astype(np.uint8).tobytes() datum.label = 5 txn.put(b'000001', datum.SerializeToString())

2. LevelDB形式

概要:

  • LMDBと同様にCaffeがサポートするキー・バリュー型データベース。

  • Caffeの初期のバージョンでは標準として使われていた。

特徴:

  • Googleが開発した軽量なKVS(Key-Value Store)。

  • 書き込み・読み込みは高速だが、LMDBと比較するとパフォーマンスや安定性に劣るとされる。

  • クロスプラットフォーム性に課題があるため、現在はLMDBの使用が推奨される。

作成にはconvert_imagesetツールが使用可能。


3. HDF5形式(Hierarchical Data Format)

概要:

  • 階層構造を持つ柔軟なバイナリデータ形式。

  • 画像、音声、センサーデータなど様々な形式のデータを格納可能。

  • PythonやMATLABなど様々な言語で利用されている。

特徴:

  • データの構造が柔軟で、多次元配列や複数のラベル形式にも対応。

  • 一括読み込みや任意のチャンク単位の読み出しが可能。

  • 通常は小規模なデータセットや研究用途で使用される。

利用方法:

  • HDF5ファイル内にdatalabelのデータセットを作成する。

  • CaffeのHDF5Dataレイヤーを用いて読み込む。

例(Python):

python
import h5py import numpy as np with h5py.File('data.h5', 'w') as f: f['data'] = np.random.rand(100, 3, 32, 32) # 100枚の画像(3ch, 32x32) f['label'] = np.random.randint(0, 10, size=(100,))

そして、リストファイル(例: train.txt)を作成して、プロトファイルで指定します。

pgsql
/path/to/data.h5

まとめ表

フォーマット 利用用途 長所 短所
LMDB 大規模学習 高速、安全、安定 書き込みは単一プロセスのみ
LevelDB 古い互換性 軽量、比較的高速 サポートが弱く、LMDBに劣る
HDF5 小中規模、研究用途 柔軟なデータ構造、多様なツール対応 大規模データには不向き、I/Oがやや遅い

生成日:2025/05/23