NNIE模型转换环境搭建
《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
实验环境: Ubuntu18.04
海思只给提供了一个模型转换工具nnie_mapper,是把caffe模型转为nnie硬件支持的.wk的压缩模型文件。模型的原始值是float32表示的,而用8bit量化得到的是用int8来量化存储的,所以一般来说.wk模型的大小只有原始模型的四分之一,但是我转的模型却没有变小,而是变大了一点。
因为海思并没有提供nnie_mapper的源码,所以我需要查看该执行文件依赖哪些动态库:readelf -d nnie_mapper_12 来查看依赖哪些库,并对应 Hisvp 开发指南找到相应的版本。
安装多版本gcc (gcc 4.8.5)
GNU编译器集合(GCC)是C,C ++,Objective-C,Fortran,Ada,Go和D编程语言的编译器和库的集合。许多开源项目包括GNU工具和Linux内核都是用GCC编译的。
Ubuntu 多版本 gcc 的安装和切换 参考:
首先更新包列表:sudo apt update
键入以下命令安装build-essential软件包:sudo apt install build-essential
多版本安装:
使用命令将ubuntu-toolchain-r/test PPA添加到您的系统:sudo apt install software-properties-common
sudo add-apt-repository ppa:ubuntu-toolchain-r/test
安装多个版本的GCC&G++:
sudo apt install gcc-4.8 g++-4.8 gcc-7 g++-7 gcc-8 g++-8 gcc-9 g++-9
默认版本是具有最高优先级的版本,在我们的例子中是gcc-4.8
增加 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
1
2
编译protobuf 3.5.1
下载地址:https://github.com/google/protobuf/releases 找3.5.1
编译安装:
1.tar -xvf protobuf; cd protobuf
2.autogen.sh
3.configure -prefix=/you/want/to/install/
4.make
5.make check
6.make install
7.把lib路径加入到LD_LIBRARY_PATH中,把bin加到PATH中(通过编辑~/.bashrc即可)
编译 opencv 3.4.0
下载地址:
OpenCV - https://opencv.org/
opencv_contrib - github
安装依赖:
sudo apt-get install build-essential
sudo apt-get install cmake git libgtk2.0-dev pkg-config libavcodec-dev libavformat-dev libswscale-dev
sudo apt-get install python-dev python-numpy libtbb2 libtbb-dev libjpeg-dev libtiff-dev libjasper-dev libdc1394-22-dev
编译安装:
tar -xvzf opencv-3.4.0.tar.gz
cd opencv-3.4.0
安装opencv_contrib【如果编译过程出现问题就不编译opencv_contrib即可】
mv …/opencv_contrib-3.4.0 ./
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 ..
1
OPENCV_EXTRA_MODULES_PATH=你的opencv_contrib/modules的位置
CMAKE_INSTALL_PREFIX=你想安装的位置
cuda10以上没有dynlink_nvcuvid.h和nvcuvid.h,所以要将BUILD_opencv_cudacodec=OFF
如果编译opencv-contrib需要下载boost之类的可以不编译这个,即去掉OPENCV_EXTRA_MODULES_PATH
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
1
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
————————————————
版权声明:本文为CSDN博主「Mr.RottenPeach」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/racesu/article/details/107045858