简介
这是本书的最后一个章节,融合前面模块、库搜寻、调用第三方库的知识,并基于 ONNX runtime 写一个手写数字识别的命令行工具。
ONNX runtime 安装
ONNX runtime 的官方地址如下
ONNX Runtime 是一种跨平台的推理和训练机器学习加速器。通过使用 ONNX runtime 进行推理,可以实现更快的客户体验并降低陈本,并支持诸如 PyTorch、TensorFlow/Keras 等深度学习框架以及诸如 sckit-learn、LightGBM 和 XGBoost 等经典机器学习库。 ONNX Runtime 兼容不同的硬件、驱动程序和操作系统,并利用使用的硬件加速器和图形优化与转换来提供最佳性能。
安装并检验库(最新版本失败,低版本成功)
下载适用于 linux-x64 平台的压缩包,并解压到如下目录:
ch009 目录下编译失败: 应该和 c++ 版本与编译有关。暂时不折腾了。
低版本编译成功
下载和作者一样的 onnxruntime-linux-x64-1.10.0.tgz ,解压到对应目录。
运行提示 Load model failed,符合书本上的描述。
zlib 库的编译和安装
编译
在 zlib 源码路径中新建 build-release 目录,进入,然后 cmake 配置并开始编译。
mkdir build-release
cmake -DCMAKE_BUILD_TYPE=Release ..
cmake --build . –config Release
安装
cmake --install . 失败,需要以管理员权限安装
sudo cmake --install . 安装成功
libpng 库的编译和安装
编译
在源码目录中新建一个 build-release 目录,在此目录中编译
cmake -DCMAKE_BUILD_TYPE=Release ..
cmake --build . –-config Release
安装
cmake --install . 安装失败,需要管理员权限
sudo cmake --install . 安装成功
手写库示例
此目录程序是一个调用手写数字识别库的应用程序,依赖上面三个库。
CMake 目录程序
设置工程属性
以上命令设置 CMake 目录程序的工程属性。
查找软件包 onnxruntime
这里指定 onnxruntime 版本为 1.10.0 用户可以根据下载的实际版本进行修改。
第17行查找 onnxruntime 包并指定版本号为 1.10.实际会调用 cmake/Findonnxruntime.cmake 文件。它的内容如下:
最终设置 onnxruntime_INCLUDE_DIR 、onnxruntime_LIBRARIES 两个变量。
查找软件包 libpng
在 CMakeLists.txt 的第18行。
它实际会调用 cmake/Findlibpng.cmake 文件,它的内容如下:
注意,它会继续在系统中找 libpng16.cmake 模块文件,即此文件是对 libpng16.cmake 文件的封装,导出了 libpng_LIBRARY 和 libpng_INCLUDE_DIR 两个变量。
注意,libpng16.cmake 文件路径在 /usr/local/lib/libpng/libpng16.cmake 。是上面libpng 安装的。
生成出错
出错,提示 png_shared 接口目标包含 ZLIB:ZLIB 没有找到。
ZLIB:ZLIB 解决办法
修改 /usr/local/lib/libpng/libpng16.cmake 文件
以管理员权限打开此文件,屏蔽包含 ZLIB:ZLIB 的两个语句,如下图所示:
cmake 配置并编译,成功
mkdir build-debug
cd build-debug
cmake -DCMAKE_BUILD_TYPE=Debug ..
cmake --build . --config Debug
运行结果—有对有错
命令行运行 ./recognize ../models/mnist.onnx ../2.png
分别识别 2.png/3.png/4.png 均识别成功。
这里的 2.png/3.png/4.png 均是作者提供的原始图片。
以下是我提供的图片 8.png/9.png/0.png,图片尺寸和2.png 相同,111x131 像素大小。
运行结果如下:0/8 识别正确,9 识别错误(识别为1)。
又提供了一张粗体的 9_bold.png 图片,识别结果还是出错,识别成了7.
本文来自论坛,点击查看完整帖子内容。