问题描述
我已经将(修改后的)Darknet模型转换为onnx(尝试操作集10和11),然后使用documentation page
将此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.
当我尝试使用this (at the bottom)中提供的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实际上是数据移动操作的类别。 “拆分”操作沿一个轴将输入张量拆分为相同长度的片段。
此Split操作将“数据” 输入张量沿“轴” 分成相同长度的片段。输出张量的第i个形状将等于“ data” 形状,除了沿尺寸“ axis” 的尺寸为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