使用OpenVino API为每一层的重量

发布于 2025-01-23 20:44:26 字数 429 浏览 0 评论 0 原文

我想在OpenVino框架上使用C ++/Python API来获得网络每一层的重量和偏差张量。我发现此解决方案,但不幸的是,它使用了不再支持的较旧的API(Release 2019 R3.1)。例如,最新的OpenVino中不存在类 cnnnetreader 。有人知道如何在新版本中实现这一目标吗? (2020+)

谢谢!

I'd like to get the tensor of weights and biases for each layer of the network using the C++/Python API on the OpenVINO framework. I found this solution but unfortunately it uses an older API (release 2019 R3.1) that is no longer supported. For example, the class CNNNetReader does not exist in the latest OpenVINO. Does anyone know how to achieve this in new releases? (2020+)

Thanks!

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

且行且努力 2025-01-30 20:44:26

您可以尝试这样的事情吗?首先,您需要读取模型,图表中的节点上的迭代并过滤常数(我在此处制作副本,因为节点以共享指针为单位)。然后,如果您正在寻找每个常数节点,则可以将每个常数节点转换为值的向量。为此,您可以使用模板方法 cast_vector< t> ,并且可以通过检查常数保留的内容来确定要使用哪种类型(使用 get_element_type )。

const auto model = core.read_model("path");

std::vector<std::shared_ptr<ov::op::v0::Constant>> weights;
const auto ops = model->get_ops();
std::copy_if(std::begin(ops), std::end(ops), std::back_inserter(weights), [](const std::shared_ptr<ov::Node>& op) {
    return std::dynamic_pointer_cast<ov::op::v0::Constant>(op) != nullptr;
});

for (const auto& w : weights) {
    if (w->get_element_type() == ov::element::Type_t::f32) {
        const std::vector<float> floats = w->cast_vector<float>();
    } else if (w->get_element_type() == ov::element::Type_t::i32) {
        const std::vector<int32_t> ints = w->cast_vector<int32_t>();
    } else if (...) { 
        ... 
    }
}

Can you try something like this? First you need to read-in a model, the iterate over the nodes in the graph and filter the Constants (I'm making a copy here because the nodes are held as shared pointers). Then each Constant node can be transformed into a vector of values if you're looking for that. To do that you can use the templated method cast_vector<T> and you can figure out which type to use by checking what the Constant holds (using get_element_type).

const auto model = core.read_model("path");

std::vector<std::shared_ptr<ov::op::v0::Constant>> weights;
const auto ops = model->get_ops();
std::copy_if(std::begin(ops), std::end(ops), std::back_inserter(weights), [](const std::shared_ptr<ov::Node>& op) {
    return std::dynamic_pointer_cast<ov::op::v0::Constant>(op) != nullptr;
});

for (const auto& w : weights) {
    if (w->get_element_type() == ov::element::Type_t::f32) {
        const std::vector<float> floats = w->cast_vector<float>();
    } else if (w->get_element_type() == ov::element::Type_t::i32) {
        const std::vector<int32_t> ints = w->cast_vector<int32_t>();
    } else if (...) { 
        ... 
    }
}
喜你已久 2025-01-30 20:44:26

使用类和方法 read_model 读取模型。接下来,使用类中的方法 获取每一层的细节。

import openvino.runtime as ov

ie = ov.Core()

network = ie.read_model('face-detection-adas-0001.xml')

# print(network.get_ops())

# print(network.get_ordered_ops())

# print(network.get_output_op(0))

# print(network.get_result())

请参阅 openVino python python api /docs.openvino.ai/latest/groupov_cpp_api.html“ rel =” nofollow noreferrer“> OpenVino Runtime C ++ API 有关更多信息。

Use the class Core and the method read_model to read the model. Next, use the methods in the class Model to get the detail for each layer.

import openvino.runtime as ov

ie = ov.Core()

network = ie.read_model('face-detection-adas-0001.xml')

# print(network.get_ops())

# print(network.get_ordered_ops())

# print(network.get_output_op(0))

# print(network.get_result())

Refer to OpenVINO Python API and OpenVINO Runtime C++ API for more information.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文