class_docstr: WrongPredictionVis class for visualizing video inputs to Tensorboard
  for instances that the model makes wrong predictions.
class_docstr_tok: ["WrongPredictionVis","class","for","visualizing","video","inputs","to","Tensorboard","for","instances","that","the","model","makes","wrong","predictions","."]
docstr: Draw predicted labels on video inputs and visualize all incorrectly classified
  videos in the current batch.
  Args:
      video_input (list of list of tensor(s)): list of videos for all pathways.
      labels (array-like): shape (n_instances,) of true label for each instance.
      preds (tensor): shape (n, instances, n_classes). The predicted scores for all instances.
      tag (Optional[str]): all visualized video will be added under this tag. This is for organization
          purposes in Tensorboard.
      batch_idx (int): batch index of the current videos.
docstr_tok: ["Draw","predicted","labels","on","video","inputs","and","visualize","all","incorrectly","classified","videos","in","the","current","batch",".","Args",":","video_input","(","list","of","list","of","tensor","(","s",")",")",":","list","of","videos","for","all","pathways",".","labels","(","array-like",")",":","shape","(","n_instances",",",")","of","true","label","for","each","instance",".","preds","(","tensor",")",":","shape","(","n",",","instances",",","n_classes",")",".","The","predicted","scores","for","all","instances",".","tag","(","Optional","[","str","]",")",":","all","visualized","video","will","be","added","under","this","tag",".","This","is","for","organization","purposes","in","Tensorboard",".","batch_idx","(","int",")",":","batch","index","of","the","current","videos","."]
code: def visualize_vid(self, video_input, labels, preds, batch_idx):
      """
      Draw predicted labels on video inputs and visualize all incorrectly classified
      videos in the current batch.
      Args:
          video_input (list of list of tensor(s)): list of videos for all pathways.
          labels (array-like): shape (n_instances,) of true label for each instance.
          preds (tensor): shape (n, instances, n_classes). The predicted scores for all instances.
          tag (Optional[str]): all visualized video will be added under this tag. This is for organization
              purposes in Tensorboard.
          batch_idx (int): batch index of the current videos.
      """
  
      def add_video(vid, preds, tag, true_class_name):
          """
          Draw predicted label on video and add it to Tensorboard.
          Args:
              vid (array-like): shape (C, T, H, W). Each image in `vid` is a RGB image.
              preds (tensor): shape (n_classes,) or (1, n_classes). The predicted scores
                  for the current `vid`.
              tag (str): tag for `vid` in Tensorboard.
              true_class_name (str): the ground-truth class name of the current `vid` instance.
          """
          # Permute to (T, H, W, C).
          vid = vid.permute(1, 2, 3, 0)
          vid = data_utils.revert_tensor_normalize(
              vid.cpu(), self.cfg.DATA.MEAN, self.cfg.DATA.STD
          )
          vid = self.video_vis.draw_clip(vid, preds)
          vid = torch.from_numpy(np.array(vid)).permute(0, 3, 1, 2)
          vid = torch.unsqueeze(vid, dim=0)
          self.writer.add_video(
              vid, tag="{}: {}".format(tag, true_class_name)
          )
  
      mask = self._pick_wrong_preds(labels, preds)
      video_indices = torch.squeeze(mask.nonzero(), dim=-1)
      # Visualize each wrongly classfied video.
      for vid_idx in video_indices:
          cur_vid_idx = batch_idx * len(video_input[0]) + vid_idx
          for pathway in range(len(video_input)):
              add_video(
                  video_input[pathway][vid_idx],
                  preds=preds[vid_idx],
                  tag=self.tag
                  + "/Video {}, Pathway {}".format(
                      cur_vid_idx, pathway
                  ),
                  true_class_name=self.class_names[labels[vid_idx]],
              )
  
file_path: SlowFast/slowfast/visualization/prediction_vis.py
imports: import numpy
  import torch
  import slowfast.datasets.utils
  import slowfast.utils.logging
  import slowfast.visualization.tensorboard_vis
  from slowfast.utils.misc import get_class_names
  from slowfast.visualization.video_visualizer import VideoVisualizer
label_desc: Use image node_id 3 for calling the WrongPredictionVis obj's underlying member method code with example usage: obj.visualize_vid(video_input, labels, preds, batch_idx) without return types