2017-02-02 1 views
1

J'utilise le deepmask de facebookresearch pour segmenter une image. J'essaye de modifier le module computeProposals.lua pour segmenter mes propres images. La fonction clé est getTopProps. Dans le bloc de code ci-dessous, il est utilisé pour trouver les masques associés aux meilleures propositions.Comment interpréter la sortie de la fonction getTopScores de deepmask

-- get top propsals 
local masks,_ = infer:getTopProps(.2,h,w) 

La classe est déduisent à partir du module InferDeepMask.lua. getTopProps renvoie deux choses: les masques et les scores. Les scores proviennent de la fonction Infer: getTopScores().

Question: Comment interpréter la sortie de la fonction getTopScores?

Le commentaire de code:

-- each line contains: the score value, the scaleNb and position(of M(:)) 

Exemple de sortie (converti en une matrice numpy):

[[ 0.9942829 2.   26.   6.  ] 
[ 0.9942829 3.   26.   6.  ] 
[ 0.98620307 2.   1.   29.  ] 
[ 0.98620307 3.   1.   29.  ] 
[ 0.97150999 2.   19.   8.  ] 
[ 0.97150999 3.   19.   8.  ] 
[ 0.97141284 2.   18.   8.  ] 
[ 0.97141284 3.   18.   8.  ] 
[ 0.9639107 2.   15.   11.  ] 
[ 0.9639107 3.   15.   11.  ]] 

La première colonne est clairement une note sur une. Qu'est-ce que scaleNb, et quelles sont les positions de M (:)? Ils ne sont pas les emplacements de pixels sur le masque.

NB Chaque masque est de forme (336, 448)

Merci!

Répondre

0

En regardant le code:

  • le score est assez explicite

  • l'scaleNb est l'indice de l'échelle adoptée, à savoir l'indice k dans la boucle for k = 1,nScales do où la table contenant les valeurs des différentes échelles est créée par la ligne for scale = -3,2,.25 do table.insert(self.scales,scale)

  • M (:) est la partie difficile. Si je comprends bien le code, pos est un tenseur contenant nScales, et l'élément k-th du tenseur est incrémenté chaque fois qu'un objet à l'échelle k est sélectionné (ils sont classés par score). temp (qui est la variable qui est ensuite utilisée pour calculer les x et y valeurs formant ce qu'ils appellent M(:) est donné par la ligne local temp=sortedIds[pos[scale]][scale] Ce qui contient il semble contenir la position du masque à l'échelle qu'il a été détecté.Voir le morceau de code suivant:

    local sc=sc:view(h*w) local sS,sIds=torch.sort(sc,true) local sz = sS:size(1) sortedScores:narrow(2,s,1):narrow(1,1,sz):copy(sS) sortedIds:narrow(2,s,1):narrow(1,1,sz):copy(sIds)

sortedIds semble être contenant la position x, y du score qui est actuellement en cours d'évaluation.

0

je crois (mais n'ont pas prouvé) que la sortie est donc:

  1. la valeur du score - une valeur comprise entre 0 et 1 décrivant la qualité d'un masque c'est. ScaleNb - une valeur qui indique la taille approximative du cadre de délimitation utilisé pour générer le masque.
  2. & 4. position (de M (:)) - un moyen de relier la position de la boîte englobante à une version plus petite de l'image originale.