code: def get_model(self, **kwargs):
      session = PickableInferenceSession(self.onnx_file, **kwargs)
      print(
          f"Applied providers: {session._providers}, with options: {session._provider_options}"
      )
      inputs = session.get_inputs()
      input_cfg = inputs[0]
      input_shape = input_cfg.shape
      outputs = session.get_outputs()
  
      if len(outputs) >= 5:
          return RetinaFace(model_file=self.onnx_file, session=session)
      elif input_shape[2] == 192 and input_shape[3] == 192:
          return Landmark(model_file=self.onnx_file, session=session)
      elif input_shape[2] == 96 and input_shape[3] == 96:
          return Attribute(model_file=self.onnx_file, session=session)
      elif (
          len(inputs) == 2
          and input_shape[2] == 128
          and input_shape[3] == 128
      ):
          return INSwapper(model_file=self.onnx_file, session=session)
      elif (
          input_shape[2] == input_shape[3]
          and input_shape[2] >= 112
          and input_shape[2] % 16 == 0
      ):
          return ArcFaceONNX(model_file=self.onnx_file, session=session)
      else:
          # raise RuntimeError('error on model routing')
          return None
  
imports: import os
  import os.path
  import glob
  import onnxruntime
  from .arcface_onnx import *
  from .retinaface import *
  from .landmark import *
  from .attribute import Attribute
  from .inswapper import INSwapper
  from ..utils import download_onnx
label_desc: Use image node_id 2 for calling the ModelRouter obj's underlying member method code with example usage: obj.get_model() and returns: RetinaFace, Landmark, Attribute, INSwapper, ArcFaceONNX, None