如何解释 deepmask getTopScores 函数的输出

How to interpret the output of deepmask getTopScores function

我正在使用 facebookresearch 的 deepmask to segment an image. I am trying to modify the computeProposals.lua 模块来分割我自己的图像。关键函数是 getTopProps。在下面的代码块中,它用于查找与顶级提案相关联的掩码。

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

推断class来自InferDeepMask.lua模块。 getTopProps returns 两件事:面具和分数。分数来自 Infer:getTopScores() 函数。

问题:如何解释 getTopScores 函数的输出?

代码注释:

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

示例输出(转换为 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.        ]]

第一列显然是满分。什么是scaleNb,M(:)的位置是什么?它们不是蒙版上的像素位置。

注意每个面具的形状都是 (336, 448)

谢谢!

我相信(但尚未证明)输出是这样的:

  1. 得分值 - 一个介于 0 和 1 之间的值,描述了这个面具有多好。
  2. scaleNb - 指示用于生成掩码的边界框的粗略大小的值。
  3. & 4. position(of M(:)) - 将边界框的位置与原始图像的较小版本相关联的某种方式。

通过查看代码:

  • 分数还算self-explanatory

  • scaleNb是采用的尺度的索引,即循环for k = 1,nScales do中的索引k,其中table包含不同尺度的值由 for scale = -3,2,.25 do table.insert(self.scales,scale)

  • 行创建
  • M(:) 是棘手的部分。如果我正确理解代码,pos 是一个包含 nScales 个的张量,并且每次选择 k 规模的对象时,张量的 k-th 元素都会递增(他们按分数排序)。 temp(这是随后用于计算 xy 值的变量,形成他们所谓的 M(:) 由行 local temp=sortedIds[pos[scale]][scale] 给出。 那包含什么?它似乎包含检测到的掩码的位置。看下面一段代码:

    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 似乎包含当前正在评估的分数的 xy 位置。