如何解释 deepmask getTopScores 函数的输出
Posted
技术标签:
【中文标题】如何解释 deepmask getTopScores 函数的输出【英文标题】:How to interpret the output of deepmask getTopScores function 【发布时间】:2017-06-20 00:36:13 【问题描述】:我正在使用 facebookresearch 的 deepmask 来分割图像。我正在尝试修改computeProposals.lua 模块来分割我自己的图像。关键函数是getTopProps。在下面的代码块中,它用于查找与***提案相关的掩码。
-- get top propsals
local masks,_ = infer:getTopProps(.2,h,w)
推断类来自InferDeepMask.lua 模块。 getTopProps 返回两件事:掩码和分数。分数来自 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(:)的位置是什么?它们不是蒙版上的像素位置。
NB 每个面具的形状都是 (336, 448)
谢谢!
【问题讨论】:
【参考方案1】:通过查看代码:
分数不言自明
scaleNb 是采用的刻度的索引,即循环for k = 1,nScales do
中的索引k
,其中包含不同刻度值的表由for scale = -3,2,.25 do table.insert(self.scales,scale)
行创建
M(:) 是棘手的部分。如果我正确理解代码,pos
是一个包含 nScales
的张量,并且每次选择规模为 k
的对象时,张量的 k-th
元素都会递增(它们按分数排序)。 temp
(这是用于计算 x
和 y
值的变量,这些值形成了他们所谓的 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
似乎包含当前正在评估的分数的x
,y
位置。
【讨论】:
【参考方案2】:我相信(但尚未证明)输出是这样的:
-
分数值 - 一个介于 0 和 1 之间的值,用于描述这是一个多么好的面具。
scaleNb - 一个值,表示用于生成遮罩的边界框的粗略大小。
& 4. position(of M(:)) - 将边界框的位置与原始图像的较小版本相关联的某种方式。
【讨论】:
以上是关于如何解释 deepmask getTopScores 函数的输出的主要内容,如果未能解决你的问题,请参考以下文章
[ZZ] 深度学习三巨头之一来清华演讲了,你只需要知道这7点