python - 从 ONNX 转换后 OpenVINO 输出密钥错误
问题描述
我已经将(修改的)Darknet 模型转换为 onnx,(尝试过 opset 10 和 11),然后使用这个(在底部)将此 onnx 模型转换为 IR
一切似乎都还好
C:\Program Files (x86)\IntelSWTools\openvino_2020.3.194\deployment_tools\model_optimizer>python mo.py --input_model C:\dev\yolo\weights\export.onnx --progress --output_dir C:\dev\yolo\weights\
Model Optimizer arguments:
Common parameters:
- Path to the Input Model: C:\dev\yolo\weights\export.onnx
- Path for generated IR: C:\dev\yolo\weights\
- IR output name: export
- Log level: ERROR
- Batch: Not specified, inherited from the model
- Input layers: Not specified, inherited from the model
- Output layers: Not specified, inherited from the model
- Input shapes: Not specified, inherited from the model
- Mean values: Not specified
- Scale values: Not specified
- Scale factor: Not specified
- Precision of IR: FP32
- Enable fusing: True
- Enable grouped convolutions fusing: True
- Move mean values to preprocess section: False
- Reverse input channels: False
ONNX specific parameters:
Model Optimizer version:
Progress: [....................] 100.00% done
[ SUCCESS ] Generated IR version 10 model.
[ SUCCESS ] XML file: C:\dev\yolo\weights\export.xml
[ SUCCESS ] BIN file: C:\dev\yolo\weights\export.bin
[ SUCCESS ] Total execution time: 10.24 seconds.
当我尝试使用此处提供的 YOLO 示例加载此模型时,加载很好,但是当我在调试模式下检查网络对象时,我看到输出是
Transpose_231
,Transpose_237
和Slice_230/Split.1
. 当我检查图层时,我看到它包含Transpose_231
,Transpose_237
和(注意,在拆分Slice_230/Split
中丢失了).1
这会导致样本KeyError: 'Slice_230/Split.1'
失败
for layer_name, out_blob in output.items():
out_blob = out_blob.buffer.reshape(net.layers[net.layers[layer_name].parents[0]].out_data[0].shape)
如果我检查 IR 的 .XML 文件,我看不到任何.1
内容
<layer id="214" name="Slice_230/Split" type="VariadicSplit" version="opset1">
<input>
<port id="0">
<dim>6</dim>
<dim>142191</dim>
</port>
<port id="1"/>
<port id="2">
<dim>3</dim>
</port>
</input>
<output>
<port id="3" precision="FP32">
<dim>4</dim>
<dim>142191</dim>
</port>
<port id="4" precision="FP32">
<dim>1</dim>
<dim>142191</dim>
</port>
<port id="5" precision="FP32">
<dim>1</dim>
<dim>142191</dim>
</port>
</output>
</layer>
有什么建议.1
吗?
编辑
尝试使用 opset 9,同样的事情只发生在Slice_174/Split
&Slice_174/Split.1
解决方案
split-1 实际上是数据移动操作的一个类别。它拆分操作将输入张量沿某个轴拆分为相同长度的片段。
此拆分操作将“数据”输入张量沿“轴”拆分为相同长度的片段。输出张量的第 i 个形状将等于“数据”形状,但沿维度“轴”的形状将是 data.shape[i]/num_splits。split_lengths 的元素之和必须匹配 data.shape[axis]。
示例之一:
<layer id="1" type="Split" ...>
<data num_splits="3" />
<input>
<port id="0"> <!-- some data -->
<dim>6</dim>
<dim>12</dim>
<dim>10</dim>
<dim>24</dim>
</port>
<port id="1"> <!-- axis: 1 -->
</port>
</input>
<output>
<port id="2">
<dim>6</dim>
<dim>4</dim>
<dim>10</dim>
<dim>24</dim>
</port>
<port id="3">
<dim>6</dim>
<dim>4</dim>
<dim>10</dim>
<dim>24</dim>
</port>
<port id="4">
<dim>6</dim>
<dim>4</dim>
<dim>10</dim>
<dim>24</dim>
</port>
</output>
</layer>
您可以参考此处了解更多信息:https ://docs.openvinotoolkit.org/latest/openvino_docs_ops_movement_Split_1.html
推荐阅读
- c# - 通过 httpclient 将字符串发布到 asp.net core webapi 失败,请求错误
- reactjs - For-await 循环需要时间来获取结果
- reactjs - 如何修复“无法编译意外令牌{”错误
- python - 对象在矢量运动中表现怪异
- ios - 在 UISplitViewController 中仅隐藏 .supplementary 列
- scala - 在二维数组中搜索单个元素 - Scala
- numpy - 4d 数组中的连续差异
- python - 在 PyCharm 中调试 Python 时获取函数调用的中间结果
- git - 是否可以转义 git 提交消息中的哈希 (#) 注释字符?
- python - 从列表中随机选择这些数字的百分比