环境要求:ubuntu18.04
参考文件:
《ATC工具使用指南》《应用开发指南》《驱动和开发环境安装指南》
《昇腾模型压缩工具使用指南(ONNX)》
交叉编译器的安装
直接./aarch64-mix210-linux.install
vi /etc/profile
source /etc/profile使之生效
atc安装(非root)
1:检查相关依赖
gcc --version
g++ --version
cmake --version
make --version
unzip --version
dpkg -l build-essential | grep build-essential | grep ii
dpkg -l zlib1g-dev| grep zlib1g-dev| grep ii
dpkg -l libbz2-dev| grep libbz2-dev| grep ii
dpkg -l libsqlite3-dev| grep libsqlite3-dev| grep ii
dpkg -l libssl-dev| grep libssl-dev| grep ii
dpkg -l libxslt1-dev| grep libxslt1-dev| grep ii
dpkg -l libffi-dev| grep libffi-dev| grep ii
如没有安装可以使用sudo apt-get install xxxx进行安装
2:安装python3.7.5
1)获取安装包--wget https://www.python.org/ftp/python/3.7.5/Python-3.7.5.tgz
- 解压 tar -xzvf Python-3.7.5.tgz
cd Python-3.7.5
./configure --prefix=/usr/local/python3.7.5 --enable-loadable-sqlite-extensions --enable-shared
make
sudo make install
- 设置软连接
sudo ln -s /usr/local/python3.7.5/bin/python3 /usr/local/python3.7.5/bin/python3.7.5
sudo ln -s /usr/local/python3.7.5/bin/pip3 /usr/local/python3.7.5/bin/pip3.7.5
- 设置环境变量,非root
vi ~/.bashrc
在最后加入
#用于设置 python3.7.5 库文件路径
export LD_LIBRARY_PATH=/usr/local/python3.7.5/lib:$LD_LIBRARY_PATH
#如果用户环境存在多个 python3 版本,则指定使用 python3.7.5 版本
export PATH=/usr/local/python3.7.5/bin:$PATH
source ~/.bashrc
- 测试一下
python3.7.5 --version
pip3.7.5 install --upgrade(升级pip)
pip3.7.5 --version
3)安装相关的依赖
4:./Ascend-cann-toolkit_5.20.t6.2.b060_linux-x86_64.run --install
5:配置环境变量
source /home/warren/Ascend/ascend-toolkit/latest/x86_64-linux/bin/setenv.bash
:6:安装aarch64-mix210-linux
7:若需要卸载
bash /home/warren/Ascend/ascend-toolkit/latest/x86_64-linux/script/toolkit_uninstall.sh
atc使用:
1:首先设置环境变量
source /home/warren/Ascend/ascend-toolkit/latest/x86_64-linux/bin/setenv.bash
2:框架转换案例
atc --model=/home/warren/ss928/model_onnx/resnet101_v11.onnx \
--soc_version=OPTG --framework=5 \
--output=/home/warren/ss928/model_onnx/out \
--input_shape="input:-1,3,224,224" --dynamic_batch_size="1,2,4,8"
amct(主要用于量化)安装
- 所需文件
- 所需依赖
3)pip3 install amct_onnx-0.3.2-py3-none-linux_x86_64.whl
可以查看是否安装成功
- 编译自定义算子
4:cd amct_onnx_op/ && python3 setup.py build(请使用root权限)
至此完成
转换案例
1:获取sample--> samples: CANN Samples
2:文件结构如下,其中data里放矫正的图片
3:python3 ./src/resnet-101_calibration.py(请使用root)
至此量化完成。
应用开发测试
PC端:
下载sample
https://gitee.com/ascend/samples/tree/master/cplusplus/level2_simple_inference/1_classification/resnet50_imagenet_classification
1:添加环境变量:
export DDK_PATH=$HOME/Ascend/ascend-toolkit/latest
export NPU_HOST_LIB=$DDK_PATH/runtime/lib64/stub
2:创建build目录
mkdir -p build/intermediates/host
3:cmake ../../../src -DCMAKE_CXX_COMPILER=aarch64-mix210-linux-g++ -DCMAKE_SKIP_RPATH=TRUE
板端
设置环境变量
export LD_LIBRARY_PATH=/opt/sd/lib_svp
export ASCEND_AACPU_KERNEL_PATH=/opt/sd/lib_svp
直接运行./main
2:./main
添加opencv库
默认没有带opencv库,但是实际项目中需要用到opencv库,因此添加一下此库;
1:编译opencv源码,这里具体可以参考
海思Hi3516移植opencv以及错误调试_海思hi3516摄像头开发-CSDN博客
2:在工程的根目录下新建一个3rdparty文件用于存放第三方的库,将编译安装好的库拷贝至3rdparty下并命名为opencv
3:修改src下的CMakeLists.txt,重点可以看一下#opencv的部分,总的说就是查找opencv的库,并链接到库即可
# CMake lowest version requirement
cmake_minimum_required(VERSION 3.5.1)
# project information
project(ACL_CLASSIFICATION_RESNET50)
# Compile options
add_compile_options(
-std=c++11
-fPIC
-fstack-protector-all
-D_FORTIFY_SOURCE=2 -O2
)
# Specify target generation path
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY "../../../out")
set(CMAKE_CXX_FLAGS_DEBUG "-fPIC -O0 -g -Wall")
set(CMAKE_CXX_FLAGS_RELEASE "-fPIC -O2 -Wall -s")
set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -Wl,-z,relro,-z,now,-z,noexecstack -fPIE -pie")
set(CMAKE_SKIP_RPATH TRUE)
# Header path
include_directories(
$ENV{DDK_PATH}/acllib/include/
../inc/
../3rdparty/opencv/opencv-3.4.3/lib
)
# add host lib path
if (target MATCHES "Simulator_Function" OR target MATCHES "Simulator_Instruction" OR target MATCHES "Simulator_Performance")
set(ENV{NPU_HOST_LIB} $ENV{DDK_PATH}/toolkit/tools/sim/lib)
else()
set(ENV{NPU_HOST_LIB} $ENV{DDK_PATH}/acllib/lib64/stub) #this case
endif()
# opencv
set(OpenCV_DIR "../3rdparty/opencv/opencv-3.4.3/share/OpenCV")
# 查找opencv的path
find_package(OpenCV REQUIRED)
# 打印opencv的相关信息
message(STATUS "OpenCV library status:")
message(STATUS "version: ${OpenCV_VERSION}")
message(STATUS "libraries: ${OpenCV_LIBS}")
message(STATUS "include path: ${OpenCV_INCLUDE_DIRS}")
#
set(LIB_PATH $ENV{NPU_HOST_LIB} )
MESSAGE(NPU_HOST_LIB=$ENV{NPU_HOST_LIB})
link_directories(${LIB_PATH})
set(OPENCV_LIB ${OpenCV_DIR})
link_directories(${OPENCV_LIB})
message(${OPENCV_LIB})
FILE(GLOB SAMPLE_SRC_FILE *.cpp)
add_executable(main ${SAMPLE_SRC_FILE})
if (target MATCHES "Simulator_Function")
target_link_libraries(main funcsim )
elseif (target MATCHES "Simulator_Instruction" OR target MATCHES "Simulator_Performance")
target_link_libraries(main instsim )
else()
target_link_libraries(main svp_acl ss_mpi_sysmem ss_mpi_km pthread securec dl protobuf-c stdc++ ${OpenCV_LIBS})
endif()
install(TARGETS main DESTINATION ${CMAKE_RUNTIME_OUTPUT_DIRECTORY})
4:cmake测试
5:代码测试,头文件包含opencv的头文件
至此opencv库移植成功