code: def forward(self, layer_1, layer_2, layer_3, layer_4, text_features):
      layer_1_rn = self.layer1_rn(layer_1)
      layer_2_rn = self.layer2_rn(layer_2)
      layer_3_rn = self.layer3_rn(layer_3)
      layer_4_rn = self.layer4_rn(layer_4)
  
      path_4 = self.refinenet4(layer_4_rn)
      path_3 = self.refinenet3(path_4, layer_3_rn)
      path_2 = self.refinenet2(path_3, layer_2_rn)
      path_1 = self.refinenet1(path_2, layer_1_rn)
  
      image_features = self.head1(path_1)
  
      imshape = image_features.shape
      image_features = image_features.transpose((0, 2, 3, 1)).reshape(
          (-1, self.out_c)
      )
  
      # normalized features
      image_features = image_features / image_features.norm(
          axis=-1, keepdim=True
      )
      text_features = text_features / text_features.norm(
          axis=-1, keepdim=True
      )
  
      logits_per_image = (
          self.logit_scale * image_features @ text_features.t()
      )
  
      out = logits_per_image.reshape(
          (imshape[0], imshape[2], imshape[3], -1)
      ).transpose((0, 3, 1, 2))
  
      out = self.output_conv(out)
  
      return out
  
imports: import numpy
  import paddle
  import paddle.nn
label_desc: Use image node_id 2 for calling the Scratch obj's underlying member method code with example usage: obj.forward(layer_1, layer_2, layer_3, layer_4, text_features) and returns: out