ncc转换出错:
NOT supported ONNX opcode: BatchNormalization
onnx模型优化——进行BN和卷积层的融合
一、准备工作
安装ONNX
You can then install ONNX from PyPi (Note: Set environment variable ONNX_ML=1
for onnx-ml):
pip install onnx==1.3.0
You can also build and install ONNX locally from source code:
git clone https://github.com/onnx/onnx.git
cd onnx
git submodule update --init --recursive
python setup.py install
二、源码
import onnx
import os
from onnx import optimizer
# Preprocessing: load the model contains two transposes.
# model_path = os.path.join('resources', 'two_transposes.onnx')
# original_model = onnx.load(model_path)
original_model = onnx.load("resnet50.onnx")
print('The model before optimization:\n\n{}'.format(onnx.helper.printable_graph(original_model.graph)))
# A full list of supported optimization passes can be found using get_available_passes()
all_passes = optimizer.get_available_passes()
print("Available optimization passes:")
for p in all_passes:
print('\t{}'.format(p))
print()
# Pick one pass as example
passes = ['fuse_add_bias_into_conv']
# Apply the optimization on the original serialized model
optimized_model = optimizer.optimize(original_model, passes)
print('The model after optimization:\n\n{}'.format(onnx.helper.printable_graph(optimized_model.graph)))
# save new model
onnx.save(optimized_model, "newResnet50.onnx")
三,没有BatchNormalization,依然有下面错误:
Fatal: Not supported ONNX opcode: PRelu
ncc的最新版支持PRelu,但是需要自己编译:
### Linux
1. Install dependencies
- gcc >= 8
- cmake >=3.8
- python >= 3.6
2. Install conan
```bash
pip install conan==1.21.1
```
3. Clone source
```bash
git clone https://github.com/kendryte/nncase.git --recursive
(third_party如果缺文件就自行下载)
```
4. Build
```bash
mkdir out && cd out
cmake .. -DNNCASE_TARGET=k210 -DCMAKE_BUILD_TYPE=Release
make -j
```
。。。。。。
还是报错,崩溃。。。。。。。。。。。。。。。。
Fatal: inputs are not compatible to broadcast
可能是不支持resnet结构: