OpenVINO モデルパス#

ov::pass::ModelPass は、ov::Model 全体を入力として受け取って処理する変換に使用されます。

ModelPass 変換クラスのテンプレート

// template_model_transformation.hpp 
class ov::pass::MyModelTransformation : public ov::pass::ModelPass { 
public: 
    OPENVINO_RTTI("MyModelTransformation", "0"); 
    bool run_on_model(const std::shared_ptr<ov::Model>& f) override; 
};
// template_function_transformation.cpp 

bool ov::pass::MyModelTransformation::run_on_model(const std::shared_ptr<ov::Model>& f) { 
    RUN_ON_MODEL_SCOPE(MyModelTransformation); 
    // トランスフォーメーション・コードの例 
    NodeVector nodes; 

    // OpenVINO トランスフォーメーション関数を位相順序で走査 
    for (auto& node : f->get_ordered_ops()) { 
        // 入力ポートと出力ポートの数が 1 であることを確認 
        if (node->inputs().size() == 1 && node->outputs().size() == 1) { 
            // 入力と出力の形状が完全に定義されており (動的ではない)、消費者の数が 1 に等しいことを確認 
            Input<Node> input = node->input(0); 
            Output<Node> output = node->output(0); 
            if (input.get_partial_shape().is_static() && output.get_partial_shape().is_static() && output.get_target_inputs().size() == 1) { 
                nodes.push_back(node); 
            } 
        } 
    } 

    // 収集されたノードのタイプと名前をプリント 
    for (auto& node : nodes) { 
        std::cout << "Type: " << node->get_type_info().name << std::endl << "Name: " << node->get_friendly_name() << std::endl; 
    } 

    // OpenVINO トランスフォーメーション関数を変更していないため、false を返します 
    return false; 
}

ov::pass::ModelPass を使用するには、変換コードを記述する run_on_model メソッドをオーバーライドする必要があります。変換中に元のモデルが変更された場合 (新しい操作が追加されたか、操作の置換が行われたか、ノード属性が変更された場合)、戻り値は true です。それ以外は false です。また、ov::pass::ModelPass ベースの変換は ov::pass::Manager 経由でも実行できます。

関連情報#