# onnx-matting-on-loongson **Repository Path**: piaoddang/onnx-matting-on-loongson ## Basic Information - **Project Name**: onnx-matting-on-loongson - **Description**: 编写本程序的目的是在龙芯3A6000上验证onnxruntime的运行状况,实测运行稳定,性能表现也很好。 用C++调用onnxruntime和相关模型文件,实现人脸检测、关键点标定、人脸分区、人像抠图的测试程序。 - **Primary Language**: C++ - **License**: GPL-3.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 2 - **Created**: 2024-07-13 - **Last Updated**: 2024-07-13 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # onnx-matting-on-loongson #### 介绍 编写本程序的目的是在龙芯3A6000上验证onnxruntime的运行状况,实测运行稳定,性能表现也很好。 用C++调用onnxruntime和相关模型文件,实现人脸检测、关键点标定、人脸分区、人像抠图的测试程序。 编译后,命令行运行编译出的 matting,参数为图片路径,获得以下输出: ![输入图片说明](testImage/demo1.png) 在几款不同的CPU上执行相同的操作,得到如下的测试结果: ![输入图片说明](testImage/1-readme.png) ![输入图片说明](testImage/2-readme.png) ![输入图片说明](testImage/3-readme.png) #### 安装教程 程序使用Qt5编写,依赖onnxruntime库,请自行下载 onnxruntime 并编译安装。 建议使用核心版本为 6.x 的较新的Linux发行版,如 Deepin R23、AOSC 等,这些版本中的包版本也相对较新,可以避免一些麻烦。 如果使用UOS专业版、Loongnix等核心和包的版本都较老的Linux,是不能直接编译ONNX Runtime的,至少需要升级Python和CMake。 先分别从Python和CMake官网下载其最新版本的源码,然后编译并安装。 编译和安装的过程很简单,都是解压文件之后,在控制台中进入源码所在的文件夹,然后运行命令: ``` ./configure make -j 8 sudo make install ``` 因为Python允许多版本并存,所以在安装后要切换到新版本。切换Python版本的方法很多,这里不再赘述。 因为 onnxruntime 在 1.17 版才正式支持龙芯 LoongArch 架构,所以应该下载 1.17 及之后的版本。 ``` sudo apt-get install build-essential git gcc g++ cmake git clone -b v1.18.0 https://github.com/microsoft/onnxruntime.git cd onnxruntime ./build.sh --skip_tests --config Release --build_shared_lib --parallel cd /build/Linux/Release sudo make install ``` ONNX Runtime的编译可能不会完全顺利,无论是在x86上还是在龙芯上,我编译ONNX Runtime时遇到了不同的问题。x86上遇到的问题让我折腾了很长时间,最后只能通过完全不编译它的test模块来解决,好在GitHub上有已经编译好的x86版二进制,可以直接下载使用。在龙芯上遇到的问题反而简单,只是由于编译参数中指定了把警告变成错误,于是在“onnxruntime/core/mlas/lib/quantize.cpp”这个文件中出现的 `*((uint32_t*)&min_f)`这种把浮点变量转成整型指针再取值的操作就成为了错误。 ![输入图片说明](testImage/%E5%9B%BE%E7%89%871.png) 这样情况要么改编译配置文件,要么改代码。我的选择是改代码,把上面的改成下面的样子就好了。 ![输入图片说明](testImage/%E5%9B%BE%E7%89%872.png) 由于 onnxruntime 默认安装到 /usr/local,因此可能出现本程序在编译时能找到 .so,在运行时反而找不到 .so的问题。 可以在 /usr/lib 下建立一个指向 onnxruntime 的含文件全名的符号链接来解决此问题: ``` `sudo ln -s /usr/local/lib/llibonnxruntime.so.1.18.0 /usr/lib/libonnxruntime.so.1.18.0` ``` 编译完成后,需要把 model 文件夹中的几个模型文件复制到与执行文件相同的文件夹中。