複数のラベルを持つ画像のデータセットがあります。データセットには100個のクラスがあり、各画像には1〜5個のラベルが関連付けられています。
次のURLの指示に従っています。
https://github.com/BVLC/caffe/issues/55
画像とそのラベルをリストしたテキストファイルを生成する必要があると言っています
/home/my_test_dir/picture-foo.jpg 0 /home/my_test_dir/picture-foo1.jpg 1
私の場合、マルチラベル画像があるので、次のようにラベルを追加するだけで機能しますか?
/home/my_test_dir/picture-foo.jpg 0 2 5 /home/my_test_dir/picture-foo1.jpg 1 4
私はそれはおそらくそれほど単純ではないだろうと感じていますが、私が正しいなら、Caffeを設定するプロセスでデータセットのマルチラベルネスをどのステップでどのように統合する必要がありますか?
シャイの答えはもはや最新ではないと思います。 Caffeはマルチラベル/マトリックスグラウンドトゥルースをサポートしています HDF5およびLMDB形式の場合。 this githubコメントのpythonスニペット)は、マルチラベルLMDBグラウンドトゥルースを構築する方法を示しています(HDF5形式については Shaiの答え を参照してください)。単一ラベルの画像データセットの構築から、画像用にlmdbが構築され、マルチラベルグラウンドトゥルースデータ用に2番目の別のlmdbが構築されます。画像。
データがlmdbに書き込まれる順序は重要です。グラウンドトゥルースの順序は、画像の順序と一致する必要があります。
SOFTMAX_LOSS、EUCLIDEAN_LOSS、SIGMOID_CROSS_ENTROPY_LOSSなどの損失レイヤーもマルチラベルデータをサポートしています。ただし、精度レイヤーは単一ラベルデータに制限されています。 このgithubの問題 に従って、この機能がCaffeに追加されたタイミングを追跡できます。
caffeはマルチラベルをサポートしています。ラベルをnホットベクトルに入れることができます。 [0,1,1,0,0,1、...]。ラベルの形状をn * k * 1 * 1テンソルに変更し、softmax(sum(outputs)= 1を強制する)ではなく、シグモイドクロスエントロピーまたはユークリッドを使用する必要があります。
知る限り、現在のCaffeバージョンは、マルチラベルのある画像のlmdb/leveldbデータセットをサポートしていません。ただし、入力をHDF5形式で準備できます(おそらくそうすべきです)。 Caffe HDF5入力レイヤーははるかに柔軟性が高く、入力ごとに複数のラベルを使用できます。
この回答 は、caffe用のHDF5入力を作成する方法の簡単な説明を提供します。
対処しなければならない別の問題は、画像ごとにmulti-labelだけでなく、varying画像ごとのラベルの数。画像ごと、ラベルごとの損失をどのように定義しますか?独自の損失レイヤーを作成する必要がある場合があります。
「ラベルを無視」をサポートする損失レイヤーがいくつかあります。つまり、特定の入力ラベルが画像に割り当てられている場合、それぞれの画像に対して損失は計算されません。たとえば、 AccuracyLayer
および SoftmaxWithLossLayer
。