Class ZooModel<I,​O>

  • Type Parameters:
    I - the model input type
    O - the model output type
    All Implemented Interfaces:
    Model, java.lang.AutoCloseable

    public class ZooModel<I,​O>
    extends java.lang.Object
    implements Model
    A ZooModel is a Model loaded from a model zoo and includes a default Translator.
    • Constructor Summary

      Constructors 
      Constructor Description
      ZooModel​(Model model, Translator<I,​O> translator)
      Constructs a ZooModel given the model and translator.
    • Method Summary

      All Methods Instance Methods Concrete Methods 
      Modifier and Type Method Description
      void cast​(DataType dataType)
      Casts the model to support a different precision level.
      void close()
      ai.djl.util.PairList<java.lang.String,​Shape> describeInput()
      Returns the input descriptor of the model.
      ai.djl.util.PairList<java.lang.String,​Shape> describeOutput()
      Returns the output descriptor of the model.
      java.net.URL getArtifact​(java.lang.String name)
      Finds an artifact resource with a given name in the model.
      <T> T getArtifact​(java.lang.String name, java.util.function.Function<java.io.InputStream,​T> function)
      Attempts to load the artifact using the given function and cache it if the specified artifact is not already cached.
      java.io.InputStream getArtifactAsStream​(java.lang.String name)
      Finds an artifact resource with a given name in the model.
      java.lang.String[] getArtifactNames()
      Returns the artifact names associated with the model.
      Block getBlock()
      Gets the block from the Model.
      DataType getDataType()
      Returns the standard data type used within the model.
      java.nio.file.Path getModelPath()
      Returns the directory from where the model is loaded.
      java.lang.String getName()
      Gets the model name.
      NDManager getNDManager()
      Gets the NDManager from the model.
      java.lang.String getProperty​(java.lang.String key)
      Returns the property of the model based on property name.
      Translator<I,​O> getTranslator()
      Returns the default translator.
      Model getWrappedModel()
      Returns the wrapped model.
      void load​(java.io.InputStream modelStream, java.util.Map<java.lang.String,​?> options)
      Loads the model from the InputStream with the options provided.
      void load​(java.nio.file.Path modelPath, java.lang.String prefix, java.util.Map<java.lang.String,​?> options)
      Loads the model from the modelPath with the name and options provided.
      Predictor<I,​O> newPredictor()
      Creates a new Predictor based on the model with the default translator.
      Predictor<I,​O> newPredictor​(Device device)
      Creates a new Predictor based on the model with the default translator and a specified device.
      <P,​Q>
      Predictor<P,​Q>
      newPredictor​(Translator<P,​Q> translator, Device device)
      Creates a new Predictor based on the model.
      Trainer newTrainer​(TrainingConfig trainingConfig)
      Creates a new Trainer instance for a Model.
      void save​(java.nio.file.Path modelPath, java.lang.String modelName)
      Saves the model to the specified modelPath with the name provided.
      void setBlock​(Block block)
      Sets the block for the Model for training and inference.
      void setDataType​(DataType dataType)
      Sets the standard data type used within the model.
      void setProperty​(java.lang.String key, java.lang.String value)
      Sets a property to the model.
      • Methods inherited from class java.lang.Object

        clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
    • Constructor Detail

      • ZooModel

        public ZooModel​(Model model,
                        Translator<I,​O> translator)
        Constructs a ZooModel given the model and translator.
        Parameters:
        model - the model to wrap
        translator - the translator
    • Method Detail

      • load

        public void load​(java.nio.file.Path modelPath,
                         java.lang.String prefix,
                         java.util.Map<java.lang.String,​?> options)
        Loads the model from the modelPath with the name and options provided.
        Specified by:
        load in interface Model
        Parameters:
        modelPath - the directory or file path of the model location
        prefix - the model file name or path prefix
        options - engine specific load model options, see documentation for each engine
      • load

        public void load​(java.io.InputStream modelStream,
                         java.util.Map<java.lang.String,​?> options)
                  throws java.io.IOException
        Loads the model from the InputStream with the options provided.
        Specified by:
        load in interface Model
        Parameters:
        modelStream - the InputStream to load the model from
        options - engine specific load model options, see documentation for each engine
        Throws:
        java.io.IOException - when IO operation fails in loading a resource
      • getWrappedModel

        public Model getWrappedModel()
        Returns the wrapped model.
        Returns:
        the wrapped model
      • save

        public void save​(java.nio.file.Path modelPath,
                         java.lang.String modelName)
                  throws java.io.IOException
        Saves the model to the specified modelPath with the name provided.
        Specified by:
        save in interface Model
        Parameters:
        modelPath - the directory or file path of the model location
        modelName - the new model name to be saved, use null to keep original model name
        Throws:
        java.io.IOException - when IO operation fails in loading a resource
      • getModelPath

        public java.nio.file.Path getModelPath()
        Returns the directory from where the model is loaded.
        Specified by:
        getModelPath in interface Model
        Returns:
        the directory of the model location
      • getBlock

        public Block getBlock()
        Gets the block from the Model.
        Specified by:
        getBlock in interface Model
        Returns:
        the Block
      • setBlock

        public void setBlock​(Block block)
        Sets the block for the Model for training and inference.
        Specified by:
        setBlock in interface Model
        Parameters:
        block - the Block used in Model
      • getName

        public java.lang.String getName()
        Gets the model name.
        Specified by:
        getName in interface Model
        Returns:
        name of the model
      • getProperty

        public java.lang.String getProperty​(java.lang.String key)
        Returns the property of the model based on property name.
        Specified by:
        getProperty in interface Model
        Parameters:
        key - the name of the property
        Returns:
        the value of the property
      • setProperty

        public void setProperty​(java.lang.String key,
                                java.lang.String value)
        Sets a property to the model.

        properties will be saved/loaded with model, user can store some information about the model in here.

        Specified by:
        setProperty in interface Model
        Parameters:
        key - the name of the property
        value - the value of the property
      • newTrainer

        public Trainer newTrainer​(TrainingConfig trainingConfig)
        Creates a new Trainer instance for a Model.
        Specified by:
        newTrainer in interface Model
        Parameters:
        trainingConfig - training configuration settings
        Returns:
        the Trainer instance
      • newPredictor

        public Predictor<I,​O> newPredictor()
        Creates a new Predictor based on the model with the default translator.
        Returns:
        an instance of Predictor
      • newPredictor

        public Predictor<I,​O> newPredictor​(Device device)
        Creates a new Predictor based on the model with the default translator and a specified device.
        Parameters:
        device - the device to use for prediction
        Returns:
        an instance of Predictor
      • newPredictor

        public <P,​Q> Predictor<P,​Q> newPredictor​(Translator<P,​Q> translator,
                                                             Device device)
        Creates a new Predictor based on the model.
        Specified by:
        newPredictor in interface Model
        Type Parameters:
        P - the input object for pre-processing
        Q - the output object from postprocessing
        Parameters:
        translator - the object used for pre-processing and postprocessing
        device - the device to use for prediction
        Returns:
        an instance of Predictor
      • getTranslator

        public Translator<I,​O> getTranslator()
        Returns the default translator.
        Returns:
        the default translator
      • describeInput

        public ai.djl.util.PairList<java.lang.String,​Shape> describeInput()
        Returns the input descriptor of the model.

        It contains the information that can be extracted from the model, usually name, shape, layout and DataType.

        Specified by:
        describeInput in interface Model
        Returns:
        a PairList of String and Shape
      • describeOutput

        public ai.djl.util.PairList<java.lang.String,​Shape> describeOutput()
        Returns the output descriptor of the model.

        It contains the output information that can be obtained from the model.

        Specified by:
        describeOutput in interface Model
        Returns:
        a PairList of String and Shape
      • getArtifactNames

        public java.lang.String[] getArtifactNames()
        Returns the artifact names associated with the model.
        Specified by:
        getArtifactNames in interface Model
        Returns:
        an array of artifact names
      • getArtifact

        public <T> T getArtifact​(java.lang.String name,
                                 java.util.function.Function<java.io.InputStream,​T> function)
                          throws java.io.IOException
        Attempts to load the artifact using the given function and cache it if the specified artifact is not already cached.

        Model will cache loaded artifact, so the user doesn't need to keep tracking it.

        
         String synset = model.getArtifact("synset.txt", k -> IOUtils.toString(k)));
         
        Specified by:
        getArtifact in interface Model
        Type Parameters:
        T - the type of the returned artifact object
        Parameters:
        name - the name of the desired artifact
        function - the function to load the artifact
        Returns:
        the current (existing or computed) artifact associated with the specified name, or null if the computed value is null
        Throws:
        java.io.IOException - when IO operation fails in loading a resource
      • getArtifact

        public java.net.URL getArtifact​(java.lang.String name)
                                 throws java.io.IOException
        Finds an artifact resource with a given name in the model.
        Specified by:
        getArtifact in interface Model
        Parameters:
        name - the name of the desired artifact
        Returns:
        a URL object or null if no artifact with this name is found
        Throws:
        java.io.IOException - when IO operation fails in loading a resource
      • getArtifactAsStream

        public java.io.InputStream getArtifactAsStream​(java.lang.String name)
                                                throws java.io.IOException
        Finds an artifact resource with a given name in the model.
        Specified by:
        getArtifactAsStream in interface Model
        Parameters:
        name - the name of the desired artifact
        Returns:
        a InputStream object or null if no resource with this name is found
        Throws:
        java.io.IOException - when IO operation fails in loading a resource
      • setDataType

        public void setDataType​(DataType dataType)
        Sets the standard data type used within the model.
        Specified by:
        setDataType in interface Model
        Parameters:
        dataType - the standard data type to use
      • getDataType

        public DataType getDataType()
        Returns the standard data type used within the model.
        Specified by:
        getDataType in interface Model
        Returns:
        the standard data type used within the model
      • cast

        public void cast​(DataType dataType)
        Casts the model to support a different precision level.

        For example, you can cast the precision from Float to Int

        Specified by:
        cast in interface Model
        Parameters:
        dataType - the target dataType you would like to cast to
      • close

        public void close()
        Specified by:
        close in interface java.lang.AutoCloseable
        Specified by:
        close in interface Model