20221108:onnx2caffe错误处理

1:Mul维度不匹配问题

20221108:onnx2caffe错误处理_第1张图片

20221108:onnx2caffe错误处理_第2张图片

通过onnx找到对应输出输入的维度形状:

bottom[0]->对应294,维度是2x16x1x1

bottom[1]->对应284,维度是2x16x28x28

解决思路:利用flatten和scale层实现Mul

1:交换bottom[0]和bottom[1]:因为scale层机制是广播第二个输入

bottom[0]->对应284,维度是2x16x28x28

bottom[1]->对应294,维度是2x16x1x1

2:利用flatten压缩bottom[1]

bottom[1]->对应294,维度变成2x16

3:利用scale层实现广播乘法

bottom[0]->对应284,维度是2x16x28x28

bottom[1]->对应294,维度是2x16

具体操作:

修改_operators.py文件中的_convert_Mul函数

20221108:onnx2caffe错误处理_第3张图片

20221108:onnx2caffe错误处理_第4张图片

 验证结果:onnx结果与caffe结果完全一致

20221108:onnx2caffe错误处理_第5张图片

2:Upsample

原文连接:

1:https://blog.csdn.net/liu1152239/article/details/81478313

2:caffe特殊层:permute\reshape\flatten\slice\concat_liu1152239的博客-CSDN博客_caffe permute

1permute

permute功能类似于np.swapaxes;相当于交换caffe_blob中数据的维度

20221108:onnx2caffe错误处理_第6张图片

 2、reshape

只改变输入数据的维度,内容不变

20221108:onnx2caffe错误处理_第7张图片

 3、flatten

将多维数据拉成向量:Flatten层是把一个输入的大小为n * c * h * w变成一个简单的向量,其大小为 n * (c*h*w)。

当Reshape层的param参数为:{ shape { dim: 0 dim: -1 } } ,那么输出和flatten输出是完全一样的。所以,flatten相当于是reshape的特例。

4、concat

按指定维度进行拼接,caffe中数据通常为4个维度,即 num×channels×height×width,因此默认值1表示channels通道进行拼接。通过axis指定拼接的维度  
 

20221108:onnx2caffe错误处理_第8张图片

这是按num进行拼接,比如上面,输入图像均为24×24×3,用于分类的有150张图片,用于boundingbox回归的有50张,用于关键点回归的也有50张,则最后拼接的结果就是 (150+50+50)×3×24×24。 

5、slice

concat就是合并的操作,那么slice就是拆分的操作,需要指定的参数是:拆分的通道axis、拆分的位置slice_point。比如:

20221108:onnx2caffe错误处理_第9张图片

 其中slice_point的个数必须等于top的个数减一。输入的data_all维度为 250×3×24×24,拆分后的3个输出的维度依次为 150×3×24×24,50×3×24×24, 50×3×24×24

你可能感兴趣的:(深度学习,Hisi量化,caffe,人工智能,深度学习)