Class ov::frontend::InputModel#
-
class InputModel#
InputModel class represents an original, not yet converted model graph in a framework format given services to find places of interest in a graph or specialize/edit the model before conversion.
Editing requests may affect ability to convert the original model to OV Model. Aim to provide these editing capabilities is to unlock conversion for models that are not natively supported “as-is” because of undefined shapes, types or operations.
Specific front-end implementation is supposed to have a lazy implementation for all methods, not doing a complete load of a model without an explicit method call. For example, the list of all inputs are not pre-fetched by InputModel derived class instance creation, but only when get_inputs method is called. But it is not an obligation, the most convenient way should be chosen depending on the framework model representation.
All editing requests affect the model representation that is held behind the scene successive method calls observe a new graph structure.
Note
Class methods are divided into several groups: searching for places, naming and annotation, topology editing, setting tensor properties.
Public Functions
-
virtual std::vector<Place::Ptr> get_inputs() const#
Returns all inputs for a model An input is a place in a graph where data is supposed to flow inside graph from outside. It can be a tensor, port, operation; which kind of place can be an output is FW dependent. Usually framework models have a dedicated artifact to code model input, it can be a tensor without producer, that writes to it in ONNX, or a special operation like Placeholder in TensorFlow.
- Returns:
A vector of input place references
-
virtual std::vector<Place::Ptr> get_outputs() const#
Returns all output for a model An output is a terminal place in a graph where data escapes the flow. It can be a tensor, port, operation; which kind of place can be an output is FW dependent. In comparison to a graph input, the output is less formally defined thing and determination of initial list of outputs may include some conventions defined by a frontend itself, not a framework. For example, all output ports without consumers may be considered as outputs.
- Returns:
A vector of output place references
-
virtual Place::Ptr get_place_by_tensor_name(const std::string &tensor_name) const#
Returns a tensor place by a tensor name following framework conventions, or nullptr if a tensor with this name doesn’t exist.
- Parameters:
tensor_name – Name of tensor
- Returns:
Tensor place corresponding to specified tensor name or nullptr if not exists
-
virtual Place::Ptr get_place_by_input_index(size_t input_idx) const#
Returns a tensor place by an input index.
- Parameters:
input_idx – Index of model input
- Returns:
Tensor place corresponding to specified input index or nullptr
-
virtual Place::Ptr get_place_by_operation_name(const std::string &operation_name) const#
Returns an operation place by an operation name following framework conventions, or nullptr if an operation with this name doesn’t exist.
- Parameters:
operation_name – Name of operation
- Returns:
Place representing operation or nullptr if not exists
-
virtual Place::Ptr get_place_by_operation_name_and_input_port(const std::string &operation_name, int input_port_index)#
Returns an input port place by operation name and appropriate port index.
- Parameters:
operation_name – Name of operation
input_port_index – Index of input port for this operation
- Returns:
Place representing input port of operation or nullptr if not exists
-
virtual Place::Ptr get_place_by_operation_name_and_output_port(const std::string &operation_name, int output_port_index)#
Returns an output port place by operation name and appropriate port index.
- Parameters:
operation_name – Name of operation
output_port_index – Index of output port for this operation
- Returns:
Place representing output port of operation or nullptr if not exists
-
virtual void set_name_for_tensor(const Place::Ptr &tensor, const std::string &new_name)#
Sets name for tensor. Overwrites existing names of this place.
- Parameters:
tensor – Tensor place
new_name – New name for this tensor
-
virtual void add_name_for_tensor(const Place::Ptr &tensor, const std::string &new_name)#
Adds new name for tensor.
- Parameters:
tensor – Tensor place
new_name – New name to be added to this place
-
virtual void set_name_for_operation(const Place::Ptr &operation, const std::string &new_name)#
Sets name for operation. Overwrites existing names of this place.
- Parameters:
operation – Operation place
new_name – New name for this operation
-
virtual void free_name_for_tensor(const std::string &name)#
Unassign specified name from tensor place(s)
- Parameters:
name – Name of tensor
-
virtual void free_name_for_operation(const std::string &name)#
Unassign specified name from operation place(s)
- Parameters:
name – Name of operation
-
virtual void set_name_for_dimension(const Place::Ptr &place, size_t shape_dim_index, const std::string &dim_name)#
Set name for a particular dimension of a place (e.g. batch dimension)
-
virtual void cut_and_add_new_input(const Place::Ptr &place, const std::string &new_name_optional = "")#
Cut immediately before this place and assign this place as new input; prune all nodes that don’t contribute to any output.
- Parameters:
place – New place to be assigned as input
new_name_optional – Optional new name assigned to this input place
-
virtual void cut_and_add_new_output(const Place::Ptr &place, const std::string &new_name_optional = "")#
Cut immediately after this place and assign this place as new output; prune all nodes that don’t contribute to any output.
- Parameters:
place – New place to be assigned as output
new_name_optional – Optional new name assigned to this output place
-
virtual Place::Ptr add_output(const Place::Ptr &place)#
Assign this place as new output or add necessary nodes to represent a new output.
- Parameters:
place – Anchor point to add an output
- Returns:
new output place, may be the same as a given place
-
virtual void remove_output(const Place::Ptr &place)#
Removes any sinks directly attached to this place with all inbound data flow if it is not required by any other output.
- Parameters:
place – Model place
-
virtual void override_all_outputs(const std::vector<Place::Ptr> &outputs)#
Replaces all existing outputs with new ones removing all data flow that is not required for new outputs.
- Parameters:
outputs – Vector with places that will become new outputs; may intersect existing outputs.
outputs – Array of new output places
-
virtual void override_all_inputs(const std::vector<Place::Ptr> &inputs)#
Modifies the graph to use new inputs instead of existing ones. New inputs should completely satisfy all existing outputs.
- Parameters:
inputs – Array of new input places
-
virtual void extract_subgraph(const std::vector<Place::Ptr> &inputs, const std::vector<Place::Ptr> &outputs)#
Leaves only subgraph that are defined by new inputs and new outputs.
- Parameters:
inputs – Array of new input places
outputs – Array of new output places
-
virtual void set_partial_shape(const Place::Ptr &place, const ov::PartialShape &shape)#
Defines all possible shape that may be used for this place; place should be uniquely refer to some data. This partial shape will be converted to corresponding shape of results OV nodes and will define shape inference when the model is converted to OV.
- Parameters:
place – Model place
shape – Partial shape for this place
-
virtual ov::PartialShape get_partial_shape(const Place::Ptr &place) const#
Returns current partial shape used for this place.
- Parameters:
place – Model place
- Returns:
Partial shape for this place
-
virtual void set_element_type(const Place::Ptr &place, const ov::element::Type &type)#
Sets new element type for a place.
- Parameters:
place – Model place
type – New element type
-
virtual ov::element::Type get_element_type(const Place::Ptr &place) const#
Returns current element type used for this place.
- Parameters:
place – Model place
- Returns:
Element type for this place
-
virtual void set_tensor_value(const Place::Ptr &place, const void *value)#
Freezes a tensor with statically defined value or replace existing value for already constant node or tensor.
- Parameters:
place – Tensor place
value – Value for tensor place representing a memory buffer
-
virtual void set_tensor_partial_value(const Place::Ptr &place, const void *min_value, const void *max_value)#
Defines partial value (lower bound and upper bound) for a tensor place TODO: more details for min_value and max_value format; who defines shape?
- Parameters:
place – Tensor place
min_value – Lower bound of partial value for tensor place
max_value – Upper bound of partial value for tensor place
-
virtual std::vector<Place::Ptr> get_inputs() const#