2017-01-03 3 views
2

Comment faire pour rogner les images d'entraînement avec son étiquette de position.

Je suis le prétraitement des données d'images et de ses étiquettes pour l'entrée caffe. Je veux recadrer mes images d'entrainement aléatoirement en ligne (quand caffe tourne) et je sais que caffe fournit un parametre de recadrage aléatoire dans la couche random crop. Le problème est que mon étiquette de chaque image correspondante est variante lorsque l'image est transformée. Donc, de cette façon, je dois changer mon étiquette avec l'image transformée. J'essaye de rechercher mon issue longtemps, mais aucune utilité. Puis j'ai réalisé qu'il y avait peut-être deux façons de résoudre les problèmes:Augmentation des données d'apprentissage dans caffe avec son multilabel

  1. obtenir le décalage de l'image de recadrage aléatoire sur l'image originale. Mais je l'ai googlé sans réponse à ce sujet.
  2. Je vais spécifier le décalage aléatoire en ligne, puis recadrer l'image par le décalage spécifique crop specific offset. Mais comment puis-je générer un nombre aléatoire lorsque le temps de formation caffe.
  3. Je considère que le pré-traitement de l'image de recadrage aléatoire et de son étiquette hors ligne peut être une méthode réalisable. Cependant, il occupera un espace considérable de disque, car mon ensemble de données pour l'entraînement est trop grand.

ma position étiquette correspondante: I divisé chacune des images de formation 10x10=100 grilles. l'étiquette est l'indice de la grille pour un point clé spécifique dans l'image. par exemple, l'étiquette sera 11, quand mon point clé de tête est à la position de <2th row, 1th col> grille de l'image.

+0

et j'ai également affirmé que le problème pouvait être résolu par Caffe Python Layer. Mais il semble que le temps d'apprentissage sera long quand j'utiliserai Python Layer dans prototxt [comme cela a été mentionné] (http://stackoverflow.com/questions/39633624/caffe-image-augmentation-by-cropping). S'il est nécessaire d'utiliser cette API, alors comment l'utiliser dans ce problème concret? – farever

Répondre

0

Vous pouvez utiliser un "Python" layer pour cette tâche, car vous avez déjà pointed out (et je suppose que c'est le moyen le plus simple).
Si vous êtes concerné par le temps d'exécution de cette couche, vous pouvez la rendre multi-thread: demandez à la couche d'appeler plusieurs threads pour recadrer les images et recalculer leurs étiquettes. Ces threads fonctionneront en arrière-plan et devraient être en mesure de fournir au réseau suffisamment de données à temps pour le prochain mini-lot. Voir le module python threading pour la classe Thread. Vous pouvez également utiliser la classe Queue pour synchroniser les threads et la couche d'entrée principale.

+0

ok, je vais essayer ça ce soir. à propos, comment puis-je vérifier si ma propre couche Python fonctionne ou pas. En un mot, puis-je imprimer ma structure de données après ma couche Python? – farever

+0

@farever vous devriez écrire un test pour votre couche. – Shai

+0

ok, ça m'aide beaucoup! Merci. – farever