class_docstr: Specific head for training iBOT (https://arxiv.org/pdf/2111.07832.pdf).
  
  Adapted from the official iBOT code base to fit in VISSL:
  https://github.com/bytedance/ibot/blob/da316d82636a7a7356835ef224b13d5f3ace0489/models/head.py#L145
class_docstr_tok: ["Specific","head","for","training","iBOT","(","https",":","\/\/arxiv.org\/pdf\/2111.07832.pdf",")",".","Adapted","from","the","official","iBOT","code","base","to","fit","in","VISSL",":","https",":","\/\/github.com\/bytedance\/ibot\/blob\/da316d82636a7a7356835ef224b13d5f3ace0489\/models\/head.py","#","L145"]
code: def forward(self, x):
      # Case of the local views:
      # - Only the class token is produced out of the trunk
      # - We run the equivalent of a DINO Head
      if len(x.shape) == 2:
          return self.forward_local_views(x)
  
      # Case of the global views:
      # - Class token + feature map are output by the trunk
      # - We compute the prototypes for all tokens
      else:
          return self.forward_global_views(x)
  
file_path: vissl/vissl/models/heads/ibot_head.py
imports: from typing import Optional
  import torch
  import torch.nn
  from vissl.config import AttrDict
  from vissl.models.heads import register_model_head
  from vissl.models.model_helpers import trunc_normal_
label_desc: Use image node_id 5 for calling the IBOTHead obj's underlying member method code with example usage: obj.forward(x) and returns: self, self