Skip to content

Instantly share code, notes, and snippets.

@YimianDai
Last active August 27, 2019 16:35
Show Gist options
  • Save YimianDai/f15a55f953dc57d4269443dab136ad6d to your computer and use it in GitHub Desktop.
Save YimianDai/f15a55f953dc57d4269443dab136ad6d to your computer and use it in GitHub Desktop.
MultiPerClassDecoder

输入是大小为 (N, H_1 x W_1 + ... + H_6 x W_6, self.num_classes + 1) 的 Prediction Probability,axis = -1 上的 self.num_classes + 1 类的概率和加起来为 1

        scores = x.slice_axis(axis=self._axis, begin=1, end=None)  # b x N x fg_class

slice_axis 是切片函数,指定 axis,然后 begin 和 end,end 是不包括在内的,这行代码就是将 Background 的 Prediction Probability 去掉,得到仅有 Foreground Class 的 Prediction Probability 矩阵,大小为 (N, H_1 x W_1 + ... + H_6 x W_6, self.num_classes)

        template = F.zeros_like(x.slice_axis(axis=-1, begin=0, end=1))

创建一个大小为 (N, H_1 x W_1 + ... + H_6 x W_6, 1) 的全零矩阵

        cls_ids = []
        for i in range(self._fg_class):
            cls_ids.append(template + i)  # b x N x 1
        cls_id = F.concat(*cls_ids, dim=-1)  # b x N x fg_class

生成一个大小为 b x N x fg_class 的矩阵,里面 axis=-1 的每个元素依次是 1, 2, 3, ..., fg_class

        mask = scores > self._thresh
        cls_id = F.where(mask, cls_id, F.ones_like(cls_id) * -1)
        scores = F.where(mask, scores, F.zeros_like(scores))
  1. fg_class 的 scores 中大于 self._thresh 的 mask,其实 self._thresh 的默认值很小,只有 0.01,所以我感觉这里同一个类别会有好多是 True 啊
  2. 得到的 cls_id 还是 b x N x fg_class 的矩阵,只不过对应的 score value 如果小于 thresh,则是 -1,否则是 class id
  3. 得到的 scores 也是 b x N x fg_class 的矩阵,只不过对应的 score value 如果小于 thresh,则是 0,否则是该类的 Probability
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment