class_docstr: The SINet implementation based on PaddlePaddle.
  
  The original article refers to
  Hyojin Park, Lars Lowe Sjösund, YoungJoon Yoo, Nicolas Monet, Jihwan Bang, Nojun Kwak
  "SINet: Extreme Lightweight Portrait Segmentation Networks with Spatial Squeeze Modules
  and Information Blocking Decoder", (https://arxiv.org/abs/1911.09099).
  
  Args:
      num_classes (int): The unique number of target classes.
      config (List, optional): The config for SINet. Defualt use the CFG.
      stage2_blocks (int, optional): The num of blocks in stage2. Default: 2.
      stage3_blocks (int, optional): The num of blocks in stage3. Default: 8.
      in_channels (int, optional): The channels of input image. Default: 3.
      pretrained (str, optional): The path or url of pretrained model. Default: None.
class_docstr_tok: ["The","SINet","implementation","based","on","PaddlePaddle",".","The","original","article","refers","to","Hyojin","Park",",","Lars","Lowe","Sj\u00f6sund",",","YoungJoon","Yoo",",","Nicolas","Monet",",","Jihwan","Bang",",","Nojun","Kwak","''","SINet",":","Extreme","Lightweight","Portrait","Segmentation","Networks","with","Spatial","Squeeze","Modules","and","Information","Blocking","Decoder","''",",","(","https",":","\/\/arxiv.org\/abs\/1911.09099",")",".","Args",":","num_classes","(","int",")",":","The","unique","number","of","target","classes",".","config","(","List",",","optional",")",":","The","config","for","SINet",".","Defualt","use","the","CFG",".","stage2_blocks","(","int",",","optional",")",":","The","num","of","blocks","in","stage2",".","Default",":","2.","stage3_blocks","(","int",",","optional",")",":","The","num","of","blocks","in","stage3",".","Default",":","8.","in_channels","(","int",",","optional",")",":","The","channels","of","input","image",".","Default",":","3.","pretrained","(","str",",","optional",")",":","The","path","or","url","of","pretrained","model",".","Default",":","None","."]
code: def forward(self, input):
      output1 = self.encoder.level1(input)  # x2
  
      output2_0 = self.encoder.level2_0(output1)  # x4
      for i, layer in enumerate(self.encoder.level2):
          if i == 0:
              output2 = layer(output2_0)
          else:
              output2 = layer(output2)
      output2_cat = self.encoder.BR2(
          paddle.concat([output2_0, output2], 1)
      )
  
      output3_0 = self.encoder.level3_0(output2_cat)  # x8
      for i, layer in enumerate(self.encoder.level3):
          if i == 0:
              output3 = layer(output3_0)
          else:
              output3 = layer(output3)
      output3_cat = self.encoder.BR3(
          paddle.concat([output3_0, output3], 1)
      )
      enc_final = self.encoder.classifier(output3_cat)  # x8
  
      dec_stage1 = self.bn_3(self.up(enc_final))  # x4
      stage1_confidence = paddle.max(F.softmax(dec_stage1), axis=1)
      stage1_gate = (1 - stage1_confidence).unsqueeze(1)
  
      dec_stage2_0 = self.level2_C(output2)  # x4
      dec_stage2 = self.bn_2(
          self.up(dec_stage2_0 * stage1_gate + dec_stage1)
      )  # x2
  
      out = self.classifier(dec_stage2)  # x
  
      return [out]
  
imports: import paddle
  import paddle.nn
  import paddle.nn.functional
  from paddleseg.models import layers
  from paddleseg.cvlibs import manager
  from paddleseg.utils import utils
label_desc: Use image node_id 3 for calling the SINet obj's underlying member method code with example usage: obj.forward(input) and returns: list