NCNN适配鲲鹏开源验证任务心得
NCNN适配鲲鹏开源验证任务心得
首先看了一下任务计划书:https://bbs.huaweicloud.com/blogs/437828,主要目的是将 NCNN项目适配至华为Kunpeng(鲲鹏)处理器以及OpenEuler的操作系统,确保其在这些硬件平台上的高效运行,也就是说验证NCNN能不能在 Kunpeng(鲲鹏)处理器以及OpenEuler操作系统中运行。
开发过程
明确目的后开始熟悉模型,NCNN的github网址:https://github.com/Tencent/ncnn。从github上用git拉取下来。
git clone https://github.com/Tencent/ncnn.git
下载ncnn源码之后,通过下面命令安装依赖的第三方库。
cd ncnn
git submodule update --init
1 鲲鹏、OpenEuler验证
1.1 安装环境依赖
NCNN主要使用C++开发,需要以下环境依赖:
- GCC/G++编译器
- 基础构建工具 make Cmake
- Protobuf c++开发库,用于序列化数据结构
- Protobuf-compiler编译器,用于从.proto文件生成源代码
- OpenCV,用于计算机视觉任务
首先查了一下系统版本架构
uname -a 或者 cat /etc/os-release
因为系统不一样,安装命令也会有变化。
Debian的linux系统,如Ubuntu,使用apt 命令安装
sudo apt update
sudo apt install build-essential cmake libprotobuf-dev protobuf-compiler libopencv-dev
Red Hat 、Centos和Fedora的系统,使用yum命令安装
sudo yum groupinstall “Development Tools”
sudo yum install cmake libprotobuf-devel protobuf-compiler opencv-devel
欧拉系统,尝试使用yum安装找不到依赖。然后可以使用dnf命令安装
sudo dnf update
sudo dnf groupinstall “Development Tools”
sudo dnf install cmake protobuf-devel opencv-devel
因为系统已经安装了gcc/g++,cmake,protobuf,只需要安装OpenCV,但是dnf命令安装opencv失败,仓库没有安装包,所以考虑源码编译安装。
编译OpenCV基本步骤如下:
git clone https://github.com/opencv/opencv.git
git clone https://github.com/opencv/opencv_contrib.git
cd opencv
mkdir build .
cd build
cmake -D CMAKE_BUILD_TYPE=RELEASE -D CMAKE_INSTALL_PREFIX=/usr/local -D OPENCV_EXTRA_MODULES_PATH=../../opencv_contrib/modules -D OPENCV_ENABLE_NONFREE=ON ..
编译
make
安装
sudo make install
1.2 编译NCNN
NCNN可以源码编译,也可以从github官网下载编译之后的库。
考虑到具体环境适配,本次验证采用源码编译。
cd ncnn
mkdir -p build && cd build
cmake 预编译
***注:
参数 -DNCNN_BENCHMARK=ON 打印每个算子的执行耗时
参数 -DNCNN_VULKAN=OFF 不采用硬件加速,cpu推理
参数 -DNCNN_BUILD_TOOLS=OFF 不编译生成工具,用于模型转换
参数 -DNCNN_BUILD_EXAMPLES=ON 编译生成案例
make 编译过程
预计等待约20分钟
编译完成
编译完成,可以看到生成很多案例的可执行文件。
安装make install
cd install
会看到include lib64两个文件夹
其中 include 包含头文件。
其中libncnn.a 就是通过源码编译得到静态库,可以用于其他项目开发中。
1.3 运行推理
执行推理程序前,需要准备模型文件,和测试文件。
模型文件下载地址:
https://github.com/nihui/ncnn-assets/tree/master/models
仓库里面,所有模型已经转换成NCNN适配的格式,不需要再转换。
测试文件,本次验证使用的是yolov8官方提供的bus.jpg,zidane.jpg
以yolov8为例,下载模型文件,与可执行文件放在同一目录。
NCNN推理,模型文件格式包含两部分
.bin文件是权重转化为二进制之后
.param是描述模型结构的
支持Caffa,Tensorflow,Pytorch框架训练的模型,都需要转换成NCNN适配的格式。
cd examples
./yolov8 ./images/bus.jpg
运行可执行文件yolov8,需要传入测试文件路径。
运行程序会报错
Opencv 图片显示的时候,需要依赖的库 gtk。
可以安装gtk依赖库,重新编译,也可以通过改变代码。
注释掉384行,386行,增加385行,模型推理结果保存到当前目录。
2 测试结果
Yolov8程序推理结果
Yolov8目标检测结果,检测到图片中的目标(人和车)
retinaface推理结果,检测到人脸和人脸关键点信息。
scrfd推理结果,检测到人脸。
Squeezenet程序推理结果
可以看到打印出每个算子耗时统计。
- 点赞
- 收藏
- 关注作者
评论(0)