《NNIE模型转换环境搭建》
推荐使用开源项目 https://github.com/RaySue/NNIE-lite ,使用NNIE像使用ncnn一样简单。
Key Words:多版本gcc安装、NNIE模型转换
Beijing, 2020
作者:RaySue
Code:https://github.com/RaySue/NNIE-lite
Agile Pioneer
海思只给提供了一个模型转换工具nnie_mapper,是把caffe模型转为nnie硬件支持的.wk的压缩模型文件。模型的原始值是float32表示的,而用8bit量化得到的是用int8来量化存储的,所以一般来说.wk模型的大小只有原始模型的四分之一,但是我转的模型却没有变小,而是变大了一点。
因为海思并没有提供nnie_mapper的源码,所以我需要查看该执行文件依赖哪些动态库:readelf -d nnie_mapper_12
来查看依赖哪些库,并对应 Hisvp 开发指南找到相应的版本。
GNU编译器集合(GCC)是C,C ++,Objective-C,Fortran,Ada,Go和D编程语言的编译器和库的集合。许多开源项目包括GNU工具和Linux内核都是用GCC编译的。
sudo apt install gcc-4.8 g++-4.8 gcc-7 g++-7 gcc-8 g++-8 gcc-9 g++-9
增加 gcc/g++ 的可选项
sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-4.8 48 --slave /usr/bin/g++ g++ /usr/bin/g++-4.8
sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-8 80 --slave /usr/bin/g++ g++ /usr/bin/g++-8
sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-9 90 --slave /usr/bin/g++ g++ /usr/bin/g++-9
版本切换命令
# 切换 gcc 版本, 选择4.8.5再进行后续编译操作
sudo update-alternatives --config gcc
下载地址:https://github.com/google/protobuf/releases 找3.5.1
编译安装:
下载地址:
OpenCV - https://opencv.org/
opencv_contrib - github
安装依赖:
编译安装:
tar -xvzf opencv-3.4.0.tar.gz
cd opencv-3.4.0
安装opencv_contrib【如果编译过程出现问题就不编译opencv_contrib即可】
mkdir build; mkdir install
cmake -D CMAKE_BUILD_TYPE=RELEASE -D CMAKE_INSTALL_PREFIX=/x/x –D WITH_VTK=ON -D OPENCV_EXTRA_MODULES_PATH=/x/x/opencv_contrib-3.4.0/modules/ -D CUDA_NVCC_FLAGS="-std=c++11 --expt-relaxed-constexpr" -D WITH_NVCUVID=OFF -D BUILD_opencv_cudacodec=OFF -D ENABLE_CXX11=YES ..
make
make check
make install
CMAKE_INSTALL_PREFIX 中就是你需要的include lib bin
注意
你的gcc的版本最好是4.8,我的是4.8.5,而且你的protobuf需要是在这个版本下编译的,否则会报错
undefined symbol:_ZN6google8protobuf8internal26fixed_address_empty_stringE
用命令:nm -s libprotobuf.so|grep _ZN6google8protobuf8internal26fixed_address_empty_stringE
会发现有这个符号,但是多了B5cxx11,这个是和编译程序的 gcc 程序有关系,由于 protobuf 的源码中含有c++程序,所以需要使用 gcc4.8.5 和 g++4.8.5 来编译 protobuf 才行。
模型转换命令:
nnie_mapper_12 model.cfg
model.cfg 文件介绍:
[prototxt_file] model.prototxt # caffe 的prototxt
[caffemodel_file] model.caffemodel # caffe 的model文件
[batch_num] 1 # [单张模式/多张模式]
[net_type] 0
[sparse_rate] 0 # 0 - 不稀疏处理 0.5 - 0.5稀疏
[compile_mode] 1 # 0 - 高速模式损失精度 1 - 高精度模式
[is_simulation] 0 # 0 - 芯片模式 1 - 仿真模式用于pc端
[log_level] 2
[instruction_name] save_model # 存储的NNIE模型文件名
[image_list] ./file_list.txt # 用于存储数据的绝对路径,30张左右的样例数据用于量化模型
[image_type] 1 # 1 - 表示网络数据输入为 SVP_BLOB_TYPE_U8(普通的灰度图和RGB图)类型; 此时要求 image_list 配置是 RGB 图或者灰度图片的 list 文件;
[mean_file] ./mean.txt # 均值文件,用于数据的标准化,每行代表一个通道要减去的值
[norm_type] 5 # 0 - 不做预处理 5 - 减通道均值后再乘以 data_scale
[RGB_order] BGR
[data_scale] 1 # 0.00390625 = 1/ 256;1 就是不缩放
[internal_stride] 16 # 数据的维度必须是16的倍数,否则按16的倍数补全,默认为16,修改无效
[1] 海思AI芯片:https://blog.csdn.net/avideointerfaces/article/details/100178343
[2] 多版本GCC安装:https://www.linuxidc.com/Linux/2019-06/159059.htm