docstr: Args:
      mask (Tensor): [B, H, W]
  Returns:
      pos (Tensor): [B, H, W, C]
docstr_tok: ["Args",":","mask","(","Tensor",")",":","[","B",",","H",",","W","]","Returns",":","pos","(","Tensor",")",":","[","B",",","H",",","W",",","C","]"]
code: def forward(self, mask):
      """
      Args:
          mask (Tensor): [B, H, W]
      Returns:
          pos (Tensor): [B, H, W, C]
      """
      if self.embed_type == "sine":
          y_embed = mask.cumsum(1)
          x_embed = mask.cumsum(2)
          if self.normalize:
              y_embed = (
                  (y_embed + self.offset)
                  / (y_embed[:, -1:, :] + self.eps)
                  * self.scale
              )
              x_embed = (
                  (x_embed + self.offset)
                  / (x_embed[:, :, -1:] + self.eps)
                  * self.scale
              )
  
          dim_t = 2 * (paddle.arange(self.num_pos_feats) // 2).astype(
              "float32"
          )
          dim_t = self.temperature ** (dim_t / self.num_pos_feats)
  
          pos_x = x_embed.unsqueeze(-1) / dim_t
          pos_y = y_embed.unsqueeze(-1) / dim_t
          pos_x = paddle.stack(
              (pos_x[:, :, :, 0::2].sin(), pos_x[:, :, :, 1::2].cos()),
              axis=4,
          ).flatten(3)
          pos_y = paddle.stack(
              (pos_y[:, :, :, 0::2].sin(), pos_y[:, :, :, 1::2].cos()),
              axis=4,
          ).flatten(3)
          return paddle.concat((pos_y, pos_x), axis=3)
      elif self.embed_type == "learned":
          h, w = mask.shape[-2:]
          i = paddle.arange(w)
          j = paddle.arange(h)
          x_emb = self.col_embed(i)
          y_emb = self.row_embed(j)
          return paddle.concat(
              [
                  x_emb.unsqueeze(0).tile([h, 1, 1]),
                  y_emb.unsqueeze(1).tile([1, w, 1]),
              ],
              axis=-1,
          ).unsqueeze(0)
      else:
          raise ValueError(f"not supported {self.embed_type}")
  
file_path: PaddleDetection/ppdet/modeling/transformers/position_encoding.py
imports: from __future__ import absolute_import
  from __future__ import division
  from __future__ import print_function
  import math
  import paddle
  import paddle.nn
  from ppdet.core.workspace import register, serializable
label_desc: Use image node_id 2 for calling the PositionEmbedding obj's underlying member method code with example usage: obj.forward(mask) and returns: paddle, paddle