web-dev-qa-db-fra.com

caffe avec des images multi-étiquettes

J'ai un ensemble de données d'images qui ont plusieurs étiquettes; Il existe 100 classes dans l'ensemble de données et chaque image est associée à 1 à 5 étiquettes.

Je suis les instructions dans l'URL suivante:

https://github.com/BVLC/caffe/issues/55

Il dit que je dois générer un fichier texte répertoriant les images et ses étiquettes comme dans

/home/my_test_dir/picture-foo.jpg 0
/home/my_test_dir/picture-foo1.jpg 1

Dans mon cas, puisque j'ai des images multi-étiquettes, cela fonctionne-t-il simplement d'ajouter des étiquettes comme ci-dessous?

/home/my_test_dir/picture-foo.jpg 0 2 5
/home/my_test_dir/picture-foo1.jpg 1 4

J'ai le sentiment que ce ne sera probablement pas aussi simple, et si j'ai raison, à quelle étape et comment dois-je intégrer le multi-label-ness de l'ensemble de données dans le processus de configuration de Caffe?

19
ytrewq

Je pense que la réponse de Shai n'est plus à jour. Caffe prend en charge la vérité terrain multi-étiquettes/matrice pour les formats HDF5 et LMDB. L'extrait python dans this github montre comment construire une vérité terrain LMDB multi-étiquette (voir réponse de Shai pour le format HDF5). Différent à partir de la construction d'ensembles de données d'images à étiquette unique, un lmdb est construit pour les images tandis qu'un deuxième lmdb séparé est construit pour les données de vérité terrain multi-étiquettes. images.

L'ordre dans lequel les données sont écrites dans la lmdb est crucial. L'ordre de la vérité fondamentale doit correspondre à l'ordre des images.

Les couches de perte telles que SOFTMAX_LOSS, EUCLIDEAN_LOSS, SIGMOID_CROSS_ENTROPY_LOSS prennent également en charge les données multi-étiquettes. Cependant, la couche Précision est toujours limitée aux données à étiquette unique. Vous voudrez peut-être suivre ce problème github pour savoir quand cette fonctionnalité sera ajoutée à Caffe.

21
ypx

caffe prend en charge les étiquettes multiples. Vous pouvez mettre les étiquettes dans des vecteurs n-chauds, par exemple [0,1,1,0,0,1, ...]. Vous devez remodeler les étiquettes en n * k * 1 * 1 tenseurs et utiliser l'entropie croisée sigmoïde ou euclidienne, pas softmax (ce qui force la somme (sorties) = 1)

5
jeremy_rutman

AFAIK, la version actuelle de Caffe ne prend pas en charge les jeux de données lmdb/leveldb pour les images avec plusieurs étiquettes. Cependant, vous pouvez (et devriez probablement) préparer vos entrées au format HDF5. La couche d'entrée Caffe HDF5 est beaucoup plus flexible et vous permettra d'avoir plusieurs étiquettes par entrée.
Cette réponse donne une brève description de la façon de créer une entrée HDF5 pour caffe.

Un autre problème que vous devez résoudre est le fait que vous êtes intéressé non seulement par multi - étiquette par image, mais aussi par variable nombre d'étiquettes par image. Comment définissez-vous votre perte par image, par étiquette? il se peut que vous deviez écrire votre propre couche de perte.
Il existe certaines couches de perte qui prennent en charge "ignorer l'étiquette": autrement dit, si une étiquette d'entrée spécifique est affectée à l'image, aucune perte n'est calculée pour l'image respective. Voir, par exemple AccuracyLayer et SoftmaxWithLossLayer .

3
Shai