docstr: Inputs:
      x: B x D'
      classifier_info: (C', C' x D)
code: def forward(self, x, classifier=None):
      """
      Inputs:
          x: B x D'
          classifier_info: (C', C' x D)
      """
      x = self.linear(x)
      if classifier is not None:
          zs_weight = classifier.permute(1, 0).contiguous()  # D x C'
          zs_weight = (
              F.normalize(zs_weight, p=2, dim=0)
              if self.norm_weight
              else zs_weight
          )
      else:
          zs_weight = self.zs_weight
      if self.norm_weight:
          x = self.norm_temperature * F.normalize(x, p=2, dim=1)
      x = torch.mm(x, zs_weight)
      if self.use_bias:
          x = x + self.cls_bias
      return x
  
file_path: mmdetection/projects/Detic_new/detic/zero_shot_classifier.py
imports: import numpy
  import torch
  from torch import nn
  from torch.nn import functional
  from mmdet.registry import MODELS
label_desc: Use image node_id 2 for calling the ZeroShotClassifier obj's underlying member method code with example usage: obj.forward(x, classifier) and returns: x